AI shoppers discover and check out in one chat: Visa-scoped cards for fiat, plus a Visa-powered stablecoin rail when you want on-chain settle.
Architecture → architecture.drawio (open in diagrams.net — overview, product, protocol, x402, agents, data model).
Agents still can’t shop like people.
- No real card checkout — most “agent shopping” demos scrape HTML, invent SKUs, or stop before money moves.
- Merchants aren’t agent-ready — human storefronts, no Visa receive path for AI buyers, no machine-readable catalog an agent can trust.
- Trust dies at settle — product copy tries to redirect the payee, skip authorize, or inject instructions into the pay agent.
Borneo is where an AI can shop — and pay — like it has a real wallet and a real card.
Virtual card with spend cap, merchant scope, TTL, and burn. Nothing charges until the shopper authorizes in chat.
Sellers bind Visa receive + identity on setup. Dual-receive without leaving the agent flow — fiat lands where the merchant expects it.
Same conversation, second rail: USDC on Base via HTTP 402 / x402 when you want on-chain settle. Fiat leads; stablecoin is opt-in, not the headline.
Fashion chat that clarifies intent (date night? set vs one piece?), then ranks live SKUs across seller catalogs — not a hardcoded demo aisle.
The pay path only sees a structured quote (slug / SKU / price / payee). Catalog prose never enters the pay agent.
Prompt-injection-shaped listings get flagged and held out of fashion picks. Settle still locks payee and amount even if someone taps a hostile title.
Agents read /llms.txt, /registry.json, and /s/{slug}/catalog.json. Do not scrape HTML. Publish once — every agent on the network can discover you.
Talk inventory, drop CSV, or paste a store URL → publish a live agent storefront.
Buyer spend limits (per tx / day / week). Merchant rails, price floors, market listing — policies that actually gate checkout.
flowchart LR
chat[BuyerChat] --> discover[Discover]
discover --> quarantine[Quarantine]
quarantine --> auth[Authorize]
auth --> visaRail[VisaScopedCard]
auth --> stableRail[VisaPoweredStablecoin_x402]
npm install
cp .env.example .env
npm run devOpen http://localhost:3000.
| Path | What it is |
|---|---|
/buyer |
Salesperson chat → Visa or USDC settle |
/onboard |
Merchant agent: inventory → published store |
/market |
Human + agent marketplace index |
/dashboard |
Ops view of both payment rails |
/demo |
End-to-end protocol demo |
/s/hackathon-shirts/llms.txt |
Seed store agent discovery |
- Node.js 20+ and npm
- OpenAI API key — buyer salesperson, merchant agent, Whisper
- Firebase web config — buyer / merchant auth
- (Optional) Funded Base Sepolia wallet with USDC for live x402 settlement
Without OPENAI_API_KEY, chat agents fall back to deterministic tools. Protocol endpoints (llms.txt, HTTP 402) still work either way. Stores run in-memory locally — no AWS required.
- Install
cd Borneo
npm install
cp .env.example .env- Fill
.env(see.env.example)
| Var | Required? | Purpose |
|---|---|---|
OPENAI_API_KEY |
Recommended | Salesperson / merchant LLM + Whisper |
NEXT_PUBLIC_FIREBASE_* |
Recommended | Buyer + merchant Firebase Auth / Firestore |
MERCHANT_ADDRESS |
Recommended | Base Sepolia pay-to for x402 |
BUYER_PRIVATE_KEY |
Optional | Live USDC settlement; without it, HTTP 402 still fires |
BUYER_ADDRESS |
Optional | Buyer address paired with the key |
Base Sepolia defaults (RPC, chain id, Circle USDC, Basescan) are already in .env.example.
- Run
npm run dev| Command | Purpose |
|---|---|
npm run dev |
Local Next.js server |
npm run build / npm start |
Production build |
npm run lint |
ESLint |