Project · Build

An AI sales associate, with a checkout it cannot approve

An assisted storefront for online stores: browse the catalogue and talk to a sales associate in the same screen, then pay through an AP2-verified checkout.

Working demo · Fictional store · No real payments

~55 croreUsers onboarded on UPI, June 2026Government of India
~30 crorePeople who shopped online in India, 2025Bain, How India Shops Online
~50%Share of new e-retail orders from tier-2+ towns, 2025Bain, How India Shops Online

The problem

India pays digitally but shops online far less. For many shoppers the friction is not paying; it is buying. A catalogue of 400 products with spec tables is a research task. A shopkeeper who asks "who is it for, and what's your budget?" is not.

The product

In a good shop you can browse the shelves on your own, and a salesperson is there when you want help. This adds the salesperson without taking the shelves away.

Catalogue
TravelUnder ₹5,000Audio
Associate’s pick
Associate’s pick
Sales associate

Something for my father, he travels a lot, under ₹5,000

Two good picks for frequent flyers. Both ship in 2 days and allow cash on delivery.

Ready to pay? Approval opens on a separate secure screen.

The trust boundary

The AI proposes; signatures decide. Every step after the cart is deterministic code built on the Agent Payments Protocol (AP2).

Architecture today

One server runs every role. Only the shopping agent calls a real outside service; each dashed box marks where a real service plugs in to go live.

Assisted storefront architecture todayThe shopper's browser talks to one server. In the server, an AI shopping agent sits above a trust boundary. Below it are the catalogue, sessions, four AP2 roles that sign and verify (merchant, approval, card issuer, processor) and an event log. Only the agent calls a real external service, an LLM API. Every other row is simulated and marks where a store API, database, key vault, passkey, token vault, payment gateway and analytics would plug in.SHOPPER'S BROWSEROUR SERVER (ONE PROCESS)EXTERNAL SERVICESChat with LumiPOST /api/chatStorefront + cartcatalogue, cartApproval screennon-AI, shopper onlyPOST …/approveUnder-the-hood logSSE /api/eventstrust boundary: deterministic code belowShopping agentLLM tool loop, max 8 callsagent/loop.pyAILLM APIAnthropic / OpenAI / GoogleLIVECatalogue36 products, Shopify-shapedcatalog_data.py, lumora.jsonStore APIShopify / WooCommerce: stock, pricesPLUG INSessions + cartsin memory, lost on restartagent/session.pyDatabasePostgres / Redis: sessions, ordersPLUG INMerchantsigns cart, verifies, signs receiptpayments/merchant.pyAP2Key vaultAWS / GCP KMS, published public keysPLUG INApprovaluser key held on the serverpayments/trusted_surface.pyAP2Passkey + device keyWebAuthn, hosted by a wallet or bankPLUG INCard issuerfixed card + UPI list, one-time tokenpayments/credential_provider.pyAP2Token vaultRazorpay / Juspay saved cards, UPI appPLUG INProcessor4 checks on the signed cart, no moneypayments/processor.pyAP2Payment gatewayRazorpay / Juspay / PayU: OTP, UPI PINPLUG INEvent logone JSONL file per runevents.py → runs/Analytics + site replaymetrics, recorded runsPLUG INNot built yet: shopper login, delivery address, order management, refunds.Real external call todaySimulated in the demo: plug in to go liveAP2AP2 role: real ES256 signatures and checks (AP2 SDK)

What is real, what is simulated

The cryptography is real at every step. The counterparties and the money are simulated.

StepReal todaySimulated today
Search and catalogueSearch and ranking over a Shopify-shaped catalogueCatalogue is fixed, not a live store
Merchant signs the cartReal signature and hashMerchant key held in memory
Shopper approvalReal mandate signatures with the shopper’s keyPasskey is simulated; key is held server-side
Payment tokenSingle-use token bound to cart and amountCard and UPI list is fixed
PaymentVerified against the signed cart; signed receiptsNo money moves

Decisions

Delegated purchases parked

"Buy it when it drops under ₹X" suits price-volatile categories like flights and hotels, not premium D2C brands, the target customer.

Replay-only public demo

The site will play back a recorded run. No live AI endpoint is exposed, which caps cost and abuse.

Guardrails in code, not prompts

Hard budget limits, totals read from the signed cart and single-use tokens hold even when the model is fooled.

Metrics I would track

Sources