Skip to content
This store runs on the kit it sells

Ship a paid product on Dodo this weekend.

Dodo checkout, verified webhooks and the subscription states most kits skip. Written once, tested, and yours to keep.

This page is the demo

The checkout that is about to charge you is src/app/api/checkout/route.ts from the repo you are buying: the kit's own checkout route and webhook pipeline, minus the sign-in this store doesn't need. So is the receipt email that follows.

81 tests

Most of them cover billing: webhook replays, signature failures, state transitions, plan gating from subscriptions and one-time purchases alike. Run npm test before you trust a line of it.

Extracted, not invented

The billing code was lifted out of paizy, which was charging cards on Dodo before this kit existed. The idempotency design came from gearon and the client work around it.

Dodo is the merchant

Dodo Payments is merchant of record, so global tax, receipts and refunds are its problem. It works from India, where Stripe does not.

Everything a paying customer touches is already built.

Not scaffolding and not a to-do list. These are working, wired-up modules with their environment variables documented and their edges tested. The full contents tour is in the docs.

Dodo billing, all the way down

Checkout and the customer portal, plus a webhook route that verifies the signature, refuses an event id it has already seen, and normalises every payload into one shape before it reaches your database. Behind it sits a subscription state machine and requirePlan(), which knows that a card in retry is still a customer. One-time purchases grant the same entitlement as a subscription, so you can sell either without a second code path.

src/lib/billingcovered by
  • checkout.tscheckout.test.ts
  • gate.tsgate.test.ts
  • state-machine.tsstate-machine.test.ts
  • webhook-handler.tswebhook-handler.test.ts
  • providers/dodo/normalize.tsnormalize.test.ts

Sign-in and a gated dashboard

better-auth with Google and email magic links, plus a dashboard shell that demonstrates both gating shapes: requirePlan() for a whole route, meetsPlan() inline for one panel. This store strips that half out because it sells to anonymous buyers. Your copy ships with it.

Postgres with the migrations in the repo

Drizzle on Postgres: Supabase or Neon both work. Schema, generated migrations and a typed client, so the first thing you do on a new machine is db:migrate rather than archaeology.

Email that is already written

React Email templates for welcome, magic link, receipt and subscription status, sent through Resend and wired to the billing events that trigger them. Receipts carry an inline Rune QR code, rendered as a data URI rather than a hotlinked image.

A blog, docs and the SEO around them

MDX content behind one frontmatter contract, a generated sitemap, per-route metadata and OG images rendered at request time. PostHog and a Cloudflare beacon ride along, both silent until you add a key.

It boots with nothing configured

Clone it, npm run dev, and the whole site renders on zero environment variables. Every integration reads its key at request time rather than at import, so a missing variable shows you a "not configured yet" panel instead of a stack trace. npm run build passes the same way.

The foundation your agent builds on.

Dodo Payments is new. That is why it is worth building on, and it is also why asking a model to wire it up goes badly: there is almost nothing about Dodo in anything a model was trained on, so it fills the gap with Stripe habits. The code compiles. The tests it writes pass. Money still goes missing.

So do what everyone shipping in 2026 actually does. Let the agent build your product, and hand it a money path that a person already wrote, read twice and covered with tests.

What a model writes for Dodo today

  • Header names and signature schemes it half remembers from a different provider.
  • No replay guard, so one retried delivery runs your fulfilment a second time.
  • past_due handled as cancelled, which logs out customers in the middle of a retry.

What is in the box instead

  • AGENTS.md, with CLAUDE.md pointing at it: the architecture map, the conventions that bind, and named recipes for adding a plan, an email, a gated route or an OAuth provider.
  • A DESIGN.md your agent reads before touching UI, encoding the tokens, type scale and motion this kit uses, so what it builds next still looks like the rest of the product.
  • 81 tests your agent can run to prove it did not break the part that takes money.

Buy it once. The repo stays yours.

Reply to your receipt, or email abhimanpanwar6@gmail.com, with a GitHub username and a collaborator invitation to the private repo, or repos for the Founder Kit, follows within 24 hours. Updates arrive the way everything else in your terminal does: git pull.

Web Kit Solo

One developer

Launch price

$29$39

One payment, not a subscription.

The Next.js starter this store is built on, as a private GitHub repo you keep and pull updates from.

  • Dodo checkout, customer portal and signature-verified webhooks
  • Subscription state machine, event-id idempotency, dunning-aware gating
  • One-time purchase entitlements, not just subscriptions
  • better-auth sign-in and a gated dashboard, both built and tested
  • Drizzle on Postgres: Supabase or Neon both work, React Email on Resend, MDX blog and docs, SEO and OG images
  • AGENTS.md recipes and a DESIGN.md your agent reads before touching UI
  • 81 passing tests and lifetime updates by git pull

Web Kit Team

Up to five developers

$99$129

One payment, not a subscription.

The same kit, licensed for everyone at one company who will touch the code.

  • Everything in Web Kit Solo
  • Five repo invitations instead of one
  • One license covering up to five developers
  • The same lifetime updates by git pull

Startup Kit

One developer

$69$99

One payment, not a subscription.

The Web Kit plus a role-gated admin panel, for the day after your first sale.

  • Everything in Web Kit Solo
  • Role-gated admin panel: overview KPIs, user management with an audited role/ban danger zone, sales, waitlist and webhook event views
  • Typed API route patterns (validation, role guard, JSON envelope) with a worked example
  • Demo mode: the whole admin panel renders on fixtures with zero environment variables set

Founder Kit

One developer

$129$179

One payment, not a subscription.

The Startup Kit plus an Expo app reading the same account, entitlement and billing.

  • Everything in the Startup Kit
  • Expo app for iOS, Android and web, sharing one account and one entitlement with the web kit
  • Zero-config demo mode: every app screen reachable on fixture data before you connect anything
  • Web checkout only: Dodo's hosted checkout in the system browser, not App Store in-app purchase, so add a store billing provider yourself if what you sell needs one

Launch pricing. It goes up when the kit reaches v1.0.

Not sure which kit? Answer four questions.

Questions worth answering before you pay.

What do I actually get, and how fast?

A collaborator invitation to the private GitHub repo holding the kit, or to two repos on the Founder Kit: the Startup Kit repo and the mobile app repo, since that tier shares one account and one billing history across both. Dodo emails your receipt the moment the charge clears, and the thank-you page can claim your invite on the spot: enter your GitHub username there and it lands in seconds once we have verified the payment. If one of two repos fails while the other lands, the confirmation says exactly which one is still pending rather than a blanket "you're in". Prefer email, or is that instant option not showing? Reply to the receipt, or write to abhimanpanwar6@gmail.com, with your GitHub username and the invite goes out within 24 hours by hand instead. Either way it is then git clone, npm install, npm run setup, and the site runs.

What does the license actually let me do?

It is per developer. One seat covers unlimited projects: your own products, client work, commercial or not, as many as you want to build. Modify it, rebrand it, delete half of it. The products you build are entirely yours. What the license does not cover is reselling the kit, redistributing its source, or shipping it as a competing starter template. Build anything with it, just do not sell it back to the people it came from.

What is the difference between Solo and Team?

Seats, and nothing else. Solo licenses one developer and sends one repo invitation. Team licenses up to five developers at one organisation and sends up to five invitations against the same grant. The code, the updates and the terms are identical. If more than five people at your company will have the kit checked out, write in before you buy and we will sort out the extra seats.

How do updates work, and for how long?

Your invitation is to the live repo, so updates are a git pull. Add it as a remote, pull whenever you want what has landed since, and merge it into your fork on your own schedule. There is no license server, no renewal date and no subscription: the repo access is the product, and it is yours for as long as the kit is maintained.

Do I need a Stripe account?

No, and that is most of the reason this kit exists. Stripe is closed to new sellers in India who want to charge internationally, which leaves a lot of people building products they have no way to take money for. Dodo Payments is open, works from India, and is the merchant of record. Every line of the billing layer is written against it, behind a provider interface you could point at something else later.

Who handles refunds and tax?

Dodo, on both counts. It is the merchant of record for every sale, so the receipt, the local tax and any refund run through Dodo rather than through us. If something in the kit is broken, write to abhimanpanwar6@gmail.com first: most refund requests turn out to be bug reports, and those get fixed the same week.

Can I just have an AI write this for me?

For most of your app, yes, and you should. The money path is the exception. Dodo is recent enough that there is very little of it in any training set, so generated Dodo integrations tend to invent header names, skip replay protection and treat a card in retry as a cancellation. Each of those compiles, and each one loses money quietly. This kit is the tested state you hand your agent before it starts, not a replacement for it.

What is the stack?

Next.js 16 on the App Router, React 19, TypeScript in strict mode, Tailwind v4, better-auth, Drizzle on Postgres: Supabase or Neon both work, Dodo Payments, React Email on Resend, MDX for the blog and docs, PostHog and Cloudflare for analytics, and Vitest. No component library to fight and no service you cannot swap out.

Longer answers in the docs: the full contents tour, getting access and the license in plain language. Anything still unanswered goes to abhimanpanwar6@gmail.com.

Someone could be paying you by Sunday.

The billing is written and the tests pass. What is left is the part only you can build.

Get the kit

$29 today, $39 at v1.0.