Skip to content
This store runs on the kit it sells

Ship a paid product on Dodo this weekend.

POST /api/webhooks/dodo

signature

401 if forged

event id

200 if replayed

normalize

one shape

subscription state

incompletecheckout unfinished
hasAccess()
activepaying
past_duecard retrying
cancelledstopped
expiredterm over
past_due keeps access on while Dodo retries the card. Get that one row wrong and you either lock out people who are paying you or give the product away.

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 against Neon. 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 Claude Code skill at .claude/skills/kit-design/, encoding the tokens, type scale and motion this kit uses, so what your agent 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 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 Neon, React Email on Resend, MDX blog and docs, SEO and OG images
  • AGENTS.md recipes and a bundled Claude Code design skill
  • 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

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

Two more kits are coming.

Each one starts from the kit above and adds the next layer. Leave an address and you will hear once, when either is ready to buy.

Startup Kit

Not built yet

$69

Planned launch price, $99 after.

The Web Kit plus the panels you build right after your first sale.

  • Everything in the Web Kit
  • Admin panel with data tables and user management
  • Backend API patterns extracted from a production NestJS service

Founder Kit

Not built yet

$129

Planned launch price, $179 after.

The Startup Kit plus a mobile app on the same auth and billing.

  • Everything in the Startup Kit
  • Expo app for iOS and Android
  • One account, one subscription, three surfaces

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. Dodo emails your receipt the moment the charge clears; reply to it, or email abhimanpanwar6@gmail.com, with your GitHub username and the invite goes out within 24 hours. That last step is a person reading email rather than an automation, which is why the promise is a day and not a minute. Then it is 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 Neon Postgres, 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.