Try it: silpoice.igorbond.com.

Here is a short demo video showing the agent working end-to-end against real Silpo data. I'd appreciate your feedback and comments here or on YouTube under the video.

The problem

Grocery consumption isn't flat — it spikes around holidays and birthdays, dips when you're traveling. Nobody tracks that in their head, so households over-order (waste) or under-order (an emergency store run). Most "AI shopping assistants" are a chatbot bolted onto a search box — you still have to know what you need before you can ask. I wanted the opposite: an assistant that already knows your kitchen's rhythm, so the conversation starts from your actual situation, not a search field.

What it does

You talk to it in Ukrainian, out loud. It checks simulated stock levels and consumption history, cross-references an events calendar (holidays, birthdays, even a planned trip that temporarily lowers consumption), and turns that into a shopping list — not a single "you're low on milk" countdown, but several signals combined. Then it finds the real products and prices at your Silpo branch, builds an actual cart, sets a real delivery slot, and verifies the cart after every write.

The scenario that shows this off best: ask "what should I order this week?" and get a baseline list. Mention your daughter's birthday is Saturday, and the list visibly expands — more drinks, snacks, cake ingredients — because the assistant reasoned over a calendar event, not because you asked for a party category.

This is meant to be an agent, not a chatbot: a single turn fires an unprompted chain — get_stock_levels → get_consumption_history → get_upcoming_events → predict_shopping_list → silpo_get_my_shopping_cart → silpo_find_products_batch — and confirming an order always ends with silpo_get_shopping_cart_by_id to verify nothing broke, rather than trusting a write blindly.

What's real, what's mocked

The household stock/consumption model is synthetic — a stand-in for order history, a smart fridge, or a third-party inventory app in a real deployment. Everything downstream of "here's what to buy" is real: OAuth login against Silpo's actual auth server, real product search, prices, cart, and delivery slots, all through the official MCP server. That server has no checkout/payment tool, so Silpoice never claims to have placed an order — it gets the cart to "ready, priced, scheduled" and hands you Silpo's own checkout button. Honest scope over a faked payment confirmation.

A side benefit: it doesn't have to be Ukrainian-only

The demo speaks Ukrainian, but the STT language, TTS voice, and system-prompt language are all just config — not assumptions baked into the agent's reasoning. Point the same pipeline at an English or Polish voice pair, and the same assistant becomes usable by a tourist or expat who's never typed a Ukrainian word — a real barrier today for anyone who wants Silpo delivery but doesn't speak the language. Not a feature I set out to build; it fell out of treating language as a parameter instead of hardcoding it.

The stack

LiveKit (WebRTC) for audio, Silero VAD, OpenAI gpt-4o-transcribe for STT, Respeecher for TTS, Claude for tool-calling reasoning against both the household model and Silpo MCP, and a Cloudflare Worker for OAuth, LiveKit tokens, and the live account/cart page.

Bugs I only found by testing against the real thing

A few real issues surfaced only because I tested live instead of mocking Silpo's systems: an early version leaked the guest's Silpo access token to the browser via LiveKit room metadata (broadcast to every participant) — fixed by having the agent fetch it server-to-server instead. A test session once burned over a million tokens because full tool-call history was being re-billed every turn — fixed by compacting history and adding a hard per-session cost cap. And a silence-detection race condition let the assistant interrupt its own reply — fixed by gating it on agent state.

Where I'd take it next

Real data instead of a simulation (order history, a smart fridge, an inventory app); the same feature living inside the Silpo app itself, which came up unprompted from people I tested it with; other languages, mostly a config change away; and deeper personalization — Silpo MCP already exposes family, food restrictions, and loyalty data this prototype barely uses.


Try it: silpoice.igorbond.com.

Questions or feedback? Find me on GitHub or LinkedIn.