Agents ship faster — AGENTS.md, docs, Cursor skills
IsotopeKit
Ship SaaS from packages. Upgrade without merge hell.
Versioned @isotopekit/* for auth, orgs, billing, and agency — so your product stays yours when the kit moves.
Stable core. Packages you compose.
Pull what you need. Update with pnpm update.
Why this kit
Typical kits fork. IsotopeKit composes.
Auth, orgs, billing, and agent docs ship as versioned packages — so you stop re-merging a starter every time upstream moves.
Updates arrive as semver — not a fresh dump
Org roles & teams — bill the workspace
A stack your AI tools already know
Compose by tier — core · domain · modules · transport
BillingProvider
checkout · portal · webhooks · sync
Dodo ships built-in. Other providers via BillingProvider.
Swap billing providers without rewriting checkout
Plans & entitlements stay put when providers change
Thin app you own — your routes stay yours
How it works
Four steps from empty app to upgradable SaaS.
Scaffold once. Compose packages. Ship. Then update with semver — without re-absorbing a forked starter.
Scaffold a thin app
Your product owns routes, env, and wiring. Packages stay env-free and testable.
apps/starter is the shell. isotopekit.config.ts flips billing, admin, and agency. Product pages live in your app tree.
Technical
apps/starter · isotopekit.config.ts · lib/bootstrap/* · defineProductConfig
Compose what you need
Add versioned @isotopekit/* packages by tier — core, domain, modules, transport.
Ship only the surfaces you need. Admin and agency are optional modules, not a forced mega-starter.
Technical
pnpm add @isotopekit/auth @isotopekit/organization @isotopekit/billing-ops …
Ship production SaaS
Auth, multi-tenant orgs, plans, hosted checkout, and agent-readable docs — already wired.
Better Auth, org billing, entitlements, email, logging, and a portable Hono API. Your AI tools get AGENTS.md and _docs.
Technical
Better Auth · Drizzle · Hono · Pino · React Email · Cursor skills
Upgrade by semver
New kit releases bump packages. You don't re-merge a forked monorepo into your product.
Extension points stay stable across minor and patch. Your routes and wires stay yours while the platform improves underneath.
Technical
pnpm update @isotopekit/* · Changesets · publint · deps:check
Package index
18 packages. Four tiers. One thin app.
Compose the layers you need. Leave Pro surfaces off until you want them. Updates ship as versioned packages — not another starter dump to merge.
core
@isotopekit/config
Env presets (core/auth/billing) — app extends via @/env
core
@isotopekit/db
Drizzle schema, createDb({ connectionString }), queries
core
@isotopekit/types
Shared types, NavItem, IsotopekitConfig, defineProductConfig
core
@isotopekit/logger
Pino createLogger({ level, logFile }) with request context
core
@isotopekit/email
createEmailService + injectable transport for tests
core
@isotopekit/ui
shadcn primitives, shared components, progress hooks
domain
@isotopekit/identity
Auth options, branding, org-type, session services
domain
@isotopekit/auth
Better Auth factory, session guards, createAuthClientForApp
domain
@isotopekit/organization
Portable workspace services, actions, loaders
domain
@isotopekit/billing
Billing contracts, org-status, read-models, ports
domain
@isotopekit/plans
configurePlans / getDefaultPlanId, entitlements math
domain
@isotopekit/user
Account settings, sessions, profile actions
modules
@isotopekit/admin
Platform operator shell — layouts take app { name, userHome }
modules
@isotopekit/agency
Agency hub shell, client allocation, white-label
modules
@isotopekit/org-ui
Org switcher, branding chrome, plan usage, member quotas
modules
@isotopekit/pricing
Pricing page loaders, plan cards, checkout dialogs
modules
@isotopekit/billing-ops
configureBillingOps, checkout, webhooks, Dodo adapter
transport
@isotopekit/api
Hono v1 routes, portable HTTP transport
The stack your AI tools already know.
Wired in apps/starter today — not a wishlist. Highlighted tools carry the product; the rest keep the edges sharp.
Next.js composition root. Better Auth for identity. Postgres + Drizzle for data. Hono for portable API. Zod at the boundaries. TanStack Query on the client. shadcn you own.
Next.js 16
App Router composition root
Better Auth
Sessions, orgs, MFA, social
PostgreSQL
Source of truth for tenants
Drizzle ORM
Typed schema and migrations
Hono
Portable /api/v1 transport
Zod
Env and payload validation
TanStack Query
Client data and mutations
shadcn/ui
Owned UI primitives
Also in the box
- TypeScript · End-to-end types
- Tailwind CSS v4 · Utility styling
- Lucide · Icon set
- Pino · Structured logging
- React Email · Transactional templates
- Docker · Dev app + database
- Vercel Workflows · Background email jobs
- Biome · Lint and format
Access
Early access now. Team and Agency next.
No invented launch prices. Early access is invite-led. Team and Agency open when packaging is ready.
Early access
Contact
All @isotopekit/* packages, the starter composition root, and semver updates while we polish launch.
- All @isotopekit/* packages
- apps/starter composition root
- Agent docs + Cursor skills
- Semver package updates
Team
Soon
For startups shipping one product on the kit.
- Everything in Early access
- Priority support channel
- Upgrade guides per release
- Composition-root wiring help
Agency
Soon
White-label and multi-client workflows built in.
- Agency hub + client accounts
- Branding extension points
- Dedicated onboarding call
- Everything in Team
Waitlist
Want Team or Agency when it ships?
Join the list for those tiers. We’ll share pricing when it’s real — not before.
FAQ
Straight answers. Technical where it matters.
A Next.js SaaS kit built from versioned @isotopekit/* packages — auth, multi-tenant orgs, billing, entitlements, agency, and admin — wired into a thin app you own. Agent docs and Cursor skills ship with it.
Founders, indie hackers, agencies, and teams shipping commercial SaaS — especially if you build with Cursor, Claude Code, or other AI coding tools.
Organizations are billed, not users. Hosted checkout redirects to your payment provider, webhooks activate subscriptions, and you can swap providers via a portable BillingProvider adapter.
Yes. Agency hubs can provision client workspaces, distribute pool limits, and apply custom branding — without each client needing a separate public checkout.
A starter app with user dashboard, org settings, pricing and checkout, admin shell, email templates, progress UX, structured logging, and this marketing-site pattern in _site/.
Both, depending how you consume it. Internally it's a pnpm workspace of @isotopekit/* packages plus apps/starter. Product apps depend on published packages — kit updates arrive as semver bumps, not as re-merging a forked monorepo.
Use isotopekit.config.ts for navigation and feature flags. Put API extensions in isotopekit.api.ts. Keep the billing catalog in apps/starter/db/seed/catalog.ts. Wire secrets via apps/starter/lib/bootstrap/* (createDb, configureAuth, createEmailService, …). Keep product pages in your app/ tree.
Yes. Export extensions from isotopekit.api.ts and pass them to createV1App(). Add tables under apps/starter/db/schema, merge into appSchema in lib/bootstrap/db.ts, use getAppDb() for typed access, and createDrizzleConfig({ schema, out, tablesFilter }) for product migrations. Run pnpm db:migrate to apply kit then product folders.
Run pnpm update @isotopekit/* in your app. Minor and patch releases keep extension points and public APIs stable — your routes and composition-root wires stay put while platform packages improve underneath.
About 20 minutes per provider: create the OAuth app, add env keys, register it in apps/starter/lib/bootstrap/auth.ts via configureAuth({ socialProviders }), and login/signup/security UI picks it up from authProviders. Google is the reference pattern.
No. Domain services live in packages/* without Next imports. The Hono API can move to a standalone server when you outgrow the monolith — apps/api already proves the non-Next path.
~20 min
per provider — OAuth console, env, and bootstrap/auth.ts
Add a social login. Skip the OAuth spaghetti.
Better Auth owns the hard parts. You create the OAuth app, put secrets in env, and register the provider in the composition root. Login, signup, and account security pick it up from
authProviders.Create an OAuth app in the provider developer console
Add CLIENT_ID and CLIENT_SECRET to app env (extends kit presets)
Register credentials in apps/starter/lib/bootstrap/auth.ts via configureAuth({ socialProviders })
Login, signup, and security UI read authProviders automatically
Files you touch
UI routes stay put. You don’t edit a forked auth package.
packages/core/config/src/env/auth.tsOptional Zod env keys in the auth preset (if kit-wide)
apps/starter/env.tsOr product-only keys via createEnv extends
apps/starter/.envProvider client id + secret
apps/starter/lib/bootstrap/auth.tsAdd entry under socialProviders (+ trustedProviders)