Waitrose have run a food and drink festival every year since 2016: ticketed masterclasses, chef demos, supplier showcases, all anchored on a live in-person event. We built the platform that year and we’ve kept it running through every edition since.
Ticket pages and chef bios are straightforward. Capacity is the hard part. Each session has a fixed cap, hundreds of people try to book at once, baskets time out if they don’t check out within a window, and waitlists fill the gaps as cancellations come in. The site has to keep all of that consistent under launch-day load.
The other hard part is the in-person bit. Door staff scan QR-coded tickets on phones in a building where the WiFi isn’t always cooperating. We built the check-in flow as an offline-first progressive web app. Scans queue on the phone and sync when there’s signal, so check-in carries on without WiFi. The backend supports it with rate-limited bulk sync endpoints and a fairly defensive view of “did this ticket already get scanned”.
The stack has changed over the years. The original build was Laravel-only with server-rendered Blade templates; today the API stays in Laravel and the customer-facing frontend is a Nuxt PWA, with editorial content coming from a headless CMS.