Case study 03

Waitrose Food & Drink Festival

A ticketed food and drink festival for Waitrose, covering masterclasses, chef demos and supplier showcases across virtual sessions and in-person venue components. Built to handle the launch-day rush, and to keep door check-in flowing even when the venue WiFi doesn't.

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.

The hard parts aren’t where you’d expect. Ticket pages and chef bios are straightforward. Capacity is hard. 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 locally, sync when there’s signal, no one gets stuck at the gate. 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 shifted across 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 out of a headless CMS. The relationship has carried through every year’s edition, and each year’s a bit smoother than the last.

The customer-facing festival site, with featured sessions and ticket call-to-action
The What's On page where customers browse all available sessions
Admin dashboard the Waitrose team uses to monitor bookings and capacity
Order detail in the admin, with ticket allocation and customer record

Got something similar in mind?

New build, rewrite, or something that's been broken for a while: happy to take a look and tell you what we'd do.

Get in touch