A real-time cinema seat booking system where users can browse movies, select seats, place a timed hold, and confirm or cancel their reservation.
Provide a simple booking flow that prevents double-booking through seat locking with automatic expiration. When a user selects a seat, it is held for a configurable window (default 5 minutes). During that window the seat is reserved exclusively for that user — who can either confirm or release it. If the hold expires without confirmation, the seat becomes available again automatically.
- .NET 10 / ASP.NET Core — Minimal API with endpoint routing
- Redis (StackExchange.Redis / NRedisStack) — Seat hold state with TTL-based expiration and atomic locking
- Scalar / OpenAPI — Auto-generated API documentation available in development at
/scalar
- Blazor WebAssembly (.NET 10) — Client-side SPA running entirely in the browser
- HttpClient — Communicates with the backend API via JSON
- Docker / Docker Compose — Containerised deployment of the API, frontend, and Redis
- nginx — Serves the Blazor WASM static files and handles client-side routing
docker compose up --build| Service | URL |
|---|---|
| Web App | http://localhost:5001 |
| API | http://localhost:5294 |