Real-Time Food Ordering
From order to kitchen to pickup, live. Built solo for pop-up events that couldn't afford a 5-figure POS.
Overview
150+ concurrent users. 3,000+ orders. 600+ live Stripe transactions. Zero downtime.
A full-stack ordering platform built from scratch for pop-up food events — Next.js front-end, Flask back-end, Stripe for payments, Socket.io for real-time order status from kitchen to customer. Cut manual labor on the operations side ~50%.
Technologies
The Problem
Pop-up events can't afford an enterprise POS. So they run on paper tickets and chaos.
Existing POS systems start at hundreds of dollars per terminal per month and assume a permanent storefront. Pop-ups are 1–3 day events with 100+ peak-hour orders. Most run on paper tickets, runners shouting between counter and kitchen, and a single Square reader — which means lost orders, slow service, and money left on the table.
Product Vision
A self-serve POS for events that exist for 48 hours.
Order from your phone. Pay with Apple Pay. See your spot in the queue in real time. The kitchen sees the same queue, marks orders ready, and customers get pinged automatically. No paper, no shouting, no lost tickets.
Stateless front-end, Socket.io-backed queue, Stripe-managed payments
Next.js serves the ordering UI and the kitchen display. Flask handles order creation and payment confirmation via Stripe webhooks. Socket.io broadcasts queue updates so every connected client (customer, kitchen, counter) sees the same state within 100ms. Postgres is the source of truth; Socket.io is the delivery channel.
My Contribution
Built solo end-to-end, then ran ops at the event itself.
I wrote every line — front-end, back-end, infra, Stripe integration, the kitchen display — and was on-site during the rush to debug live. The system held up; the kitchen freed a runner; ~50% of manual labor on the operations side went away.
What I worked on
- Next.js customer-facing order flow with Stripe Apple Pay / card integration
- Flask order service with webhook reconciliation against Stripe payment intents
- Socket.io queue layer broadcasting order-status updates to all connected clients
- Kitchen display app — separate Next.js view consuming the same socket stream
- Live ops on event day — monitoring, hot-fixing edge cases, supporting the team
Key Achievements
[ Headline outcome — the one-line "this is what it delivered." ]
[ Slightly longer narrative on the most meaningful results. ]
Lessons Learned
[ The single biggest takeaway from this project. ]
[ What worked, what didn't, what you'd do differently next time. ]
Where It's Going
From one-off event tool to repeatable pop-up platform.
Next: extract the event-specific config into a tenant model so a new pop-up can spin up in 5 minutes. Add inventory cutoffs (so items disappear when sold out), SMS pickup notifications, and a post-event sales report.