Skip to main content
A Built-for-Bankroll app deploys like any web app, to your own host — Bankroll never hosts it. Any origin that serves HTTPS works; this page is the Vercel path the starter is wired for.

The environment

.env.local is gitignored, so the dev configuration — and the dev treasury — never reach a deployment.

Vercel

Connecting the Blob store injects its token into deployments automatically. Do not vercel env pull it into .env.local — that overwrites your dev setup, and worse, points local code at production data.

A production treasury

Generate a fresh key for production — never the dev key, which sits in plaintext on your machine — and set it so the secret is never printed or written to disk: generate it and pipe it straight into a sensitive variable. The public address goes to stderr, so you still see which wallet to fund.
Fund the address with the HSUSD you pay out of, and keep a little SOL on it — the treasury pays the network fee, and the one-time rent when a payout creates a recipient’s token account.
Never replace a funded treasury. Swapping the variable strands the balance — it does not move it. Rotating means: create the new key, move the old wallet’s entire balance to the new address (npx bankroll treasury send), and only then swap the variable. A sensitive variable’s value is shown once, at creation, never again.

Set your RPC

Set SOLANA_RPC_URL before the app pays anyone. Unset, the SDK falls back to Solana’s public endpoint, which rate-limits under concurrency — and a 429 while broadcasting a payout surfaces as rpc_error with an unknown outcome, the one failure you cannot safely retry. The fallback warns once per process rather than failing, so it will not stop a deploy that forgot it. Any provider works.

Open it

Users open your app at:
— which is playLink() if you’d rather not build it by hand. Before sharing it, confirm the manifest is live:
No registration or approval is required: once the manifest serves, the /play link opens your app for any Bankroll user.