Welcome to the Ticketing System
MVP, low-cost platform for ticket booking built with .NET 8 Blazor Server.
Infrastructure & Deployment
Hosting: Azure App Service (Linux, .NET 8, B1 tier, Sweden Central) | IaC: Bicep modules (env-specific deployments) | CI/CD: GitHub Actions → Docker → GHCR → App Service | Domain: ticket.mymh.dev (Let's Encrypt SSL, DNS-01) | Monitoring: Application Insights (telemetry, logging, performance) | Secrets: Key Vault (RBAC, managed identity) | Configuration: App Configuration (feature flags, managed identity) | Messaging: Service Bus (Basic tier, managed identity, event-driven architecture)
Application Stack
Frontend: Blazor Server (.NET 8, SSR, SignalR) | API: ASP.NET Core Web API (Controller-based) | Database: Cosmos DB Serverless (NoSQL, pay-per-request, containers: bookings, users, outbox) | Container: Docker multi-stage (SDK build, runtime production) | Registry: GHCR (public, no auth) | Auth: Azure Entra ID (OpenID Connect for admins) + Cookie-based (BCrypt password hashing for users/inspectors, ITicketStore for server-side ticket storage)
Architecture & Patterns
Design Patterns: Extension Methods (startup config), HttpClient Factory, Repository/Service (IBookingService, IUserService, IOutboxService, IFeatureFlagService, IEventPublisher), Dependency Injection (scoped/singleton), Outbox Pattern (transactional event publishing), Background Services (OutboxProcessorService), Sentinel Key Pattern (hot-reload configuration) | Data: Cosmos DB (ticketing/bookings partition: /customerId, users partition: /email, outbox partition: /status) | Session: Server-side storage (GDPR-compliant, 30-min expiration, ITicketStore for auth tickets) | Authorization: Role-based access control (Admin via Entra ID/OpenID Connect, Inspector/User via cookie-based with BCrypt) | Health: /api/health endpoint (comprehensive status) + Admin Dashboard mini health check with feature flag toggle | Event-Driven: Service Bus, Azure Functions, Outbox Pattern, Feature Flags, hot-reload, mode switching - dual-system coexistence operational | Demo: Interactive demo page (/demo) with event-driven architecture status, feature flag toggle, and booking management
Version status: Week 6 - Core features complete: User management, ticket booking, multi-zone selection, price calculation, ticket activation, QR code generation. Event-driven architecture: Phases 1-7 complete, Phase 8.1 & 8.2 complete (Application Insights custom events, demo page). Testing: Unit tests (price calculations) and integration tests (booking lifecycle) complete. Remaining: Phase 8.3 (alerts) and Phase 9 (Documentation & Cleanup).