← STEFAN ILIĆ
MATURABALL 2025
/// SELECTED WORKS

Ticketing
System

PYTHON · REACT NATIVE · NEXT.JS · SUPABASE
600 UNIQUE TICKETS GENERATED
< 1s SCAN-TO- VALIDATION
€7k+ EVENT VOLUME COVERED

For the afterparty of our Maturaball (the Austrian graduation ball, which I also co-organized), I built a complete end-to-end ticketing system from scratch. No third-party platforms, no fees: just a ticket generator, a database, and a scanner app.

600 tickets at €12 each were printed and sold. On the night, every single one was validated through the system. It caught several attempts to enter with an already-scanned ticket, and the scan speed was fast enough that the bottleneck at the door was the ID check by security, not the app.

The system has two parts: a generation pipeline that ran once before the event, and a scanner app that ran on the night.

Ticket Generator

A Python script generates 600 UUIDs, renders a QR code for each one, and composites it onto the ticket design I created. The result is a print-ready PDF with 3 tickets per A4 page. Every UUID is simultaneously pushed to Supabase, initialising each ticket as valid before a single one is printed.

Scanner App

A React Native app for the door staff. Scanning a QR code hits Supabase and returns one of two states: valid (staff tap to invalidate it, marking it used with a timestamp) or already used (the app shows exactly when it was scanned). Near-zero latency. Several people who tried to re-enter with a used ticket were turned away.

GENERATOR Python (UUID, QR, PDF)
SCANNER React Native
DATABASE Supabase
DESIGN Custom ticket layout
OUTPUT 600 tickets · 3 per A4 page
/// EOF