An open-source event management and ticketing platform built for Streaming Tech Sweden 2026. Built with Next.js, TypeScript, and deployed on Eyevinn Open Source Cloud (OSC).
Live site: events.apps.osaas.io
- Create, edit, and publish events with rich details
- Cover images and media uploads
- Event visibility controls (public/private)
- Event status workflow (draft, published, cancelled, completed)
- Multiple ticket types with individual pricing and capacity
- Discount codes (percentage, fixed amount, free tickets)
- Group discounts for bulk purchases
- Invoice payment option for B2B customers
- Ticket reservation system during checkout
- Real-time availability tracking
- Speaker profiles with photos, bios, and social links
- Drag-and-drop speaker ordering
- Agenda/schedule builder with time slots
- Speaker assignment to agenda items
- Stripe integration for online payments
- Invoice billing for corporate customers
- Automated refund processing
- VAT handling (25% included)
- PDF tickets with QR codes
- QR code scanner for event check-in
- Attendee export to CSV/Excel
- Per-ticket attendee information
- Sales statistics and revenue tracking
- 30-day sales trend charts
- Order management with filtering and search
- Bulk order actions and CSV export
- Ticket type and discount code management
- Platform-wide statistics
- User management with role assignment
- Create accounts with one-time passwords
- Event overview across all organizers
- Organizer login with email/password
- Role-based access control (Organizer, Super Admin)
- Guest checkout for attendees (no account required)
- Account deletion with grace period
- Frontend: Next.js 14+ with App Router, React, TypeScript, Tailwind CSS
- Backend: Next.js API Routes, Prisma ORM
- Database: PostgreSQL (on OSC)
- Cache: Valkey/Redis (on OSC)
- Storage: MinIO/S3 (on OSC)
- Authentication: NextAuth.js
- Payments: Stripe
- Deployment: Eyevinn Open Source Cloud
- Node.js 18+
- npm 9+
- Access to OSC services (or local PostgreSQL, Redis, MinIO)
-
Clone the repository:
git clone https://github.com/JuiceAndTheJoe/openevents.git cd openevents -
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env # Edit .env with your configuration -
Generate Prisma client and run migrations:
npm run db:generate npm run db:migrate
-
Seed the database (optional):
npm run db:seed
-
Start the development server:
npm run dev
| Role | Password | |
|---|---|---|
| Super Admin | admin@openevents.local | Admin123! |
| Organizer | organizer@openevents.local | Organizer123! |
openevents/
├── prisma/ # Database schema and migrations
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── (auth)/ # Organizer authentication
│ │ │ ├── login/
│ │ │ ├── register/
│ │ │ ├── forgot-password/
│ │ │ └── reset-password/
│ │ ├── (public)/ # Public pages
│ │ │ ├── events/ # Event listing and details
│ │ │ │ └── [slug]/
│ │ │ │ └── checkout/
│ │ │ └── orders/ # Order confirmation
│ │ ├── (dashboard)/ # Organizer & admin dashboard
│ │ │ └── dashboard/
│ │ │ ├── events/ # Event management
│ │ │ │ ├── new/
│ │ │ │ └── [id]/
│ │ │ │ ├── edit/
│ │ │ │ ├── orders/
│ │ │ │ ├── tickets/
│ │ │ │ ├── discounts/
│ │ │ │ └── scan/
│ │ │ ├── admin/ # Super admin panel
│ │ │ │ └── users/
│ │ │ ├── profile/
│ │ │ ├── settings/
│ │ │ └── scan/ # Quick ticket scanner
│ │ └── api/ # API routes
│ │ ├── auth/
│ │ ├── events/
│ │ │ └── [id]/
│ │ │ ├── speakers/
│ │ │ ├── agenda/
│ │ │ ├── ticket-types/
│ │ │ └── discount-codes/
│ │ ├── orders/
│ │ │ └── [id]/
│ │ │ ├── pay/
│ │ │ ├── capture/
│ │ │ ├── refund/
│ │ │ └── mark-paid/
│ │ ├── dashboard/
│ │ ├── admin/
│ │ ├── webhooks/
│ │ └── upload/
│ ├── components/ # React components
│ │ ├── ui/ # Base UI components
│ │ ├── auth/ # Authentication
│ │ ├── events/ # Event display & editing
│ │ ├── tickets/ # Checkout & tickets
│ │ ├── dashboard/ # Dashboard widgets
│ │ ├── admin/ # Admin components
│ │ └── layout/ # Layout components
│ ├── lib/ # Shared libraries
│ │ ├── auth/ # Authentication utilities
│ │ ├── db/ # Prisma client
│ │ ├── email/ # Email service
│ │ ├── storage/ # S3/MinIO utilities
│ │ ├── payments/ # Stripe integration
│ │ ├── analytics/ # Dashboard analytics
│ │ └── validations/ # Zod schemas
│ └── types/ # TypeScript types
├── docs/ # Documentation
└── public/ # Static assets
npm run db:generate # Generate Prisma client
npm run db:migrate # Run migrations (dev)
npm run db:push # Push schema changes
npm run db:seed # Seed database
npm run db:studio # Open Prisma Studio
npm run db:reset # Reset databasenpm test # Run all tests
npm run test:watch # Run tests in watch modenpm run lint- Architecture - System design and infrastructure
- Contributing - How to contribute
- Setup Guide - Detailed setup instructions
- Email Setup - Email configuration
- Storage Setup - MinIO/S3 configuration
This project is deployed on Eyevinn Open Source Cloud (OSC) at events.apps.osaas.io.
To contribute features or fixes to the live site at events.apps.osaas.io:
- Fork or clone github.com/JuiceAndTheJoe/openevents
- Set up your local development environment (see Quick Start)
- Make your changes following the guidelines in CONTRIBUTING.md
- Submit a pull request to
main
Note: Merged changes will only appear on the live site after someone with access to the OpenEvents OSC account restarts the application.
To deploy a separate OpenEvents instance on your own OSC account:
- Fork the repository to your GitHub account
- Ensure your AI coding assistant (Claude Code, Cursor, etc.) is connected to GitHub and OSC via MCP
- Ask your assistant: "Set up OpenEvents on my OSC from my fork"
The assistant will provision the required OSC services (PostgreSQL, Valkey, MinIO, Web Runner) and configure the environment.
To deploy changes pushed to your fork's main branch, restart your Web Runner instance through OSC.
See ARCHITECTURE.md for details on OSC service configuration.
This version of OpenEvents was built specifically for Streaming Tech Sweden 2026 and has some limitations that should be addressed for broader use.
The email integration is fully functional, but emails sent through OSC's default mail service will not be delivered. Email providers like Gmail and Outlook block messages from @users.osaas.io addresses.
Impact: Users will not receive order confirmations, tickets, or receipts via email until a reputable email provider is configured.
Recommendation: Configure a third-party email service (SendGrid, Postmark, AWS SES, etc.) via the environment variables in .env. See Email Setup for configuration details.
Invoice payment functionality is currently tied to Eyevinn. When users select invoice as their payment method, they are prompted to send payment details to info@eyevinn.se, regardless of which organizer created the event.
Recommendation: For other organizations, update the invoice instructions in the checkout flow to point to the appropriate billing contact.
Ticket buyers do not create accounts on the platform. This was a deliberate decision to minimize friction during the purchase process.
Impact: Combined with the email delivery limitation above, buyers currently have limited ways to retrieve their ticket information after purchase. They cannot sign in to view past orders.
Recommendation: For production use, either:
- Configure working email delivery (priority)
- Implement an order lookup feature using email + order number
- Add optional account creation during checkout
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
MIT License - see LICENSE for details.