The Booking System Demo shows how a complete booking workflow can be implemented professionally: from user registration with admin approval, through automatic capacity checks, to PDF confirmations sent by email. All in a clean, extensible architecture.
What the system can do
|
Feature |
Description |
|---|---|
|
Registration & approval |
Users sign up via email. Admins activate accounts individually — no spam registrations. |
|
Booking calendar |
Interactive monthly calendar (FullCalendar.io) with real-time availability. |
|
Automatic capacity check |
Available seats are checked atomically. Below threshold → instant confirmation. Above → admin queue. |
|
Multi-day series slots |
Bookable time-range slots spanning multiple days — with per-day capacity validation. |
|
Email notifications |
All relevant events trigger automated emails (async via message queue). |
|
PDF booking confirmations |
Confirmation PDFs are generated server-side (Gotenberg) and sent as attachments. |
|
Admin dashboard |
Statistics, KPIs, top slots, and pending bookings & users at a glance. |
|
Instructor management |
Slots can be assigned to instructors — including per-instructor statistics. |
|
Data export (CSV) |
Bookings, users, and instructors exportable as CSV — filterable by status and date range. |
|
GDPR self-service |
Users can request a data extract (PDF) and delete their account themselves. |
|
Cancellation |
Self-cancellation up to 24 h before the slot; after that, admin-only. |
|
Waiting list |
Automatic promotion on cancellation (configurable). |
Technology that scales
The system uses only established, enterprise-grade open-source technologies — no proprietary lock-in, full control over every layer.
Backend
-
PHP 8.3 with
strict_types— type-safe from the ground up -
Symfony 7 (LTS) — proven, scalable, well-documented
-
Doctrine ORM with Migrations — clean database layer
-
Symfony Messenger — async email processing via message queue
-
Symfony Security + Voters — granular permission logic, no hard-coded role checks
Frontend
-
Twig Templates — server-side rendering, no JS framework overhead
-
Bootstrap 5 — responsive, accessible layout
-
FullCalendar.io — interactive booking calendar
Infrastructure
-
MariaDB — proven relational database
-
Gotenberg — PDF generation from HTML/Twig, fully containerised
-
Docker Compose — complete local dev setup in a single command
-
Symfony Mailer + Mailpit (dev) — email testing without an external SMTP server
Quality
-
PHPStan Level 8 — maximum static analysis
-
PHP CS Fixer (PSR-12 + Symfony Ruleset)
-
PHPUnit + Symfony WebTestCase
Privacy is not a feature — it's the foundation
The Booking System Demo was built GDPR-compliant from day one. No retrofitted patches — privacy as an architectural principle.
What is concretely implemented:
-
Data export on demand — users can export all stored personal data as a PDF at any time (Art. 15 GDPR)
-
Account deletion by the user — complete account deletion including anonymisation of linked booking records (Art. 17 GDPR)
-
Anonymised booking history — after account deletion, booking statistics are retained without being traceable to individuals
-
Minimal data collection — only fields actually required for the booking process are stored
-
Admin-side data control — GDPR-compliant CSV export for bookings, users, and instructors
-
Password hashing — bcrypt/argon2 via Symfony Security, no plain-text passwords
-
CSRF protection — all forms secured with CSRF tokens
-
Role-based access control — granular permissions via Symfony Voters, no hard-coded role checks in business logic
Who is it for?
The system is deliberately kept generic and can be adapted to any use case with minimal effort.
-
Educational institutions — courses, seminars, workshops with limited capacity
-
Clubs & non-profits — room allocation, event registrations
-
Family & community centres — course sign-ups with waiting list (reference implementation)
-
Companies — internal training or resource bookings
-
Developer teams — as a starting point / boilerplate for custom booking projects
See the live demo →
Try the system yourself — register, book, cancel.
Demo: buchungssystem.der-hoelzemann.de