Case Study · 2026

Beeso Coffee — a live QR queue for coffee carts at private events.

Designed an end-to-end QR ordering system for coffee carts at private events. Built the working demo and a 6-week build roadmap. Engaged with Beeso to ship Phase 1 in 4 weeks.

Role
Product & Engineering (solo)
Timeline
May 2026 → ongoing
Stack
Next.js · Supabase
Status
In Development
Beeso
Order status
You’re in the queue
#2
1 ahead of you
QueuedBrewingReadyPicked up
Your drink
Vanilla Latte
Medium · Oat milk · Table 8
A line at the cart is where the event quietly breaks down.

The line at a private event is usually where the experience falls apart. Guests forget what they ordered, baristas shout names over speakers nobody can hear, and the host watches the reception turn into a coffee bar wait. The host paid for an upgrade. The line was the only thing guests remembered.

Beeso runs a coffee cart that travels to weddings, corporate retreats, and family events. Each booking has its own menu, its own pace, and its own ways to get backed up. The owner wanted to fix the line without turning the cart into a tech project.

The brief was simple: keep the cart, keep the menu chalkboard energy, take the line out of the experience entirely.

Three failure modes show up after drink number 40.

For a cart contracted to make 150 drinks during a 90-minute window, the back half of an event is where service quality drops. Three predictable failures:

“What did I order again?” Guests forget their drink while waiting. “Whose latte is this?” Baristas shout names over music that drowns them out. “How long is the wait?” Nobody has visibility into the queue, so the same question gets asked every two minutes.

The deeper constraint: every event Beeso does is different. A wedding might be four signature lattes. A corporate retreat is cappuccino and cold brew, done. A welcome dinner the night before might be three iced drinks. The cart has to reset itself every weekend, and the chalkboard didn’t scale.

Existing self-order tools (Square, Toast) are point-of-sale systems built for restaurants. They don’t fit a one-cart business that doesn’t collect payment from guests because the host already paid in full.

Scan, type a name, watch your spot in line.

I built a static end-to-end demo first — a working prototype that ran locally, so Beeso could click through the real flow before committing to a build. The whole loop:

“The line is the experience. Fix the line and the whole event feels different.”

Guests scan a QR at their table, type a first name and table number, pick a drink with size and milk, then watch a live queue position on their own screen. When their drink is ready, the page chimes and the phone buzzes. No SMS, no app, no phone number required. The barista runs a three-column kanban (Queued / Brewing / Ready) on an iPad at the cart and taps to advance each order.

The system is designed around multi-event from day one. Each event has its own menu picked from a shared catalog. Lattes for the wedding, cappuccino only for the corporate retreat, iced lineup for the welcome dinner. Beeso flips an admin switch and the QR and menu go live for that day. Five minutes of setup instead of a re-drawn chalkboard.

๐Ÿ“ฑ
Zero-friction guest flow
First name and table number. No phone, no OTP, no app install. Works on any phone a guest already has.
๐Ÿ””
Live status with chime + buzz
Web Audio chime plus phone vibration when the order is marked ready. No SMS cost, no notification permissions.
๐Ÿ“‹
Multi-event menus
Every event has its own menu. Pick from the catalog or add new items inline. Five-minute setup per event.
โ˜•
Barista kanban on an iPad
Three-column board: Queued, Brewing, Ready. Each card shows the guest’s name and table so the barista calls out to a real spot, not into a room.
Numbers we’re aiming at before the first real event.
Projected
~30%
faster cup turnover at peak
Phase 1
$0
per-event variable cost
Projected
~5 min
event setup time in the admin
Design goal
0
names shouted across the cart
From schema to a pitched roadmap in three days.
May 9, 2026
Schema and scaffolding. Next.js 16, Supabase, Tailwind v4. Phase 0 foundations: events, menus, modifiers, RLS.
May 11, 2026
Static end-to-end demo shipped. Guest flow (name + table), inline menu accordion, live queue position with chime + vibration, barista kanban, multi-persona switcher for live demos.
May 11, 2026
Pitched a 6-week build roadmap and three pricing tiers to Beeso. Recommended path: Build + Subscribe for unlimited events on a single subscription.
Weeks 1 – 2 ahead
Phase 1 live. One real event running on a cloud backend. Real orders from real guests. No SMS, no payments, no per-event cost.
Weeks 3 – 4 ahead
Phase 2. Multi-event admin, per-event menus, optional SMS toggle for premium clients (paid add-on).
Modern defaults; nothing exotic.

Built on the boring-and-fast stack: a React framework for the front, managed Postgres for the back, edge hosting for HTTPS and global delivery. Twilio and Stripe enter the picture only in later phases, only when an event needs them.

Next.js 16 TypeScript React 19 Tailwind v4 Supabase Vercel Web Audio API Twilio (Phase 2, optional) Stripe (Phase 4)
Cart #1 is the playbook for cart #10.

Beeso is cart #1. The point of cart #1 is to prove the playbook. Phase 3 lands the polish that lets the cart serve a 200-guest event without breaking a sweat: real-time queue updates, push notifications, an analytics dashboard, multi-staff accounts. After that, the platform stops needing me at every event.

Phase 4 opens two adjacent doors. Pop-up mode via Stripe checkout lets customers pay per cup at cafes, public markets, and ticketed events — a different business model on the same product. White-label licenses the same platform to other small cart operators with their own branding.

The interesting bet: QR ordering at private events isn’t competing with Square or Toast. It’s competing with a hand-written chalkboard and a barista yelling names over music. That’s a much easier fight to win.

Have a cart, a venue, or an event?
If the line at your event is where it falls apart, let’s talk.