☎️ Dead Line Diner

Telephone ordering, back from the dead β€” Kiroween 2026, Resurrection

{{ 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(', ') }}