Responsive web application for booking open workspaces, closed offices, and meeting rooms. Built with Clean Architecture, React + TypeScript + Material UI, .NET 8, PostgreSQL 16, and Microsoft Entra ID.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PRESENTATION LAYER β
β βββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β React Frontend β β .NET 8 Web API β β
β β (Material UI) β β (API Endpoints) β β
β βββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β APPLICATION LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Use Cases / Application Services / DTOs / Validators β β
β β (BookingPlatform.Application) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DOMAIN LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Entities / Value Objects / Domain Events / Interfaces β β
β β (BookingPlatform.Domain) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INFRASTRUCTURE LAYER β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββ βββββββββββββ β
β β EF Core β β Identity β β Email β β Backgroundβ β
β β Repositories β β (Entra ID) β β Service β β Workers β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββ βββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATA LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PostgreSQL 16 (booking schema) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Technology | Version |
|---|---|---|
| Frontend | React + TypeScript + Material UI | React 18, TS 5, MUI 5 |
| Backend | .NET 8 Web API | .NET 8.0 LTS |
| Database | PostgreSQL | 16 |
| Auth | Microsoft Entra ID | OIDC/OAuth 2.0 |
| Infrastructure | Ubuntu + Docker Compose + Nginx | 24.04 LTS |
| CI/CD | GitHub Actions | Latest |
workplace-booking-platform/
βββ docs/
β βββ architecture/
β β βββ ARCHITECTURE.md # Complete architecture documentation
β β βββ DIAGRAMS.md # Mermaid diagrams (C4, sequences, ER)
β β βββ TECHNICAL_DECISIONS.md
β β βββ DEPENDENCIES.md
β βββ adr/ # Architecture Decision Records (18 ADRs)
βββ src/
β βββ backend/
β β βββ src/
β β β βββ BookingPlatform.Domain/ # Domain layer (pure C#)
β β β βββ BookingPlatform.Application/ # Application layer (CQRS)
β β β βββ BookingPlatform.Infrastructure/ # Infrastructure (EF Core, Entra ID)
β β β βββ BookingPlatform.Api/ # API layer (Controllers)
β β βββ tests/ # Unit, Integration, API tests
β βββ frontend/
β β βββ src/
β β β βββ components/ # Reusable UI components
β β β βββ pages/ # Route-level components
β β β βββ hooks/ # Custom React hooks
β β β βββ services/ # API clients, auth
β β β βββ contexts/ # React contexts (Auth, Theme)
β β β βββ types/ # TypeScript interfaces
β β β βββ utils/ # Helpers, formatters
β β β βββ theme/ # MUI theme configuration
β β β βββ layouts/ # Page layouts
β β β βββ assets/ # Static assets
β β βββ tests/ # Unit, E2E tests
β βββ ...
βββ infrastructure/
β βββ docker/ # Docker Compose files
β βββ nginx/ # Nginx configurations
β βββ database/
β βββ migrations/ # SQL migrations / EF Core
βββ ...
- Docker Desktop 4.0+
- .NET 8 SDK (for local backend development)
- Node.js 20 LTS (for local frontend development)
- Git
# Clone and navigate
cd workplace-booking-platform
# Start all services (PostgreSQL, API, Frontend, Nginx, SMTP dev)
docker-compose -f infrastructure/docker/docker-compose.yml \
-f infrastructure/docker/docker-compose.override.yml up -d
# Access applications
# Frontend: http://localhost:3000 (Vite dev server with HMR)
# API: http://localhost:8080
# Swagger: http://localhost:8080/scalar
# Hangfire: http://localhost:8080/hangfire
# pgAdmin: http://localhost:5050 (admin@booking.local / admin)
# SMTP UI: http://localhost:2500Backend:
cd src/backend
dotnet restore
dotnet ef database update --project src/BookingPlatform.Infrastructure --startup-project src/BookingPlatform.Api
dotnet run --project src/BookingPlatform.ApiFrontend:
cd src/frontend
npm ci
npm run dev- Provider: Microsoft Entra ID (Azure AD)
- Flow: Authorization Code + PKCE (SPA)
- Tokens: JWT Access Tokens + Refresh Tokens (HttpOnly cookies)
- Claims: email, name, jobTitle, department, groups β roles
The database uses schema booking with key tables:
resources- 91 bookable spaces (60 open, 24 closed, 7 meeting rooms)reservations- Time-based bookings with exclusion constraintscheckins- QR-based check-ins for officesnotification_outbox- Transactional outbox for emailsaudit_logs- Immutable audit trailapp_users,business_profiles,application_roles- RBAC/ABAC
See FRD Document for complete schema.
- Primary:
#FFD800(Yellow) - Primary Dark:
#0E0E0E(Near Black) - Backgrounds:
#FFFFFF,#F5F5F5,#F6F0CB - Text:
#0E0E0E,#2A2A2A - Breakpoints: xs(0), sm(600), md(900), lg(1200), xl(1536)
- Accessibility: WCAG AA minimum
# Backend tests
cd src/backend
dotnet test --configuration Release --collect:"XPlat Code Coverage"
# Frontend tests
cd src/frontend
npm run test:unit # Unit tests (Vitest + RTL)
npm run test:coverage # With coverage
npm run test:e2e # E2E tests (Playwright)
npm run lint # ESLint
npm run typecheck # TypeScript checkGitHub Actions workflow includes:
- Build & Test - Backend + Frontend
- Security - CodeQL (SAST), Dependabot (SCA), OWASP ZAP (DAST)
- Docker Build - Multi-stage, multi-arch images
- Deploy - Staging (auto), Production (manual approval)
| Document | Description |
|---|---|
| Architecture | Complete system architecture |
| Diagrams | Mermaid diagrams (C4, sequences, ER) |
| Technical Decisions | 25 key decisions with rationale |
| Dependencies | Full dependency catalog |
| ADRs | 18 Architecture Decision Records |
- OWASP Top 10 mitigated
- HTTPS everywhere (Nginx TLS termination)
- JWT validation with JWKS
- Rate limiting (Nginx + ASP.NET Core)
- CSP, HSTS, security headers
- No secrets in repo (Docker secrets / Key Vault)
- Audit logging on all mutations
- Logging: Serilog β Console/Seq (structured JSON)
- Metrics: Prometheus
/metricsendpoint - Tracing: OpenTelemetry β Tempo/Jaeger
- Health:
/health,/health/live,/health/ready
Internal use only - Confidential.
Built with Clean Architecture principles for maintainability, testability, and scalability.