Projects

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.

Timeline2024
CompanyPop-up event
RoleFull-stack Engineer
StackNext.js · Flask · Stripe · Socket.io

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

front-end
Next.js React TypeScript
back-end
Flask Python
payments
Stripe
real-time
Socket.io
database
PostgreSQL
deployment
Vercel

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.

💡
How might we
build a real-time ordering and kitchen-coordination system that stands up in a day, costs near-zero, and handles a 150-person rush without losing a ticket?

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.

Core architecture

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.

150+
concurrent users
3,000+
orders processed
600+
Stripe transactions

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. ]

metric one
metric two
metric three

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.

Multi-tenant
5-min event setup
SMS
pickup notifications
Reports
post-event analytics
← Prev: CDC Event Pipeline Next: Subway Route Optimization →