payments · tutorial · webhooks
Next.js + Dodo $199 Once: Beat $15/mo Forever
One-time lifetime billing with global coverage: Dodo behind the same provider interface, same dedupe, same paywall. Template inside.

Subscriptions punish weekend projects
$15 a month sounds harmless until the spreadsheet.
200 customers at $15 is $3k a month.
It is also $3k of monthly churn risk.
Dunning emails.
Failed-card retries.
Cancellation flows to maintain.
For a solo founder, subscription machinery is a second product wearing the first one's clothes.
Lifetime deals invert it.
Charge once.
Grant forever.
Collect no recurring obligations.
Cash upfront funds the build. Support load tracks users, not billing edge cases. The model fits templates, developer kits and tools: products sold, not rented.
Subscription billing or lifetime billing
| Concern | $15 a month | $199 once |
|---|---|---|
| Revenue from 200 users | $3k a month, churning | About $40k in cash, kept |
| Billing machinery | Dunning, retries, proration | One charge, one grant |
| Failed-payment support | Weekly card-chasing | Near zero |
| Churn math | A monthly existential check | None, sold is sold |
| Raising prices | A grandfathering maze | A v2 at a new price |
Lifetime wins for solo sellers. Three reasons.
Support scales with users either way. A lifetime customer emails as often as a subscriber, but never about billing. Half of subscription support is failed cards and plan confusion. Lifetime deletes the category.
Cash timing favors builders. $40k upfront buys the year of runway that $3k a month promises in month thirteen. Solo founders die of cash timing, not totals.
Global cards just work. Dodo's checkout covers international cards and regional methods. Verify current coverage for your buyers' countries.
Subscriptions win for ongoing-cost products.
Per-seat tools.
API meters.
Teams.
Kits are sold artifacts.
Price them like artifacts.
What to do
Define the sale as data, never as code.
Create your product in the Dodo dashboard. Add it to the product list in your BoringPush dashboard.
The price lives in one product row.
Checkout and the webhook both read it.
It never lives in client code and never in what a browser sends.
Change the price by editing data.
Point the webhook at your domain.
In Dodo's dashboard, set the webhook address to your site. Paste the signing secret into your production settings. Every incoming event is verified before anything happens.
The same payment arriving twice grants access once, because each payment is recorded under a unique reference.
Then let access grant itself.
When a payment succeeds, the buyer's account switches to paid access and the order is recorded. The buyer lands back on your site and sees their order.
No manual license keys. No "within 24 hours". Lifetime buyers convert on immediacy.
The Dodo drill
| Check | Action | Pass looks like |
|---|---|---|
| Price truth | Change the product row, reload checkout | The new price shows, no code change |
| Once means once | Replay a payment webhook three times | One order, access granted once |
| Global card | Test-mode regional methods | They succeed through the same flow |
| Refund path | Send a test refund | Access is removed, order marked |
| Speed | Click to access, timed | Access arrives within moments |
Rehearse refunds hardest. Lifetime goodwill dies fastest on slow refunds, and refund paths rot silently because success means never using them.
Test in test mode every quarter.
The cost
Lifetime pricing caps the value of each customer. No expansion revenue. No price lever on existing buyers.
Treat that as freedom. A v2 can sell separately. Happy owners become referrers, not annuities.
Know this first
Lifetime pricing caps the value of each customer. No expansion revenue. No price lever on existing buyers.
Dodo supports recurring billing too. Check its current terms.
Why BoringPush is the way to do this
Sell once. Be paid worldwide.
BoringPush includes Dodo behind the same interface as Stripe.
Define the sale.
Point the webhook.
Access grants itself.
Each payment records once, even if it arrives twice.
FAQ
Is Dodo right for subscriptions too?
Dodo supports recurring billing, but check its current plan details before you rely on it. The kit's Dodo path is tuned for the one-time sale. If subscriptions dominate your catalog, start with Stripe's recurring flow and keep Dodo for a lifetime tier.
How do lifetime customers get support?
Through the same inbox as everyone else. The order links to the user, so support can look up either. Write your scope in plain words, such as which updates and what kind of support are included, so "lifetime" does not become "forever, everything".
What stops buyers sharing one lifetime purchase across a team?
Access is bound to the purchasing account, so sharing means sharing a login. For team-sized abuse, a per-seat upgrade price turns sharers into buyers instead of punishing them.
Can I raise the lifetime price later?
Yes. Early buyers keep their deal and new buyers see the new price. Announce it a week ahead and honor the old price on carts already open.
How does Dodo compare to Gumroad or LemonSqueezy for lifetime deals?
Gumroad leans marketplace, LemonSqueezy leans merchant of record plus subscriptions, and Dodo leans global one-time checkout with regional depth. Compare fees, payout speed and buyer coverage on their current pricing pages, because these change.
What if Dodo changes its fees after I commit?
The shared interface is your hedge. Switching providers is a setting change plus remapping your product and webhook, and no feature code changes. Fee changes become business mail, not a migration project.
Keep reading
- Next.js Stripe Trap: The Retry That Double-Charges You — the dedupe law this rail shares
- Next.js LemonSqueezy: Delete VAT Homework in 1 Switch — the sibling MoR rail on the same interface
- Take Money 3 Ways, Write Checkout Once — the architecture underneath all three
+ all the boring stuff (analytics, auth, SQLite ↔ Supabase, full marketplace, webhooks)
Command from your phone.
Built so autonomous AI agents build what you want without breaking what's already paying you.
- Built-in analytics — cookie-free mode, $0 forever, no PostHog bill
- SQLite ↔ Supabase: one setting, same field names
- Full digital marketplace & feedback boards included
- 3 payment rails: Stripe, LemonSqueezy & Dodo Payments
- Agent fences: lint gate, read-only data access, auto-rollback
- Ship from your phone via SSH & WireGuard/Tailscale in under a minute
$199
Get BoringPushOne-time payment · Lifetime updates · Unlimited projects.
Keep reading


