All posts

SaaSy Land 2.0: The Next.js SaaS Boilerplate With a 100% Coverage Gate

One command scaffolds auth, billing, email, an admin and a marketing site, with 141 test files and a coverage gate already enforcing them. Here is exactly what ships, and how to check every number before you pay.

Piotr J. Borowiecki9 min readsaas, boilerplate, nextjs, release

The three months at the start of every SaaS are always the same three months. Authentication with the edge cases. Billing with the webhook that must not charge twice. Transactional email. An admin nobody outside the company will ever see. Translations, timezones, currencies. A marketing site.

None of it is your product. All of it has been solved.

SaaSy Land 2.0 is a production Next.js SaaS starter that ships those three months as source you own, with a test suite already covering them and a coverage gate that fails the build if anything drops below 100%. One command scaffolds it. One payment buys it. Nothing bills you per user afterwards.

This post is the specification: what is in the box, what changed in 2.0, what it costs, and the command that proves each claim.

The short version

  • Stack: Next.js 16 and React 19 on Bun, Elysia, Better Auth, Drizzle with Neon Postgres, Zod, Stripe, Resend, next-intl, Tailwind 4, shadcn/ui, Fumadocs, strict TypeScript.
  • Tests: 141 Vitest files, 5 Playwright suites in real Chromium and WebKit, 100% coverage enforced as a CI gate.
  • Reach: 54 locales, 156 currencies, 195 timezones, 248 countries, with a parity check that fails the build on a missing translation.
  • Cost: $249 once. $0 per monthly active user, forever.

Version 2.0 replaced Hono with Elysia, NextAuth with Better Auth and Content Collections with Fumadocs. Everything below describes what is in the repository today, and every number is generated by it.

What is SaaSy Land?

SaaSy Land is a commercial Next.js SaaS starter kit. A CLI asks five questions and writes only the modules you answered for: authentication on your own database, billing, transactional email, an admin console, internationalization and a visual page designer. It arrives with 141 test files and a coverage gate already enforcing them, so the code you receive is verified rather than merely present.

The code is MIT licensed and public, so you can read it before you decide. You pay once for the CLI, the templates and lifetime core updates, and there is no runtime licence check, no vendor callback and no subscription.

What is in the box

Ten modules. Seven are always written; three depend on how you answered the CLI.

ModuleWhat shipsAlways
AuthenticationBetter Auth with email and password, OAuth, verification, password reset, two-factor and admin impersonation, on your databaseYes
DatabaseDrizzle ORM against Neon Postgres, typed end to end, with generate, migrate, push and studio scripts wired to local, preview and productionYes
BillingCheckout, customer portal and webhooks, with products and pricing managed from the admin rather than hardcoded in the appIf asked
EmailReact Email templates through Resend, with the auth flows already sending real mail on day oneIf asked
Admin consoleThirteen sections built and styled: users, products, payments, analytics, blog, courses, pricing models, page designer, settings and moreYes
Interface56 components on Tailwind 4 and shadcn/ui, in your repository rather than behind a package boundary you cannot editYes
Internationalization54 locales, 195 timezones, 156 currencies, 248 countries, plus a parity check that fails the build on a missing keyYes
ContentAn MDX blog and a documentation site on Fumadocs, both editable from the admin, both indexed and localizedIf asked
Tests141 Vitest files, 5 Playwright suites, and 100% statement, branch, function and line coverage as a CI gateYes
ToolingBun, Elysia, strict TypeScript, Zod schemas, Redis rate limiting, and a formatter, linter and type check that all run before anything mergesYes

No add-ons. No paid modules. No second checkout.

Pick your stack, run one command

The CLI is not a template you download and then fight. It asks what you are building and writes exactly that, so the same tool scaffolds a single-tenant side project and a multi-tenant product with a merchant of record.

bunx saasyland@latest init my-app \
  --framework next \
  --tenancy multi \
  --billing stripe \
  --content mdx \
  --email resend

Five questions, with deliberately boring flags so the command survives being pasted into a script rather than into a prompt:

QuestionOptionsWhy it is a question
Frameworknext, tanstackBoth are supported; pick the one your team already knows
Tenancymulti, singleRetrofitting organizations later touches every query you have written
Billingstripe, polar, lemonsqueezy, --no-billingPolar and Lemon Squeezy are merchants of record and carry EU VAT and US sales tax for you. Stripe does not. A founder makes that call once
Contentmdx, --no-contentA blog and docs, or neither
Emailresend, --no-emailTransactional mail wired into the auth flows, or none

Change an answer and the command changes with it. Run it again for the next project: the answers change, the CLI and the lifetime updates do not.

The four things that are actually different

Plenty of starters ship auth and billing. These are the parts that are hard to copy, and each one is checkable.

A coverage gate, not a badge

100% of statements, branches, functions and lines, enforced on every pull request. Untested behaviour cannot merge, which is a different promise from tests existing somewhere in the repo.

$0 per monthly active user

Better Auth runs on your database. Your user table, your sessions, your margins. The bill at 50,000 users is the bill at 50.

A page designer in the box

Landing pages, pricing pages and a blog your marketing team edits visually inside your own admin, rendering your own components. No second subscription.

The engineer, on video

Two courses in the Masterclass tier. One walks the codebase you receive, subsystem by subsystem. The other builds the whole product again from an empty folder.

Why the coverage gate matters more now than it did at launch

When 2.0 shipped, the coverage number was a quality argument. It has since become a throughput argument, because a large share of the code being added to SaaS codebases is now written by an agent.

In the 2025 Stack Overflow Developer Survey, 84% of developers reported using or planning to use AI tools, while the most-cited frustration, named by 45%, was AI output that is "almost right, but not quite." A threshold that fails the build is the cheapest available answer to that: an agent cannot add behaviour without adding a test, and anything it breaks surfaces at the pull request rather than at a customer.

We wrote this up at length in why your repository decides agent output quality and in how to choose a stack for AI coding agents. The short version is that this repository scores 20 out of 20 on our own readiness scorecard, by construction rather than by effort.

What changed in 2.0

AreaBeforeNowWhy
API layerHonoElysia on BunTighter end-to-end types and instant HMR
AuthenticationNextAuthBetter AuthMulti-tenancy, organizations, RBAC, and no per-user pricing
ContentContent CollectionsFumadocsOne system for the blog and the docs, both localized
Localization8 languages54 localesPlus 195 timezones, 156 currencies and a build-failing parity check
InterfaceAssorted components56 shadcn/ui components in your repoEditable source rather than a package boundary
TestsPresent100%, enforced in CIThe gate, not the number
Marketing siteNoneA visual page designerShip the marketing, not only the app

All of it is in the repository today. Lifetime core updates are included, so the next round lands in your repository too.

What $249 actually buys

You are not buying code. You are buying back the calendar.

At $150 an hour, $249 is about three hours of your time. The work it replaces is not three hours. It is authentication with two-factor and OAuth, a typed data layer, billing with webhooks that survive a retry, an admin console, a 54-locale catalog, a marketing site your team can edit, and a test suite that proves all of it still works after the next change.

TierPriceForAdds
Codebase$249 one-timeThe founder who ships alone and reads every lineFull source, CLI, all templates, the complete test suite, lifetime core updates
Masterclass$399 one-timeThe engineer who wants the reasoning, not just the resultEverything above, plus the full video course, architecture deep-dives and deployment playbooks
Agency$899 one-timeThe shop that bills clients for what it buildsEverything above, plus an unlimited client licence, priority Discord and Figma files

One-time payment in USD. No subscription, no seat count, no monthly active user meter, no renewal date.

Check every claim before you pay

No testimonials, because there is nothing to verify in a quote. Every number on this page is generated by the repository you would be buying, and here is where to find it.

ClaimWhere to check it
100% test coveragecoverage/coverage-summary.json, generated by bun run test:coverage
Enforced, not reported.github/workflows/ci.yml, on every pull request and push to main
Real browsers, not jsdome2e/specs, 5 Playwright suites on Chromium and WebKit
54 locales, 156 currenciessrc/modules/_core/constants, checked by bun run check:i18n
Strict types, zero anytsc --strict, which blocks the merge on a single error
56 components, in your reposrc/presentation/components, editable source

Who this is not for

If you want something free to learn on, clone a template and enjoy it. If you would rather a hosted vendor run your authentication and bill you per monthly active user for the privilege, buy that instead.

This is for people who intend to still own their margins at fifty thousand users, and who would rather find out at the pull request than in production.

Start here

Read the documentation and the architecture section, then run the coverage report against the repository. When the numbers check out, see what it costs.

Frequently asked questions


Built by a professional developer to production standards. Questions go to hello@saasyland.com, and one person reads them.

Share