Inspiration
avanti is Italian for "come in!", what you call out when someone knocks.
Shopping is moving into AI chats. Over 75% of shoppers have already used tools like ChatGPT, Claude and Gemini to help them shop, and Bain expects AI agents to drive $300-500B of US online sales by 2030. But an AI shopper only buys from whoever is plugged in: the big chains, with their catalogs, APIs and checkouts.
Small businesses are about half of US economic activity per Visa. The bakery near campus, the market stand, the home baker have a chalkboard, a cash box and a phone. To an AI shopper, they don't exist. My grandma runs one of those shops. avanti is for her.
What it does
Everyone is building the AI that shops. avanti builds the other half: a shop that AI can buy from, set up in about a minute by someone who will never write an API. A photo and a voice are the whole integration.
For the shop owner: open in about a minute (our own snack stand, on the app's timer: opened in 1 min)
- Snap one photo of the counter, or skip it. avanti's AI lists what it sees and reads prices straight off price tags and handwritten signs. Anything it can't price is marked "needs a price". It never invents one.
- Fix anything by talking or typing, in any language: "I sold out of turkey jerky", "Monster is three dollars, the pistachios have nuts." Only what you mention changes.
- One tap, and the shop is open to walk-in customers and to every AI shopper, with a printable window sign: "AI orders welcome."
Behind the counter (a live dashboard on a laptop or phone)
- New orders pop in live and are read out loud. The owner talks back: "we're out of croissants" marks them sold out for every AI at once.
- Rules for AI: a spending limit per AI order, items that are in-person only, and a pause switch, all enforced before Visa is ever called.
- "What AI shoppers asked": today's searches that found the shop, how many ordered, and what people nearby wanted that the shop doesn't sell yet.
- Regulars: the owner sets a reward ("every 3rd pickup: a free cookie"), and the counter says "Give: a free cookie" when one is due.
For the shopper
- Ask in plain words: "Cake, flowers and a small print by 10 tonight, no nuts." avanti searches live shop data, checks allergens against each shop's own words, says why it picked each shop, and can split one request across several shops with a single "Confirm all".
- After confirming, a live pickup ticket: the 4-digit code, the HELD seal ("not charged until you pick up"), and status that moves on its own, Sent → Preparing → Ready → Picked up. Tap "I'm here" and the counter announces you by name.
- No account needed: stamp cards live on your phone. It also installs as a home-screen app.
Any AI, not just ours
- avanti is an MCP server at
try-avanti.vercel.app/api/mcp. Add it to Claude as a connector and Claude can find avanti shops, read live menus, ask about allergens and start an order that you confirm in avanti.
What it changes for a shop
- A new sales channel with nothing to build: no website, no POS, no catalog.
- Faster service: orders announce themselves, stock changes are one sentence, and shoppers say when they're at the door.
- More completed orders: multi-shop errands in one tap, allergen answers in the shop's own words, and pickup holds that make "I'll take it" stick.
- Repeat customers, with stamp cards that need no app or account.
- A list of what to stock next: what nearby AI shoppers asked for and couldn't find.
- Payment certainty: authorized when the order is placed, captured with the pickup code.
Built for trust
- The AI never sets a price. Prices come from the database, and a new price is accepted only if it traces to the owner's own words or a price tag quoted from the photo.
- No invented diet claims: a "nut-free" tag needs a quote from the shop's own words, and shoppers see that quote.
- A person confirms every order. AI shoppers can search, ask and start an order, but nothing is held until the shopper taps Confirm.
- Every order is signed by the AI shopper's key, following the Trusted Agent Protocol's HTTP-signature approach, and verified at the shop's door before anything else happens. We sent 50 test bots: 50 blocked, 0 reached Visa.
- Honest money states: held, charged and released are different promises, and the UI says exactly which one is true. Every step is a real Visa Acceptance sandbox transaction.
- Private by default: no shopper accounts, a device key hashed before it leaves the phone, owner links stored only as hashes, anonymous insights, and a database only the server can read. A /privacy page explains in plain words how the AI is used and what's kept.
How we built it
- App: Next.js 16 (App Router), React 19, Tailwind 4 and Motion; Supabase (Postgres, realtime, storage); deployed on Vercel.
- Reading the counter: Google Gemini, multimodal. It reads the counter photo and the owner's voice or text; for edits it returns only the changes. Server-side checks keep a price only if it traces to the owner's words in that message or a quoted tag in the photo, and keep a diet tag only with a quote. It falls back across several Gemini models, and treats an empty read as a failed one.
- The AI shopper: Claude (Haiku) as a tool-using agent: search shops, read menus, ask the shop, propose orders, plan multi-shop errands. Prices always come from the database, never from AI text.
- Any AI: a remote MCP server (Streamable HTTP) over the same tools.
- Trust: Ed25519 keys and RFC 9421 HTTP Message Signatures (the standard behind Visa's Trusted Agent Protocol), with content digests, nonces and timestamps against replays.
- Payments: Visa Acceptance (Cybersource) REST sandbox: authorize with capture off (the hold), capture at pickup, reverse when a hold is released.
- Live updates and voice: Supabase realtime broadcasts with polling as a backup; the browser's own speech synthesis and recognition at the counter.
- Quality: strict TypeScript and 643 automated tests across the AI checks, signatures, Visa client, loyalty, insights and MCP server.
Challenges we ran into
- Free AI quotas. One Gemini model allows about 20 requests a day. We split the work (Gemini reads the shop's photo and voice, Claude runs the shopper) and fall back across models, including when a weaker model looks at a full counter and returns nothing.
- Keeping spoken edits honest. Letting the AI edit a menu is risky, so it returns only changes, and each new price must appear in what the owner just said.
- Reading prices off a sign. We ask the model for one box per line of a sign, so each price flies off its own line in the photo and lands on the menu.
- Honest money states. Held, charged and released are different promises, and the UI says exactly which one is true.
- Live updates that never double up. A counter that reads orders aloud must say each one exactly once, even when a realtime ping and a backup poll race each other.
Accomplishments that we're proud of
- From one photo and one sentence to a live shop any AI can order from, in about a minute: no website to build, no POS, no menu to type.
- A real card-network flow (hold, then capture at pickup) on every order, with unsigned bots stopped before any payment call.
- Owners get something back from AI: what people asked for that they don't sell yet.
What we learned
- The hard part of AI shopping isn't the chat. It's trust: who is this agent, what exactly did it ask for, who holds the money, and what the AI is allowed to say about a shop.
What's next for avanti
- Visa Intelligent Commerce agent tokens instead of test cards, and Visa's own agent directory.
- Instant payout to the owner at pickup with Visa Direct.
- Tap to pay at pickup on the owner's phone.
- Real shops on the Ave.
Built With
- claude
- cybersource
- ed25519
- google-gemini
- model-context-protocol
- nextjs
- supabase
- tailwind
- typescript
- visa-acceptance
- web-speech-api
Log in or sign up for Devpost to join the conversation.