Prom tickets sold online,
from seat selection to entry.

I built Vstupko to help Czech high-school students sell prom tickets online. It started with my sister’s class, then became a product other classes could set up themselves.

Scope
Setup, sales, payments, entry
Built with
Laravel · React · Inertia
Context
One prom first, then a product for many
Vstupko seat map builder: a hall plan with round and rectangular tables, a bar, a stage, an entrance and a dance floor, with a side panel for table shape, seat count and rotation
01 / Class admin / Seat map builderProduct screenshot · Demo data

Students were collecting cash, handing out paper tickets, and checking with each other which seats were sold, all while preparing for final exams. I moved it online to save them time.

I built the full app: event setup, a seat map editor, ticket sales, bank payments, and a phone scanner for entry.

Each class sets its own halls, prices, colours, and bank account. Guests choose a seat or standing ticket, pay by bank transfer, and get a PDF ticket by email once the class confirms payment.

Vstupko seat picker for guests: a switch between two halls, the seat map with available, selected and taken seats, and a summary with the price and a continue button
02 / Guest experience / Seat pickerProduct screenshot · Demo data
Vstupko payment page: the chosen seats on the map, a payment QR code, the amount, the reference number, the bank account, a countdown until the hold expires and the order summary
03 / Guest experience / Payment pageProduct screenshot · Demo data

Keeping payment costs down

I chose bank transfers to avoid card payment fees. Each order has a payment QR code and reference number.

One seat, one guest

The app prevents two people from booking the same seat. Unpaid orders expire so seats go back on sale. At the door, each ticket can only be scanned successfully once.

The first version ran my sister’s prom across three halls. It saved the class time, and quick, easy ticket scanning saved guests time at the door. I then rebuilt it so other classes could set up their own events without asking me to change the code.

Next project

Appointli