This is a live demo of ShipKit.
A real deployment on seeded data — dashboard, billing, credits and a read-only admin console. One click gives you a throwaway account that is erased within a day; the template itself is at shipkit.sh.
Built on
- TanStack Start
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- Vite
- Bun
- Cloudflare
- Node.js
- Drizzle
- better-auth
- Stripe
- Creem
- Resend
With your agent
Say what you want. It does the rest.
- Claude Code
- Codex
- Cursor
- GitHub Copilot
- Windsurf
- opencode
- Zed
- Amp
Step 1
Running in one command
/setupbun installbun run db:migrate:localbun run devhttp://localhost:3000/Step 2
Payments wired by the agent
/stripestripe prices create …Wrote ids to plans.tsstripe listencheckout → 200Step 3
Rules it cannot quietly break
Add invoices/add-feature invoices✗ no permission checkAdded requirePermission✓ all tests pass
This is the whole app.
- The app
A guarded shell: home, account settings, plan and credits.
- Billing
Checkout, prorated upgrades, downgrades at period end, receipts.
- Admin console
Revenue and growth at a glance, then users, orders, roles, audit and email logs.
- Marketing site
Prerendered landing, pricing, docs, blog and legal — in two languages.








In the box
The parts you would have written anyway.
- 01
Payments, provider-neutral
src/features/billing- Stripe
- Creem
- One internal event type
- Upgrade now, downgrade at period end
- A refund undoes an upgrade
- Switch with one env var
- 02
Passwordless auth
src/features/auth- GitHub
- Emailed sign-in code
- No passwords, no reset flow
- Sessions in D1
- 03
Metered credits
src/features/credits- Monthly grant per plan
- Packs that never expire
- Spend without a transaction
- Full ledger
- 04
An admin console
src/routes/_app/admin- KPIs and trends
- Users, subscriptions, orders
- Roles and permissions
- Audit and email logs
- Admin JSON API
- 05
Content and i18n
src/features/content- MDX content
- Blog and docs
- Compiled at build time
- EN / 中文
- Locale in the URL
- 06
The boring half
.github/workflows/ci.yml- Typecheck and lint
- Unit tests
- Playwright e2e
- Deploy refuses pending migrations
- Deletion recipes verified in CI
- 07
And the rest
src/features- R2 file storage
- Transactional email
- In-app notifications
- In-app feedback
- Waitlist gate
- Affiliate programme
- Analytics
- API keys
Pricing
The plans are already in the repo.
Free
$0/mo
0 credits / month
≈ 0 actions a monthStarter
$0/mo
0 credits / month
≈ 0 actions a monthPro
$0/mo
0 credits / month
≈ 0 actions a monthStudio
$0/mo
0 credits / month
≈ 0 actions a month
Questions
Things people ask before they clone it.
Stripe or Creem?
Either, and both at once. The webhook routes only verify, deduplicate and translate a payload into one internal event; features never import a provider client. PAYMENT_PROVIDER picks who takes new checkouts, and existing subscriptions keep renewing wherever they started.
Why Cloudflare Workers and not a Node host?
Because D1 and R2 are bindings, not services with credentials: no connection string, no pool, no S3 keys, and local dev runs the same runtime as production. The trade is that workerd forbids some Node patterns — the template already works around the ones that matter, like runtime-eval MDX.
What does "every feature is deletable" actually mean?
Each optional feature is a directory plus a handful of one-line registrations — a schema barrel line, a handler import, a nav row. The /delete-feature skill knows the recipe for each, and a CI job runs every recipe on every pull request and fails if one has rotted.
What does it cost to run?
On a small app, close to nothing: Workers, D1 and R2 all have free tiers that cover early traffic, and the only always-on cost is your domain. Email and payments bill per use.
ShipKit