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).