Inspiration
It's a Sunday morning and you want croissants from the bakery two streets over. You could call, wait on hold, and ask a stranger. You could walk over and find an empty tray. Or you could check the website, which says "fresh pastries daily" and nothing else.
Some of us never make the call. I'll order at a drive-through before I'll ask at a counter, and a website can't answer the question anyway. Peripie is the counter you can walk up to from wherever you are: you ask, you watch the clerk go and check, and you hear the answer. For the shop, it takes the one question they hear all day off their phone. For the customer who would rather not ask in person, it is the ask without the asking.
What it does
You open the link and you are standing in front of Rosa's Bakery. No account, nothing to sign up for. Tap Enter shop and the camera walks you through the doors to the counter, where the clerk greets you out loud: "Take your time, and ask me about anything on the shelves whenever you're ready."
You type or say "do you have croissants?" The clerk turns to the stock room; the label reads "Checking with the stock room" and you see a second agent appear in the back. Then the answer, in the clerk's own voice and the shop's own words: "We're out of croissants right now. The next tray comes out of the oven in about 18 minutes." Under it sits the stock room's own record, so you can see the check happened. Ask for "bread" and the clerk finds the sourdough and names the other loaves. Ask the paint store which primer works in a bathroom and a support agent gives one tip, then checks the stock of what it recommended. Ask the plant shop about a monstera and you hear when the grower's next delivery comes.
If you need captions, larger text, high contrast or less motion, the drawer in the corner has them, kept only for this visit. Describe this view reads out what is on screen. Nothing about you is stored: no cookies, no analytics, no logged questions.
How I built it
The clerk is a Gemini model with one tool, check_stock, and its first move on every question is forced to be that call, so it cannot make stock up. The stock room is Postgres on Tiger Data: an inventory table and a stock_events hypertable with sixty days of shelf counts for 27 products across three shops; a LAG window over those counts measures how long each item usually stays out, so "usually about 4.5 days" comes from history, not a guess. Each item carries its shop's real schedule (a tray every 20 minutes, a supplier's truck on Fridays), and Node turns that into words so the model never does calendar math. The voice is one plain fetch to ElevenLabs, with the MP3 returned inside the JSON. Replit hosts the Node and Express server; the storefront is Three.js in one HTML file with no build step; the domain, allyou.select, came from the GoDaddy Registry challenge.
I wrote a plan that fixed the API contract first, then had Claude Code agents build against it by role, with a staff engineer reviewing at checkpoints and a local Ollama drafting docs.
Challenges I ran into
On the first real run, Gemini-3.8-flash answered 503 to every call, then 429, and a hang ate the whole 10 s budget; Gemini-3.5-flash-lite became the primary, and 3.8-flash the fallback, each attempt capped at 5 s. If both fail, the server composes the answer from the stock record itself, still voiced. iOS Safari silences audio that does not start inside the tap, so one shared audio element is primed on the enter tap. Replit names its own Postgres DATABASE_URL, so the live app could have quietly answered from the built-in seed; the server reads TIGER_DATABASE_URL first. At 3 am Replit's agent rewrote my workspace, and a republish rolled the site back; the fix was a clean re-import into a new Repl.
What I learned
Force the tool call: "Always check stock" in a prompt is a suggestion; function-calling mode ANY on the first round is a rule. Put the weekday in the tool result, not the prompt. Fallbacks are what let you demo at all. And a bakery does not "restock in three days"; it bakes. A schedule per item made the answers sound like the shop.
What's next
The sandbox builder: owners assemble their own shop from ready-made elements and staff it with agents; each shop is already one settings file. Built on the server but not yet on the page: a pre-visit list checked in one request and a hands-free guide you talk to.
Built With
- elevenlabs
- express.js
- gemini-api
- godaddy
- javascript
- node.js
- postgresql
- replit
- tiger-data
- web-speech-api
Log in or sign up for Devpost to join the conversation.