About FMFT
FMFT is the annual event organized by my high school called "Festiwal Małych Form Teatralnych" (Festival of Small Theatrical Forms). The festival has been running for 55 years and attracts high school students from my school and other schools in the region.
Students compete in three categories: sung and recited poetry, art and dance, and art and film. The festival consists of four events held at Teatr Groteska auditorium in Kraków, Poland. Three events are dedicated to each category, and the fourth is a gala where winners perform again and results are announced. The auditorium has a capacity of 272 seats with average attendance of over 200 people per event.
I developed the ticket reservation system for FMFT during my final year of high school (2022-2023). The system has been used for three consecutive festival editions: 2023, 2024, and 2025. The system is available at bilety.fmft.pl and the project is open source on GitHub.
Application features
The application is a complete ticket reservation system that handles seat selection, user registration, payment processing, and ticket verification.
The buying process begins when users select the number of seats they want to purchase. The system then displays the theater auditorium layout showing available and occupied seats, allowing users to choose their preferred locations.
Users must create accounts using Google sign-in or email registration to complete their purchase. Payment is processed through Przelewy24, supporting card payments and BLIK.

After purchase, users receive an email with their ticket containing a QR code. Tickets can also be displayed in the web application when users are logged in.
Each ticket contains the event name, date, time, seat number, and reservation ID along with the QR code for verification. The QR code is unique for each ticket.
Staff use smartphones connected to Bluetooth QR scanners to validate tickets. The system shows seat numbers, event details, user information, and prevents duplicate entries.

When a QR code is scanned, the staff interface updates automatically to display ticket validation status. The scanner functions as a keyboard input, writing the QR code data and triggering JavaScript validation.
Administrators can create events, set ticket prices, and view sales data through the admin dashboard.
Admins can manually create reservations and generate tickets before public sales begin. This is used for jury members and VIP guests.

Tech Stack
Frontend
- Blazor WebAssembly
- Bootstrap 5
- Panzoom for seat selection interface
Backend
- ASP.NET Core Web API
- JWT authentication (custom implementation)
- SMTP for email notifications
Database & Data Access
- Microsoft SQL Server Express
- Dapper
- Storage broker pattern for data access
- Raw SQL queries and stored procedures
Infrastructure
- Docker containerization
- Hetzner VPS hosting
- Jenkins CI/CD pipeline
- Separate services for Web API and Blazor WebAssembly
While working on this project, I was trying out The Standard by Hassan Habib.
The complete source code is available on GitHub.
Acknowledgments
Thanks to everyone who helped me develop this application:
- Tomasz Wrona - help with SQL stored procedures and Przelewy24 integration as well as technical expertise