Marketing site, menu, reservations, and a QR-based Easter campaign with one-time token redemption — three separate flows for customers, staff, and admins, all designed around the day-to-day of running a restaurant.
Kauboi BBQ had a strong in-restaurant brand and zero digital infrastructure. Reservations went through Instagram DMs, marketing was reactive, and there was no way to measure whether a campaign actually drove bookings versus just impressions.
A single Next.js platform with three distinct surfaces: a marketing & reservation site for customers, a staff console for managing bookings & campaigns, and an admin layer for menu, pricing, and audit. Plus a one-shot Easter QR campaign with token redemption — built end-to-end in three days.


Restaurant software fails when it tries to be one app for everyone. The customer flow has to be glanceable on a phone in 8 seconds. The staff flow is an iPad on the host stand, used at speed during a rush. The admin flow is desktop, used weekly by ownership for menu and reporting.
Easter weekend ran a city-wide promo: scan a QR on the table, get a free side on the next visit. The hard problem isn't generating QRs — it's making sure a token can only be redeemed once, even if a guest scans it twice, on two phones, while staff is mid-rush and our API is briefly slow.
Solved with a Postgres unique constraint on (token, redeemed_at), a server-side SELECT ... FOR UPDATE at redemption, and an idempotency key on the staff confirm. Out of 494 redemptions, 0 doubles.

Eight-week window, post-launch. The reservation page does one job: collect intent and confirm a booking via email + SMS without making the guest re-type anything they already gave Instagram.