Better Auth
Organizations
Realtime Data
Dunning
Delivery Log
Usage Metering
Platform Admin
The Convex SaaS foundation you launch from, not build.
Identity, tenancy, billing, usage metering, tenant-scoped RAG, automations, notifications, admin, dunning, email delivery, broadcasts, and GDPR tooling—all in one repository. Professional includes the full foundation and every operations console listed above. Clone it, run npx convex dev, and ship your first feature today instead of your third month.
60 modules and 173 implementation recipes. Every module runs on a clean clone with no vendor keys.
One payment. Lifetime updates. Unlimited projects. Prices in AUD.
The same foundation runs UnitBuddy, a live Australian SaaS. unitbuddy.com.au
Two packs
One pack today. Enterprise on the way.
Professional combines the SaaS foundation and operations consoles that were previously sold separately. Enterprise adds SSO, SCIM and audit exports on top, and is coming soon.
Professional
The SaaS foundation and operations consoles, together in one pack.
$249
AUD once
In every pack
- Full source, yours to keep
- All 60 base modules
- 173 implementation recipes
- Lifetime updates, no renewal
- Unlimited projects, commercial use
Operations consoles
- 14 day dunning window
- Email delivery log
- Broadcasts with preview
- Stuck signup cohorts
- GDPR export and erasure
Enterprise · not included
- OIDC and SAML sign-on
- SCIM users and groups
- Append-only audit trail
- Delegated admin portal
Enterprise
Professional plus SSO, SCIM, audit exports, and delegated administration. Coming soon.
Coming soon
In every pack
- Full source, yours to keep
- All 60 base modules
- 173 implementation recipes
- Lifetime updates, no renewal
- Unlimited projects, commercial use
Operations consoles
- 14 day dunning window
- Email delivery log
- Broadcasts with preview
- Stuck signup cohorts
- GDPR export and erasure
Enterprise
- OIDC and SAML sign-on
- SCIM users and groups
- Append-only audit trail
- Delegated admin portal
One payment. Lifetime updates. Unlimited projects. All prices in AUD.
What you get
This is the app you clone.
Not a landing page with a login button bolted on. A working multi-tenant product with a dashboard, a control plane, and every module reachable from the nav.



What SaaSZero Professional gives you.
The SaaS foundation and operations consoles, together in one pack.
Identity and tenancy, settled
Better Auth is the single authority for accounts, sessions, organizations, members and invitations. Roles and permissions are wired through every query, not bolted on after.
Billing, metering and entitlements
Plans, usage meters and feature entitlements that route through one code path, so a plan change and a webhook can never disagree about what a customer is allowed to do.
AI with tenant-scoped RAG
Retrieval that respects the tenant boundary by construction, so one customer's documents cannot surface in another customer's answers.
Notifications and search
Both included, wired end to end. Nothing in this kit is held back for an upsell.
Dunning with a 14-day grace window
A failed payment opens a 14 day grace window with entitlements fully intact, retry emails on days 1, 3, 7 and 13, and a countdown banner that never threatens data loss. You can rehearse the whole fortnight with no payment provider connected.
A searchable email delivery log
Every message goes through one chokepoint that checks the suppression list, writes a ledger row, then sends. Filter by status, recipient or broadcast. Bounces and complaints suppress automatically.
Broadcasts with a brake on them
Preview a segment against the same code the real send uses, so the preview cannot lie. Retype the subject to confirm, because a modal is dismissable by reflex. Sends never starve your transactional mail.
The three ways signups die, named
Unverified after 3 days, no organization after 1 day, invitation unaccepted after 7. Each cohort has one action attached, bulk capped so one slip cannot mail everybody.
GDPR erasure with a build-time gate
Every schema table is classified as anonymize, erase or retain, and the test suite fails the build if a table is unclassified. A delete request waits 30 days before the hard delete runs, and the account keeps working the whole time.
Backup drills that catch schema drift
The drill samples every registered table and asserts that each field the registry names still exists. It finds the table somebody renamed six months ago, before an audit does.
Runs on a clean clone
No vendor keys required to see it work. Debug adapters stand in for the email and billing providers so you can read the whole system before you sign up for anything.
Full source, no licence check
There is no phone-home anywhere in the code. Use it for your own products and for client work, on as many projects as you like.
The trade
Twenty weeks of foundation. Or five minutes.
This is the project plan you do not have to run. Every sprint below is already merged, tested, and documented. Your roadmap starts at the last row.
Auth + tenancy
sessions · MFA · orgs · invites
Feature gates + admin
flags · overrides · audit · step-up
Workflows + files + email
durable jobs · R2 · resend
Billing + usage metering
webhooks · entitlements · quotas · overage
AI, agents & automations
tenant RAG · scheduled agents · zapier-lite
Your product
the part only you can write
Your first five minutes
Clone to a working control plane in five minutes.
No vendor keys, no webhook plumbing, no waiting on sandbox approvals. Debug adapters keep email, analytics, and errors runnable from the first commit.
- 0:00
git clone && npm installPull the repo. Env template included.
- 0:02
npx convex devBackend live. Schema pushed, types generated.
- 0:03
npm run devUI live. Sign in with email, no keys required.
- 0:05
you're the adminFirst sign-up becomes superAdmin. Full control plane.
Time to launch
The foundation is running. Now build your product.
You are running locally five minutes in. Nobody can honestly tell you how long your product takes to build after that, and any starter kit that promises a launch date is guessing. What we can tell you is exactly what is already done and exactly what is left. This is the whole remaining path.
- 01an afternoon
Make it yours
Name, tagline, support email, and limits live in one config file. Themes and shadcn/ui sources are yours to edit.
config/product.ts - 02minutes each
Delete what you do not need
Example apps and optional modules remove cleanly along documented paths, without leaving dead imports or orphaned tables behind.
docs/REMOVE_EXAMPLE_APPS.md - 03your call
Build your actual product
Copy the projects slice as your pattern for tenant-safe CRUD, then write the part only you can write. This is the real work, and no starter kit can shorten it.
- 04an hour each
Wire the real providers
Swap debug adapters for Resend, PostHog, Sentry, and your billing provider. Each one sits behind an interface that is already called.
npx convex env set --prod - 05same day
Deploy and verify
Six documented steps on the certified Vercel path, then test sign-up, org bootstrap, an admin denial, and tenant isolation with two accounts.
npm run verify && npx convex deploy
What "launch ready" actually means here
Vercel is the deployment path SaaSZero tests against. That means the critical paths, sign-up, organization bootstrap, admin denials, and provider actions, are tested against a real release, not assumed to work. The deployment guide also includes docs for Netlify, Cloudflare Workers, and Docker.
- Separate preview and production Convex deployments
- Fresh Better Auth secret over HTTPS
- Real email only after sender verification
- Source maps and analytics consent set by intention
- Tenant isolation tested with two orgs
- Backups, export access, and a restore drill
One command before you ship
Configuration diagnosis, strict typecheck, lint, unit and tenancy tests, then the production build. If it passes, the foundation has cleared its configuration, type, lint, test, and production-build checks.
npm run verify doctor · typecheck · lint · test · build
All 60 modules
60 modules, wired into the running app.
Nothing here is a placeholder or a TODO. Every module below is wired, tested, and reachable from the running app. Filter by the library it ships from.
Organization overview
Home dashboard
The signed-in home screen. Live activity, organization health and pending work for the current tenant, updating in realtime as teammates act.
Projects & tasks
Your team’s work
The reference product domain: projects and tasks scoped to an organization, with roles, plan limits, search, attachments and an audit history. Copy this pattern for your own resources.
Component labs
Prove integrations live
Executable documentation. One-click smoke tests prove feature access, workflows, analytics, errors and email against your own deployment, using debug adapters until real keys are set.
Settings & members
Account & team
Profile, organization switching, invitations, role changes, ownership transfer and sign-in security, in one settings surface every tenant gets.
Sign-in & identity
How people access your product
Every way into your product: email and password, MFA, passkeys, magic links, one-time codes, social login and multi-device sessions, all under Better Auth.
Organizations
Multi-tenant teams
The multi-tenant spine. Personal and team organizations with members, invitations and roles; every product row is keyed to its organization so tenants cannot see each other.
Two-factor (MFA)
TOTP + backup codes
Authenticator-app enrollment with a verification challenge after password sign-in, plus backup codes for when the phone is gone.
Passkeys
WebAuthn
Register, list and delete passkeys, then sign in with a fingerprint or face instead of a password. Standard WebAuthn, no extra service.
Magic link
Passwordless email
One-click sign-in links sent by email. Delivery runs through the same transactional email queue as the rest of the product, previewable locally.
Email OTP
Sign-in codes
Six-digit sign-in codes by email, for people who prefer a code to a link.
Phone OTP
SMS codes
SMS verification codes behind an environment flag, with codes logged locally so the flow is testable before an SMS provider exists.
Social OAuth
Google & GitHub
Google and GitHub sign-in that switch on when provider secrets are set, with the matching buttons appearing on the sign-in form.
Username
Optional handle
Optional public handles alongside email identity, for products where people are seen by name.
Anonymous
Guest sessions
Guest sessions for demos and trials, off by default, so someone can try the product before creating an account.
Multi-session
Device sessions
Several accounts or devices signed in at once, with a settings screen to review and revoke each session.
Last login method
Sign-in hint
Remembers how each person signed in last time and highlights that method on the form next visit.
Google One Tap
Env-gated
Google's returning-user prompt for one-tap sign-in, switched on by environment flag when you want it.
SIWE
Wallet sign-in
Sign-In with Ethereum for crypto-native products: wallet-based identity through the same session authority as every other method.
Generic OAuth
Custom IdP
Point identity at any custom OIDC or OAuth provider. The escape hatch for when a customer brings their own IdP.
BA Admin plugin
List · role · ban · impersonate
Operator tooling over accounts: list users, change roles, ban and unban, and impersonate for support. Separate from tenant-facing roles.
Firebase Auth bridge
Firebase identity · BA session
Keep Firebase as the identity source for phone, Google and email sign-in, and exchange its verified token for a session here. A migration path, not a rewrite.
Referral codes
Invite · attribute · reward
Invite codes with attribution: each user gets a unique code, sign-ups are credited to the referrer, and a reward hook fires.
Instagram OAuth
Login with Instagram
Instagram Business Login through the generic OAuth path, with the missing-email case handled and a helper for calling the Graph API afterwards.
Transactional email
Resend component
One chokepoint for every outbound email, with local previews before a provider is set, and Resend delivery, sandbox protection and templates after.
Analytics
PostHog + debug
A typed event catalog with redaction and consent state. Events log locally until a PostHog key is present.
Error reporting
Sentry + console
A global error boundary and intentional test exceptions. Errors go to the console until a Sentry DSN is set.
Durable workflows
Journal + replay jobs
Durable multi-step jobs that journal each step and replay after a deploy or crash. The pattern behind exports and every long-running task.
Private files
Convex · R2 · S3
Private file uploads with authorized URLs, attached to product records. Storage on Convex by default, with complete Cloudflare R2 and Amazon S3 paths.
Collaborative editor
ProseMirror OT sync
Real multiplayer rich-text editing with tenant-scoped access checks, server-side creation and plain-text search over document content.
Feature access
Flags & limits
The feature policy: plan defaults, kill switches, percentage rollouts, per-organization overrides and usage windows, every decision carrying a reason the UI can show.
Platform admin
Control plane
The platform control plane: users, organizations, an audit explorer and password step-up before any privileged change.
Just like SQL
SQL → Convex indexes
A translation guide from SQL habits to Convex indexes — joins, unions, distinct, group-by and filters — each with a live demo on real data.
Merging streams
Stream deep dive
A deep dive on composing query streams: merging, joining, filtering and paginating across indexes without loading whole tables.
TanStack Tables
Sort, search, filter
A realtime product table with column sorting, global search, filters and pagination. The pattern for every data grid you will build.
TanStack Forms
Validated product create
Schema-validated create and edit forms wired to server mutations, demonstrated on the same product catalog the tables render.
Rate Limiter
Token bucket · fixed window
Transactional rate limits at the function boundary: token buckets for bursts, fixed windows for quotas, per-user keys, already protecting the hot paths.
Migrations
Zero-downtime backfills
Resumable, batched backfills that rewrite live tables without downtime. The same machinery this codebase used for its own schema changes.
Action Retrier
Exponential backoff
Retries with exponential backoff for flaky third-party calls, ending in exactly one completion callback.
Workpool
Bounded background queues
Named background queues with parallelism caps, so a burst of jobs drains in order instead of stampeding a downstream API.
Architecture guide
Authz · ownership · tenancy
The written contract for the codebase: authentication versus authorization, ownership planes, tenancy rules and copy-paste examples for each.
Integrations guide
Provider matrix
The provider matrix: what runs with no keys, what each vendor adds, how to remove one, and the smoke test that proves it.
Polar billing
Merchant of record
Subscription billing with Polar as merchant of record behind a provider-agnostic adapter, webhook ingestion, and a bridge from plan to feature entitlements. A debug adapter simulates the whole path offline.
Stripe subscriptions
Checkout · Portal · Tax
The Stripe path: subscription checkout, the customer portal, signed webhooks and tax collection, feeding the same entitlement bridge as Polar.
Stripe Connect
Marketplaces & platforms
Marketplace and platform payments: onboarding sellers, routing charges between parties, and taking a platform fee.
Paddle billing
Merchant of record
Paddle as merchant of record: hosted checkout, subscriptions and VAT handled for you, mapped into the same feature entitlements.
Lemon Squeezy
Merchant of record
Lemon Squeezy as merchant of record for indie pricing: overlay or hosted checkout and subscription webhooks into the same entitlement bridge.
AI agent & chat
Convex Agent component
Persistent chat threads with real model replies and retrieval over the organization's own documents, with citations. A debug assistant answers offline until a key is set.
Usage metering
Per-user + aggregate
Per-user daily usage counters for chat, API calls and exports, with an aggregate path that keeps dashboards and plan limits fast at scale.
Presence
Who's online
Who is online, where, right now: heartbeat-driven presence with away detection, scoped to the organization.
Automations
Zapier-lite, native
When-this-then-that inside your product: record changes, inbound webhooks, cron ticks and meter thresholds trigger emails, signed webhooks, agent runs or tasks.
Background agents
AI that acts
Scheduled AI agents that act on the tenant's data — weekly summaries, task triage, anomaly watch — journaled so failed runs replay instead of vanish.
Usage-based billing
Meters → invoices
From meter to invoice: immutable usage events, hourly window close, a push to your billing provider, and quotas that warn at 80 percent and block at 100.
Notifications
Bell + digests
An in-app notification center with a live unread badge, per-user preferences, muted types, and daily or weekly email digests.
Global search
Cmd+K everything
One command palette over projects, tasks, documents, products and members, always scoped to the organization you are in.
saaszero CLI
add / remove modules
A written specification for module add and remove tooling: the removability contract, module manifests and marked regions, with notifications and search as the pilot scope.
API keys
Programmatic access
Customer-facing API tokens: generated once, stored only as digests, scoped to an organization and rate limited per key.
Outbound webhooks
HMAC + retries
Let customers subscribe to your events: signed deliveries, retries with backoff, and dead-letters that stay visible with their last status code.
Account security
Recovery & sessions
Password reset and recovery flows plus session review, with credential material living only in the identity layer, never in product tables.
Helpdesk
Example app · support queue
A complete support desk assembled from shipped modules: SLA timers, transactional replies, notifications, search and an audit trail. Three new tables, no new infrastructure.
CRM
Example app · deal pipeline
A complete deal pipeline assembled from shipped modules: a reactive board, bulk stage moves that fire automations, a live table and a computed forecast. Four new tables, no new infrastructure.
Authentication
Passwords, passkeys, MFA, OTP, OAuth, and session management—already wired
Better Auth handles credentials, sessions, MFA, and passkeys. SaaSZero adds the bridge that hands the verified session to your Convex functions, so an authenticated query works on the first run. Each method is its own page and component, so you can delete the ones you do not want.
Email and password
Sign up, sign in, reset, and verify, with a password step-up for sensitive writes.
Passkeys
WebAuthn registration, listing, and deletion. Sign in with face or fingerprint.
Two-factor (MFA)
TOTP authenticator enrollment plus backup codes, with a dedicated challenge route.
Magic link
One-click email sign-in that runs through the same transactional email queue.
Email OTP
Short-lived numeric sign-in codes delivered by email.
Phone OTP
SMS verification codes, gated behind an environment flag.
Social OAuth
Google and GitHub out of the box, plus a generic provider for any custom IdP.
Google One Tap
Returning users sign in from Google’s One Tap prompt when it is enabled.
Multi-session
Several accounts signed in at once, with per-device session management.
Anonymous sessions
Let people try the product as a guest, then upgrade the session on sign-up.
Username
Optional handles alongside email identity.
Last login method
Remember how someone signed in last time and hint it on the form.
Sign in with Ethereum
Wallet-based sign-in via SIWE for crypto-native products.
Admin plugin
List, promote, ban, and impersonate users from the platform admin.
Account security
Recovery flows, active session review, and connected account management.
Firebase bridge
Keep Firebase as the identity source and exchange it for a Better Auth session.
Referral codes
Invite, attribute, and reward. Built on top of the invitation flow.
Multi tenancy
Tenant isolation enforced in every public function
Better Auth owns organizations, members, and invitations. SaaSZero owns the resources keyed by organizationId. There are no duplicate tenancy tables to drift apart. Every public function validates its arguments, authenticates the caller, then authorizes a typed permission against the stored key, never the one the browser sent.
Organizations and teams
Personal and team organizations, with an active organization per session.
Roles and permissions
Owner, admin, and member out of the box, with typed permissions you can extend.
Invitations
Invite by email, accept through a dedicated route, and manage pending invites.
Audit trail
Every panel mutation is recorded and searchable behind a password step-up.
API keys
Scoped programmatic access for your customers' own integrations.
Outbound webhooks
HMAC-signed delivery with retries, so customers can react to your events.
Tenancy test suite
convex-test cases that assert cross-organization reads and writes are refused.
Platform admin
Overview, user projection, audit explorer, and integration labs.
Feature overrides
Flip a capability for one organization without shipping a deploy.
Convex backend
Queues, retries, rate limits, migrations, and workflows—already wired
Queues, retries, rate limits, migrations, and durable workflows are the parts of a SaaS that take months to get right and never make the demo. SaaSZero wires the official Convex components for all of them and adds the policy and UI on top.
Durable workflows
Journalled, replayable multi-step jobs that survive a deploy. Includes a working export run.
Workpool
Bounded background queues so a burst of work cannot starve your interactive traffic.
Action retrier
Exponential backoff for flaky third-party calls, without hand-rolled retry loops.
Rate limiter
Token bucket and fixed window limits applied at the function boundary.
Migrations
Stateful, resumable backfills with progress tracking and zero downtime.
Aggregates
Maintained counts and rollups that stay correct without scanning the table.
Private file storage
Convex File Storage with authenticated URL generation. An R2 recipe is included.
Collaborative documents
ProseMirror operational-transform sync for real multiplayer editing.
Presence
Who is online and where, without a second realtime service.
Global search
A command palette wired to indexed search across your resources.
Notifications
In-app bell feed plus scheduled digest emails.
Feature flags
Product defaults, rollout percentages, and per-organization overrides. Decisions carry a reason.
Money
Billing, however you sell
Polar ships as a Convex component with entitlements wired into the feature policy. Stripe, Paddle, and Lemon Squeezy each get a full implementation recipe. Usage meters roll up into invoices, so metered pricing is not a rewrite.
Entitlements
A billing snapshot feeds the same feature policy that gates the rest of the product.
Usage metering
Per-user and aggregate meters that count once, even when an action retries.
Usage-based billing
Roll meters into billable periods and hand them to your provider.
Debug default
A clean clone returns a debug entitlement snapshot, so nothing breaks without keys.
Working examples
Read the pattern, then copy it
Every module page pairs a live demo with the implementation recipe behind it. These are not screenshots of something that used to work. Sign up, run the seed, and click through all of them.
Projects and tasks
The reference realtime domain. Statuses, priorities, search, limits, and rate limits.
AI agent and chat
Streaming chat on the Convex Agent component, with retrieval over your own documents.
Background agents
AI that proposes an action, then applies it once you approve. Token budgeted and shape pinned.
Automations
A native Zapier-lite. Trigger on your own mutations and chain steps.
TanStack tables
A twelve-row product catalog with sorting, search, and server-side filtering.
TanStack forms
Validated create and edit flows wired to Convex mutations.
Collaborative docs
Multiplayer ProseMirror editing with presence, seeded with sample documents.
Component labs
Prove each integration live, with a definition of done for every provider.
Module removability
Documented removal paths and a removability contract, so deleting what you do not need is safe.
173 implementation recipes
Step-by-step guides for seat limits, dunning, hardened webhooks, retries, and more
A recipe is not a doc page. Each one names an outcome, the hard part it handles, the files it touches, and the ordered steps to get there. When you hit seat limits, dunning, SSRF hardening on outbound webhooks, or exactly-once external effects, there is already a recipe for it.
Billing & revenue
Subscriptions, metered usage, tax, dunning and payouts across Stripe, Paddle, Lemon Squeezy and Polar.
Jobs & reliability
Durable workflows, background pools, retries, rate limits, webhooks and API keys.
Auth & tenancy
Sign-in methods, multi-tenant organizations, seats, roles and account recovery on Better Auth.
Realtime & collaboration
Live presence, collaborative documents, and the reactive dashboards Convex makes cheap.
Email & notifications
Transactional email, in-app notification feeds, digests and delivery you can verify.
Files & data
File storage on Convex, Cloudflare R2 or S3, plus query, table and form patterns.
Admin & tooling
The control plane, the CLI that adds and removes modules, and the architecture docs.
AI & agents
Streaming assistants, scheduled agents and retrieval scoped strictly to one tenant.
Recipes are versioned with the code, not written once and left to rot. The test suite refuses to build if a recipe ships without its own reviewed copy.
Why Convex
The backend that deletes your sync layer.
Most starter kits hand you a database and leave the hard half to you: cache invalidation, socket plumbing, API routes that drift from their types. Convex removes that category of work rather than organising it.
Queries are subscriptions
Components re-render when the data changes. No polling, no sockets, no manual cache invalidation.
Functions are the API
Write TypeScript handlers. Arguments are validated at runtime and the types flow to the client. No REST routes, no OpenAPI drift.
Components are sub-backends
Auth, rate limiting, workflows, and email are isolated packages with their own tables. Compose them rather than rebuild them.
ACID without the ORM
Transactional mutations with document-level isolation. Indexes are explicit and the schema is enforced at rest.
The stack
Convex and Better Auth at the core; email, analytics, errors, files, and billing behind adapters
A clean clone runs with no vendor keys at all. Without vendor keys, email renders locally, analytics stays in a redacted debug log, and errors go to the console. Set a key and the production adapter takes over behind the same interface.
Optional providers
How SaaSZero enforces authorization, retries failed work, keeps realtime in Convex, and isolates provider integrations.
Secure by Default
Every public Convex function validates its arguments, authenticates the caller, then authorizes a typed permission against the stored organizationId. UI checks are treated as UX, never as authorization.
Survives Failure
Third parties time out and deploys land mid-job. Workflows journal each step and replay, retries back off, pools stay bounded, and effects fire exactly once. Timed-out calls and mid-job deploys do not strand work or duplicate effects.
Realtime, No Second Service
Live queries, presence, and collaborative editing come from Convex itself. There is no socket tier to run, no Redis to babysit, and no cache to invalidate by hand.
Swappable at the Edges
Email, analytics, errors, files, and billing each sit behind one interface. A clean clone runs with no vendor keys, and the CLI removes a whole module without leaving dead imports.
Pricing
One payment. The whole codebase.
No seats, no subscription, no usage tier. You buy the source and it stays yours.
$249AUD
- Full source, yours to edit and own
- All 60 modules, nothing locked
- 173 implementation recipes
- Private GitHub repository access
- Lifetime updates, no renewal
- Unlimited projects, commercial use
- Client and freelance work allowed
- Support on the template codebase
Pay once. You are invited to the private repository straight after checkout.
Not sure yet? Ask first.
Because you get the complete source on purchase, there are no refunds. So it is worth being certain before you buy, not after. Email me for a product walkthrough or architecture questions; I will also tell you if SaaSZero is a poor fit for your project.
sales@unitbuddy.com.auLicence, in one line
Use it for your own products and for client work, on as many projects as you like. You may not resell it or publish the source.
Read the licenceQuestions before you buy?
For anything not covered below, email .
Start with the SaaS foundation and operations layer already written.
Clone the repo, build the product logic only you can write, and launch with auth, tenancy, billing, admin, dunning, email delivery, and GDPR tooling already in place.
One payment. Lifetime updates. Unlimited projects.