Ecommerce Template
Modern ecommerce template built with Next.js 16, React 19, Drizzle, Better Auth, Supabase, and Stripe.
Agent-ready stores open to any HTTP agent — not locked to ChatGPT or Claude. Shoppers discover via /api/search and settle RLUSD in chat via x402. Catalog text cannot change payee, amount, or skip auth
CommerceTypeScript · HTMLGitHub @itzsihuiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Agent-ready stores open to any HTTP agent — not locked to ChatGPT or Claude. Shoppers discover via /api/search and settle RLUSD in chat via x402. Catalog text cannot change payee, amount, or skip authorize.
Taken from the repository README
Loading the full README.
Read the full README ↗Go agent-ready. Publish once. Any agent can shop you — not only ChatGPT or Claude.
Landing pitch (merchant-first) → http://localhost:3000 · Architecture → architecture.drawio
Agent commerce is happening — but catalogs are walled.
Stripe-style / Instant Checkout–class listings often live where ChatGPT and Claude can reach them. Procurement bots, local LLMs, personal agents, and custom runners get blocked. Merchants who only list there are invisible to the long tail of agents.
| 2 | Consumer chat apps get the closed catalog path (ChatGPT, Claude) |
| 0 | Open HTTP surface for everyone else on that same path |
| ∞ | Agent types locked out — procurement, local LLMs, personal agents, Cursor/custom |
| 1 → ~0.1 | For every 1 buyer agent that wants to shop, open protocol still exposes on the order of ~0.1 agent-readable catalogs — most inventory is HTML-only or trapped in those two apps |
Numbers are structural scarcity, not invented GMV. The bottleneck is open, machine-readable supply, not demand for shopping agents.
flowchart TB
subgraph closed [Closed_catalog_gate]
Merchants[Merchant_catalog] --> StripeSurface[Stripe_or_partner_surface]
StripeSurface --> ChatGPT[ChatGPT_app]
StripeSurface --> Claude[Claude_browser_or_app]
LockedOut[Procurement_local_personal_agents] -.->|blocked| StripeSurface
end
Open protocol. Any agent. Same settle rails.
Publish once → humans shop in chat → procurement / local / personal agents hit the same endpoints → settle RLUSD via HTTP 402 / x402 on XRPL Testnet.
flowchart LR
publish[Publish_registry_llms_txt] --> search[GET_api_search]
search --> anyAgent[Any_HTTP_agent]
anyAgent --> settle[RLUSD_x402]
| Step | Surface |
|---|---|
| Index | /registry.json, /llms.txt, /s/{slug}/llms.txt |
| Discover | GET /api/search?q=… (same ranker for buyer UI + external agents) |
| Buy | POST /s/{slug}/buy → 402 → authorize → settle |
| Skill | .agents/skills/borneo-registry-shop |
Do not scrape HTML. Catalog prose never enters the pay path — settle only sees a locked quote (storeSlug, skuId, price, merchantAddress).
/api/searchBorneo issues an XLS-70 credential (BorneoVerifiedSeller) to each vetted merchant's payout address. The merchant accepts it and sets an XLS-40 DID pointing at their storefronts. Registry, search, agent.json and llms.txt expose it, and search ranks verified sellers higher while demoting unverified and injection-flagged listings. Agents can re-check it on any XRPL node with no trust in Borneo: docs/verified-sellers.md.
Buyer spend limits (per tx / day / week). Merchant rails, price floors, market listing — policies that gate checkout.
flowchart LR
buyerPolicy[BuyerSpendLimits] --> auth[Authorize]
merchantPolicy[MerchantRailsAndFloors] --> auth
discover[Discover] --> quarantine[Quarantine]
quarantine --> auth
auth --> settle[RLUSD_x402]
npm install
cp .env.example .env
# Fill XRPL_BUYER_SEED, MERCHANT_ADDRESS, Firebase, OPENAI — see scripts/setup-xrpl-rlusd.md
npm run dev
Open http://localhost:3000.
| Path | What it is |
|---|---|
/ | Landing — problem → closed catalogs → open protocol |
/merchant · /onboard | Seller chat → publish agent storefront |
/buyer | Fashion chat → RLUSD x402 settle |
/market | Human + agent marketplace index |
/api/search?q= | Intent search (agents + buyer demo) |
/registry.json | Network store index |
/s/{slug}/llms.txt | Per-store agent discovery |
/api/seller-verification?address= | On-ledger seller credential + how to verify it yourself |
/sellers/{payTo}/did.json | Merchant DID document (target of the on-ledger DID) |
scripts/setup-xrpl-rlusd.md)Without OPENAI_API_KEY, chat falls back to deterministic tools. Protocol endpoints (llms.txt, /api/search, HTTP 402) still work.
.env.example)| Var | Purpose |
|---|---|
OPENAI_API_KEY | Agents + embeddings search |
NEXT_PUBLIC_FIREBASE_* | Buyer + merchant auth |
XRPL_BUYER_SEED | Server-side x402 settle (s…) |
MERCHANT_ADDRESS | Default merchant payTo (r…) |
XRPL_* / TOKEN_* | Testnet RPC, facilitator, RLUSD issuer |
BORNEO_ISSUER_SEED | Verified-seller credential issuer (node scripts/borneo-issuer-setup.mjs) |
| Command | Purpose |
|---|---|
npm run dev | Local Next.js |
npm run build / npm start | Production |
npm run lint | ESLint |