MODULE_02 // AI ORDERING
Mooney's BBQ
AI Ordering Assistant
- Role
- Engineer
- Period
- 2025–2026
- Status
- PRODUCTION
- Domain
- AI Ordering
// STACK_MANIFEST
// OUTCOME_METRICS
Problem
Mooney's BBQ & Catering runs a straightforward business — BBQ trays, sides, packages, catering for events. The bottleneck was order intake: customers asked the same questions ("how many does the large tray feed?", "can I swap a side?", "what's the price for 40 people?") over and over, and the owner spent hours on the phone instead of cooking.
The ask was narrower than the cannabis and streetwear builds: an AI ordering assistant that could answer menu questions, suggest packages based on headcount, compute accurate prices, and hand off to a human when the conversation got complicated. No need for voice, video, or creative AI. Just a clean ordering flow.
Approach
Mooney's BBQ is the opposite-of-overbuilt version of my HOA pattern — 3 T3 domains instead of 9. Menu, Chat, and Catering. That's it. The FastAPI gateway routes requests, the Chat domain uses OpenAI function calling to query the Menu and Catering domains, and the React + Material-UI frontend renders the result.
Build Notes
Function calling beats RAG for a menu. The menu is a bounded, structured dataset — packages, trays, sides, prices. Wrapping it in OpenAI function calling gives the chat agent precise, verifiable answers instead of hallucinated descriptions. The agent can't make up a $50 brisket package that doesn't exist.
CSV as the source of truth. The menu lives in CSV files, not a database. Ryan updates pricing in a spreadsheet, commits it, and the app rebuilds. Trading database flexibility for owner-editability was the right call for a single-location business.
Price calculation as a tool. The AI doesn't do the math. The pricing engine is a deterministic Python function the agent calls with (package, headcount, modifiers) and gets back a locked price. No "let me calculate…" followed by a wrong number.
Docker Compose with separate dev + prod. Frontend on port 4220, backend on 4221. Same compose file with env-gated overrides. Push to deploy, Dokploy handles the rollover.
3-domain HOA, not 9. Proof that the Hierarchical Orchestration Architecture scales down. The orchestration layer is the idea, not the domain count. A simple business gets a simple orchestrator.
Results
Production ordering assistant serving real customers, fielding the repetitive menu questions, and routing complex catering inquiries to Ryan directly. The function-calling pattern proved clean enough that it's now my default recommendation for any client with a bounded product catalog.