Make Your Ideas Real. Build Apps, Websites and AI Agents with Plain English with Astro, React, Shadcn and Cloudflare.
$ npx -y skills add one-ie/one --agent claude-code
Every other starter template hands you a blog and a contact form. This one hands you a checkout.
Clone it and both payment rails are already wired. Crypto links across Sui, Ethereum, Solana and Bitcoin, with no merchant account to open, no API key to request, no approval to wait for and nobody holding your money in between. Cards through real Stripe Elements, live on your own Stripe account the moment you add two environment variables. Neither needs a backend of your own. Neither charges a platform fee or a monthly fee.
4 chains per link · No custody, ever · $0 monthly fees · 2 env vars for cards.
Free forever. Yours to sell and resell at any price you set. One obligation: keep the ONE brand, logo and link in your deployed product. That is the entire catch, and it is stated here rather than left in a file for you to find.

1. Get the code.
git clone https://github.com/one-ie/one my-app
cd my-app && bun install
Prefer one command to a clone? The scaffold pulls the same shape, .claude/ and
.mcp.json included:
npx oneie create node my-app
2. Mint a wallet. one wallet keygen runs fully offline. It never touches the
network, and only the four public addresses ever leave it:
npm install -g @oneie/cli
one wallet keygen # prints once, copy the four addresses
Paste them into site/.dev.vars (see .dev.vars.example):
WALLET_SUI_ADDRESS=
WALLET_EVM_ADDRESS=
WALLET_SOL_ADDRESS=
WALLET_BTC_ADDRESS=
Do this before you start the dev server. .dev.vars is read once at startup, so
if the server is already running, restart it.
3. Start it, and take money.
cd site && bun run dev # → http://localhost:4321
Better Auth and Cloudflare D1 give you sessions and data locally from the first
run, so nothing so far needs a key, an account or a card. Those four addresses are
now the treasury on every link this site creates. Use the form at /payments, or
POST to your own route:
curl -X POST http://localhost:4321/api/pay/link \
-H 'Content-Type: application/json' \
-d '{"amountCents": 2500, "product": "Consulting hour"}'
# → { "url": "https://pay.one.ie/l/…", "qr": "…" }
The buyer opens the URL, picks a chain, and signs. Funds land in your addresses. There is no middle account, so there is nothing to withdraw and nothing to reconcile. Settlement is the transaction.
Next: the step-by-step tutorial walks from empty folder to deployed site, including your first colour change, your first post, your first product and the build gate. About 20 minutes.
one CLILinks are minted and signed by pay.one.ie, which returns a
URL and a QR code. Your clone never holds a key for this and never proxies a
payment. site/src/pages/api/pay/link.ts is one short route: it resolves the price
server-side, attaches your wallet addresses as the treasuries, and returns the
link. It works with no ONE_API_KEY at all, because it never touches the ONE
backend.
The price is resolved from the catalog or the plan table, never from the request body, so a buyer cannot set the amount they are charged. Ad-hoc amounts and catalog products read from separate fields, which means a free-text description can never collide with a product slug and hijack a price.
| Setup | Four addresses from one offline command |
| Custody | Never. Peer to peer |
| Chargebacks | None. The transaction is final |
| Fees | Network gas. No platform fee, no monthly fee |
| Chains | Sui · Ethereum · Solana · Bitcoin |

Real Stripe Elements, wired end to end.
/api/pay/create-intent mints
PaymentIntents through the Stripe SDK.
/api/pay/webhook verifies every event's
signature with constructEventAsync and SubtleCrypto before it trusts a byte,
and returns 400 on anything it cannot verify.
Both fail closed. Without STRIPE_SECRET_KEY the API returns 503 and the
/payments page renders an honest preview instead of a live form. Add two keys
and the same form charges your own Stripe account. PCI stays with Stripe; the
card number never reaches your worker.
one wallet keygen generates the keys on your machine and leaves them there. The
mnemonic and private keys are never written to any file in this repo, and the
four public addresses are the only thing that crosses its boundary. --recover
rebuilds the same wallet from the mnemonic.
The /wallet page reads balances over public RPC with no backend and no API key.
Those RPC endpoints are testnet by default (Sui testnet, Sepolia, Solana
devnet, Blockstream testnet) and are four constants at the top of
site/src/lib/chain-balances.ts. Payment links
themselves settle on the chains pay.one.ie serves, which is a separate thing from
what that page displays.
Not a trial. Not a free tier. Not open-core. The whole product is in this repo: source, design system, plugins, agents, CLI.
The ONE License v1.0 grants, in perpetuity and irrevocably:
| You may | Without |
|---|---|
| Use it commercially, anywhere | Usage limits |
| Modify it and own your modifications | Royalty fees |
| Sell and resell what you build, at any price you set | Sharing your code or data |
| Sublicense and distribute it | Copyleft |
| Run it as a service | Asking permission |
| Train AI on it | Telling us |
| Patent what you invent on top of it | A contributor agreement |
It is compatible with MIT, Apache, GPL, BSD and MPL.
The one obligation: keep the ONE brand, logo and link in your deployed product. The Enterprise License removes it for white-label work.
The site is static-first Astro with SSR on Cloudflare Workers. Most pages ship zero JavaScript, so most of the site is files on Cloudflare's edge and the dynamic routes fit inside the Workers free tier.
cd site && bun run deploy # astro build && wrangler deploy
Your domain, your Cloudflare account, no platform in between.
The site has two independent switches. Neither is required, both flip back.
┌─────────────────────────┐ ┌─────────────────────────────────┐
│ SITE ONLY │ ───► │ SITE + BACKEND │
│ (the default) │ │ (one env var away) │
├─────────────────────────┤ ├─────────────────────────────────┤
│ Astro + React + shadcn │ │ everything on the left, plus: │
│ Better Auth + D1 │ │ AI chat · CRM · analytics │
│ Blog · docs · products │ │ agents · workflows · wallet │
│ Crypto links + Stripe │ │ credit metering · lifecycles │
│ 100% local, 100% free │ │ the ONE backend behind it │
└─────────────────────────┘ └─────────────────────────────────┘
Switch 1: the backend. Without ONE_API_KEY the app runs standalone on local
auth and D1. Add the key and the same code talks to https://one.ie. No rewrite.
Both payment rails sit on the left column and stay there.
Switch 2: which widgets ship. Every plugin is a build-time Astro integration
you list in site/one.config.ts. Add chat() and a chat widget mounts. Remove it
and it is gone. A key on its own never mounts anything you did not ask for.
You can build and sell a business on the left column and never touch the right.
resolveProduct() reads the catalog, never a
client-sent amount, so a buyer cannot tamper with a pricesite/src/lib/themes.ts carry every component, across 14 presets.one is a Claude Code plugin with 9 hand-picked skills, indexed on Flowy in the Cloud & Infrastructure category. Install it with the command on its page. It includes astro, react19, sdk. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it