This is a submission for
Fair warning on the live version: he's meeting you for the first time, so you'll get cold-start Franklin, the voice and the warmth, but not yet the memory. Sign up and come back a few times, the magic is what happens on visit three or four, when he becomes your Franklin instead of just a chatbot. The recorded convo above is that. The live link is your first hello.
Code
Franklin runs inside the production codebase of a real business — payments, loyalty wallets, and parcel lockers included, so the repo stays private. The architecture, happily shared: Next.js App Router served from a Cloudflare Worker; Claude with tool calling via the Vercel AI SDK; Supabase (Postgres) as the single source of truth for menu, pricing, and the per-customer memory the shadow agent writes; ElevenLabs for the voice. Ask me anything about it in the comments — I'm an open book about the how, just not the keys to the register.
How I Built It
The voice is the accessibility, powered by ElevenLabs. ElevenLabs isn't a nice-to-have here. For someone who finds a busy counter overstimulating, who dreads being rushed, who reads an impatient tone as a threat, a warm, patient, consistent voice isn't a garnish. It's the accessibility. A familiar voice that already knows you lowers the cognitive load of the whole interaction. There's no line. No one tapping their foot. No audience to mask for. Just a voice that says your usual back to you like it's glad you're here.
Franklin speaks through ElevenLabs (Elise, on Flash 2.5) for low-latency responses so it feels like a reply, not a wait. Same voice in this demo as in production. Under the hood, Franklin's replies are chunked into sentences as they stream from the model, each sentence is sent to ElevenLabs' streaming endpoint, and the audio plays back in order, so the first words reach your ears while the rest of the reply is still being generated. The tech maps directly onto the human need: memory so you're not starting over, tool calls so you're not parsing alone, and a voice so there's warmth with no rush. Take the audience away, and you can just order the coffee.
Why "regular" is the whole thing. There's a word retail loves: "frictionless." I've never trusted it. Friction isn't the enemy. The audience is. The performance of being fine while you transact.
Franklin removes the audience. That's the entire design, and it came straight out of my own twenties. I built the technological version of the peace I eventually found on my own (nobody's really watching, you can just order the coffee) and wired it into a coffee shop so somebody who's where I was doesn't have to wait until 46 to feel it.
That's my passion project. Not because it's clever. Because I needed it, and now somebody else won't have to leave the cart in the aisle.
(PS: I also spent one obsessive rainy weekend fine-tuning a fully local, sovereign version of this philosophy into a model I own outright, for about six bucks, so the empathy survives the platform age. But that's a story for another post.)
Prize Categories
Best Use of ElevenLabs.
Built with Next.js, Supabase, ElevenLabs, and twenty years of union stagehand empathy. Thanks for reading. Go be somebody's regular.
Written by Thomas, BrewHub's founder. Edited with an assist from Claude (Fable 5) who, in fairness, is also the sibling of the model behind Franklin's brain, so he had skin in the game.
SOCIAL SHARE CARD GENERATOR