A full-stack, voice-driven pizza ordering platform built with Python, Google Gemini, LangChain, React, Firebase Realtime Database, and ElevenLabs TTS.
The system enables customers to place orders entirely through natural conversation, while a React frontend provides a real-time dashboard of incoming orders.
- Fully voice-controlled ordering using SpeechRecognition, Google Gemini 2.5, and ElevenLabs TTS
- LangChain agent using structured tool-calling to guide users through:
- Name collection
- Phone number validation
- Pick-up vs. delivery
- Pickup location or delivery address
- Itemized order processing
- Intelligent natural-language order parsing with modification handling
- Automated total price calculation and receipt generation
- Robust error handling and fallback logic for speech and tool calls
- Uses Firebase Realtime Database to store:
- Customer details
- Delivery/pickup method
- Itemized order details
- Timestamps
- Total price
- Ensures normalized, structured order receipts
- Real-time sales queue that listens to Firebase updates using
onValue - Renders item-level entries including images, prices, names, and metadata
- Clean, responsive UI for sales and operations teams
- Custom components such as
SalesQueueandEntry
- Python
- LangChain
- Google Gemini 2.5
- ElevenLabs Text-to-Speech
- Google SpeechRecognition
- Firebase Admin SDK
- React
- JavaScript
- Firebase Web SDK
- CSS
backend/
│── main.py
│── requirements.txt
│── firebase_key.json
│── utils/
│── menu/
frontend/
│── src/
│ ├── components/
│ │ ├── SalesQueue.jsx
│ │ ├── Entry.jsx
│ ├── Firebase.jsx
│ ├── App.jsx
│── public/images/
│── package.json- Agent calls tools sequentially:
get_nameget_phone_numberget_pickordel_methodget_pickup_locationorget_delivery_addressget_order_detailsget_total_price
- LLM creates a typed
finalReceiptobject - Receipt is saved to Firebase with timestamp
- Frontend streams updates instantly
- Connects to Firebase Realtime Database
- Subscribes to
/orderspath - Flattens itemized order data into display-ready entries
- Displays each item with:
- Image
- Order ID
- Customer name
- Phone number
- Quantity & price
- Pickup/delivery data
pip install -r requirements.txt
python main.pynpm run dev