{{ callState === 'idle' ? 'π (555) 019-DINER' : callState }}
Demo phone β no real PSTN call is made. Speak with your microphone (Web Speech API) or type instead. The AI only orders dishes from the menu below; it never invents a dish or a price.
AI: {{ aiMessage }}
Microphone speech recognition is not supported in this browser β typed orders work fully.
Draft: {{ draft.readback }}
{{ draft.errors.join('; ') }}
β Order {{ placed.id }} confirmed! Total ${{ placed.total.toFixed(2) }} β ETA {{ placed.etaMinutes }} min. Please keep your order number.
{{ placeError }}
Menu (the only source of truth)
π³ Kitchen order wall π NEW ORDER!
Live via server-sent events. New orders arrive here the moment a caller confirms.
No orders yet β place one from the phone view.
#{{ o.number }} {{ o.id }} {{ o.status }}
${{ o.total.toFixed(2) }} Β· ETA {{ o.etaMinutes }} min
{{ i.qty }} Γ {{ i.nameEn }} ({{ i.nameZh }}) β ${{ (i.price*i.qty).toFixed(2) }}
{{ o.customerName }} Β· {{ o.channel }} Β· {{ new Date(o.createdAt).toLocaleString() }}
Transcript: β{{ o.transcript }}β
π€ Owner β menu & call logs
Call logs / transcripts
No calls logged yet.
#{{ c.orderNumber }} β {{ new Date(c.createdAt).toLocaleString() }} β β{{ c.transcript }}β
Order history
No orders yet.
#{{ o.number }} β ${{ o.total.toFixed(2) }} β {{ o.status }} β {{ o.items.map(i=>i.qty+'Γ '+i.nameEn).join(', ') }}