Restaurant Voice Ordering & Operations Copilot
A voice- and chat-first ordering copilot (piloted for a real Indian kitchen) that feels natural to guests but treats the database — not the model — as the source of truth. Handles natural multi-turn ordering, safety-critical allergen classification (contains / may contain / cross-contact / unknown, never claiming medical safety), full read-back and explicit confirmation before a kitchen ticket, and a staff ops dashboard. A deliberately out-of-domain "range" build that shows breadth and safety-first agent design.
- 114
- Automated tests
- 13
- Agent tools
- ~325 tracked files
- Codebase
The problem
Restaurants lose revenue and guest satisfaction when ordering is friction-heavy — long hold times, menu confusion, modifier mistakes, and allergy-related risk. Traditional IVR and static web forms can't handle natural conversation ("two medium-spice butter chickens, one without dairy, pickup in twenty minutes") while still enforcing business rules, and generative AI alone isn't safe for food service — models can invent ingredients, skip allergen warnings, or confirm orders that were never validated.
The challenge
Build a voice- and chat-first ordering copilot, piloted for a real Indian kitchen, that feels natural to guests while treating the database — not the model — as the source of truth, across multiple trust boundaries: conversational AI at scale, safety-critical allergen handling, a hybrid architecture pairing LLM dialogue with server-side enforcement, and a full staff operations loop.
Constraints
- The agent must never write directly to the database — every menu fact, cart change, and confirmation flows through validated server tools
- Allergen data is classified (contains / may contain / cross-contact / unknown) and the system must never claim medical safety
- Production hardening: fail-closed webhook authentication, CORS allowlists, JWT-scoped staff access, idempotent ticket dispatch
- Voice agents miss checkout phrases, skip tool calls, or duplicate responses without added reliability layers
The solution
Guests browse the menu, build a cart, receive allergen warnings, confirm orders with a full read-back, and trigger kitchen tickets by voice or text in a single session. ElevenLabs Conversational AI handles natural dialogue over WebSocket text and WebRTC voice; Supabase holds menu, orders, sessions, escalations, and the audit trail; Edge Functions enforce validation, cart mutations, confirmation, and ticket dispatch; n8n orchestrates kitchen/POS workflow; and a React monorepo serves both the guest ordering embed and a staff operations dashboard.
Architecture
- ElevenLabs Conversational AI for natural dialogue (WebSocket text + WebRTC voice)
- 13 ElevenLabs agent tools for menu search, cart, allergens, read-back, confirm, and escalate
- 14 Supabase Edge Functions and 53 shared server modules enforcing validation, cart mutations, confirmation, and ticket dispatch
- n8n for kitchen/POS workflow orchestration
- React monorepo serving the guest ordering embed and staff operations dashboard
- Client-side reliability bridges (checkout phrase detection, escalation, session wrap-up) pairing with server-side enforcement (confirmation gates, rate limits, webhook secrets, hashed session tokens)
Product decisions I owned
- The agent never writes to the database — every menu fact and cart change flows through validated server tools, with explicit guest approval before a kitchen ticket exists
- When allergen data is incomplete the system warns and escalates to staff rather than guessing; safety copy is templated from backend classification, never model-generated
- Split conversation from commitment — the LLM handles dialogue, the backend enforces state transitions for order confirmation and ticket creation
- Added client-side reliability bridges for checkout, escalation, and session wrap-up to cover gaps in even well-prompted voice agents
Design laws
The database, not the model, is the source of truth
Allergen answers never claim medical safety
Full read-back and explicit confirmation before any kitchen ticket
Stack
ElevenLabs Conversational AI (voice + text) · Supabase · Edge Functions · n8n · React monorepo · TypeScript · Playwright · Vercel
Key learnings
- Ground the agent in tools, not memory — menu prices, ingredients, and availability must come from structured server-tool data, or hallucination follows
- Split conversation from commitment — the LLM handles dialogue; the backend handles state transitions
- Voice agents need reliability layers — client-side phrase detection and deterministic bridges materially improve pilot stability without sacrificing natural conversation
- Regulated domains need explicit uncertainty handling — when allergen data is incomplete, warn and escalate rather than guess
- Modular architecture de-risks iteration — voice provider, database, workflow engine, and frontend can evolve independently
- Auditability is a feature, not overhead — every tool invocation and safety-relevant decision is logged for operators and future compliance review
Screenshots and a walkthrough video are coming.