Fast, secure, and scalable platform to create events, sell tickets, and validate entry.
- Overview
- Goals
- Architecture
- Tech Stack
- Main Features
- System Flows
- Database Schema
- API Endpoints
- Project Structure
- Setup & Installation
- Configuration
- Testing
- Security
- Monitoring & Performance
- Frontend Options
- Roadmap
- Contributing
- License
- Example Flow
Tickify is a modern event management and ticketing system built with ASP.NET Core (C#) and SQL Server. It empowers event organizers to publish and manage events while giving users a fast and intuitive booking experience.
ποΈ From event creation β ticket sales β QR check-in β all in one system.
- β‘ Frictionless Checkout: Simple, fast, and responsive ticket buying experience.
- π§ Smart Management: Organizers can manage events, tickets, and promotions easily.
- π Secure & Reliable: Prevent double-booking and overselling with transactional safety.
- π Scalable: Clean modular architecture to support future features and integrations.
- π Transparent: Clear order history, fees, and refund policies.
Frontend (Next.js / React SPA)
β
β HTTPS REST API Calls
βΌ
Backend (ASP.NET Core 8 Web API)
βββ Controllers β Routes
βββ Services β Business Logic
βββ EF Core β SQL Server
βββ Auth β JWT + ASP.NET Identity
Database: SQL Server 2019+
(Phase 2) Redis β seat lock, rate limiting
Layered Design:
- Controllers: REST endpoints.
- Services: Business rules (pricing, inventory, payments).
- Data: EF Core ORM & migrations.
- Infrastructure: Payment, email, and storage adapters.
| Layer | Technology |
|---|---|
| Backend | ASP.NET Core 8, C#, EF Core |
| Database | Microsoft SQL Server |
| Frontend | Next.js / React + TailwindCSS + shadcn/ui |
| Auth | JWT + ASP.NET Identity |
| Payments | Stripe API (modular) |
| Docs | Swagger / OpenAPI 3.1 |
| DevOps | Docker + GitHub Actions |
- Buyer: Browse, purchase, and view tickets.
- Organizer: Create and manage events, pricing, and promotions.
- Door Staff: Validate QR codes and manage entry (Phase 2).
- Admin: Manage users, roles, and audit logs.
- Explore events with smart filters (date, city, category).
- Transparent pricing and fee breakdown.
- Instant confirmation & downloadable ticket (QR/PDF).
- Order history and e-wallet integration (Phase 2).
- Event creation wizard (title β tickets β policies β publish).
- Ticket type management (GA, VIP, Sectioned).
- Dashboard with analytics (sales, attendees, revenue).
- Promotion codes & early-bird pricing.
- User & event moderation.
- System-level reports and metrics.
- Role-based access control.
- User selects tickets.
- System locks inventory (TTL ~10min).
- Create pending order + Stripe payment intent.
- Payment success β confirm webhook β mint QR tickets.
- Order marked
paidβ email confirmation.
- QR scanned β API verifies validity.
activeβ mark asused.- Response:
valid | used | invalid.
- Organizer inputs details.
- Adds schedule, ticket tiers, and refund rules.
- Preview β Publish β Goes live.
Users(id, email, password_hash, role, status, created_at)
Organizers(id, user_id, legal_name, kyc_status)
Venues(id, name, address, city, country, capacity)
Events(id, organizer_id, venue_id, slug, title, starts_at, ends_at, status)
TicketTypes(id, event_id, name, price_cents, capacity, sales_start, sales_end)
Inventory(id, event_id, ticket_type_id, status, lock_expires_at)
Orders(id, user_id, event_id, status, total_cents, currency)
OrderItems(id, order_id, ticket_type_id, quantity, price_cents)
Tickets(id, order_item_id, qr_payload, status, used_at)
Promotions(id, event_id, code, type, value, max_uses, used)
AuditLogs(id, actor_id, action, target_type, metadata_json, created_at)| Category | Endpoint | Description |
|---|---|---|
| Public | GET /events |
Browse events |
GET /events/{id} |
Event details | |
GET /events/{id}/ticket-types |
Ticket list | |
POST /cart |
Create/update cart | |
POST /inventory/lock |
Reserve tickets | |
POST /checkout/start |
Begin checkout | |
POST /checkout/webhook/stripe |
Stripe webhook | |
GET /me/orders |
View user orders | |
| Organizer | POST /organizers/events |
Create draft event |
PUT /organizers/events/{id} |
Update event | |
POST /organizers/events/{id}/publish |
Publish event | |
GET /organizers/events/{id}/orders |
Sales data | |
| Admin | GET /admin/users |
Manage users |
GET /admin/audit-logs |
View logs |
Tickify/
βββ src/
β βββ Tickify.Api/ # ASP.NET Core Backend
β β βββ Controllers/
β β βββ Data/ (DbContext, Entities)
β β βββ Dtos/
β β βββ Services/
β β βββ Infrastructure/ (Payments, QR, Email)
β β βββ Program.cs
β βββ Tickify.Frontend/ # Next.js / React frontend
β βββ Tickify.Tests/ # Unit & integration tests
βββ docs/
βββ docker-compose.yml
βββ .github/workflows/ci.yml
- .NET 8 SDK
- SQL Server 2019+
- Node.js 20+ (if using frontend)
cd src/Tickify.Api
dotnet restore
dotnet ef database update
dotnet runAPI: https://localhost:5001/swagger
cd src/Tickify.Frontend
npm install
npm run devFrontend: http://localhost:3000
{
"ConnectionStrings": {
"Default": "Server=localhost;Database=Tickify;Trusted_Connection=True;TrustServerCertificate=True"
},
"Jwt": {
"SigningKey": "CHANGE_THIS_SECRET_KEY"
},
"Stripe": {
"PublishableKey": "pk_test_...",
"SecretKey": "sk_test_...",
"WebhookSecret": "whsec_..."
}
}cd src/Tickify.Tests
dotnet testβ Unit: pricing, inventory, promotions. β Integration: checkout & webhooks. β E2E (optional): Playwright for full buyer flow.
- HTTPS enforced (HSTS).
- JWT tokens (access + refresh).
- Role-based access (Buyer, Organizer, Admin).
- Inventory locking to prevent overselling.
- Input validation via FluentValidation.
- Encrypted secrets and audit logging.
- Logging via Serilog.
- Metrics via OpenTelemetry (Prometheus).
- Query profiling with EF Core logs.
- CDN + caching for static assets (frontend).
- Server-side rendering for SEO.
- Tailwind + shadcn/ui design system.
- React Query for caching.
Phase 1 (MVP)
- Event management, checkout, payments, QR generation.
- Organizer dashboard.
Phase 2
- Reserved seating map.
- Ticket transfer & resale.
- Box office & offline validation.
- Advanced analytics + payouts.
-
Fork repo & clone locally.
-
Create feature branch:
git checkout -b feature/new-feature
-
Commit and push:
git commit -m "Add new feature" git push origin feature/new-feature -
Create Pull Request.
Licensed under the MIT License β use freely for personal or commercial purposes.
User β Web: select 2 tickets
Web β API(/inventory/lock): lock tickets
Web β API(/cart): price breakdown
Web β API(/checkout/start): create order + payment intent
Stripe β API(webhook): payment_succeeded
API β allocate tickets + send confirmation
User β Web: shows confirmation + QR code
π Built with β€οΈ by the Tickify Team