The 21-second hello
Nobody waits 21 seconds at a kiosk.
21.6 s to the first word: the model re-read thousands of tokens of event data for every visitor.
One identical prompt, warmed at startup, with cache checkpoints in the right place: ~0.5 s.
How one person and AI built a voice concierge in four weeks, and how you can build your own.

Follow along:
github.com/ckellum/“Where is my next session?” gets asked a thousand times.
She greets you by name, and knows your next session.
“Where's lunch?” “What's on at two?” “Where's the Maple Room?”
A 3D hologram route to the room, from right where you're standing.
No app. No login. No typing.
No touchscreen. Your voice drives everything.
It closes at goodbye. Nothing is captured while she's idle.
Every model runs on the computer next to her. Your voice never left the building.
She asks before remembering you, and keeps a short summary, never a recording.



GB10 chip, 128 GB of unified memory. Runs speech-to-text, the language model and the voice, all at once.
Everything you saw ran on that one computer.
Three model servers, each speaking the OpenAI API, on one machine.
The kiosk app is stdlib-only Python: no numpy, no evdev library, nothing to break.
Parakeet turns speech into text very well. Knowing when a visitor has finished, in a crowd, is the hard part.
She listens to how loud the room is, all the time. You have to be clearly louder than the room.
Start at 4× the room level, keep going above 2×, stop after a short silence. “Hi Lumi” also starts a visit.
Room level = 20th percentile of the last 1.5 s, re-measured continuously; a turn must peak above a fixed floor, too.
Persona, event facts, every room, every session, lunch menus, the building, nearby restaurants.
Your name, the time, your next sessions, and what you talked about last time, if you said yes.
The AI only knows what we tell it. So we tell it everything about this event.
She adds little tags to her answers, like [show:route:R102], that tell the screen what to show.
Identical system prompt = reusable prompt cache. Per-visitor data in the system prompt would make every visitor wait.

No CAD files. Just phone photos of the fire-exit maps on the walls.
Shown here: the made-up demo building. The real floor plans stay private.
AI asks questions, one at a time, until the idea is clear.
A written design I approve. Sep 15.
Four plans: foundation, visit engine, screen, 3D directions.
Every feature starts as a failing test.
Fresh-eyes reviews per task and for the whole branch.
Then: rehearse on the real hardware. Fix. Repeat.
Nobody waits 21 seconds at a kiosk.
21.6 s to the first word: the model re-read thousands of tokens of event data for every visitor.
One identical prompt, warmed at startup, with cache checkpoints in the right place: ~0.5 s.
Lip sync broke on every multi-sentence reply.
Queued sentences start in the future. A symmetric “sanity” clamp threw their timing away.
Asymmetric bounds (stale 5 s, ahead 60 s), and a review of the whole branch, not just each task.
Quiet room: perfect. Hallway: she answered strangers.
Fixed loudness thresholds. The crowd kept starting turns.
Replayed 75 s of real crowd noise while tuning. Visitor peaks 6,000–19,000 vs. crowd ≤ 1,833. Shotgun mic, back to the crowd.
Twice. No logs. No warning.
Sustained AI load caused power spikes on older firmware. Hard power-off.
GPU clock capped at boot by a service; test load kept to one request at a time.
Badges on a screen took forever to scan.
Glare and screen refresh confuse the scanner.
Printed on matte labels, ~5 cm, highest error correction. Instant reads.
She was talking. Nobody could hear her.
The USB speaker came up at 0% volume after every reboot.
Volume set at startup, plus a self-check that fails on a muted speaker. Rehearse on real hardware.
“Nguyen” → “Win”. And some phrases just don't work: “Uh oh” was misread, “Oh no” wasn't.
Nicknames and a playful hail, once a day per badge, from what people put on their name tags.
Used naturally in conversation, not stapled onto every sentence. We tried that. It was worse.
Test small, fly again: a lesson in shipping often.
It rises behind Lumi. She keeps the crown.
The final question's answer is the visitor.
Lumi flies in, a little dizzy.
A countdown, then confetti.
No AI improvising.
Every word reviewed.
64 GB+ unified memory or a 24 GB GPU
32 GB RAM or an 8–12 GB GPU
Any computer, API keys
Tested end to end: workstation ≈ 1.3 s, laptop ≈ 1.5 s from question to answer.


Site, starter kit, and every lesson.
Questions?