$100 off for the first 50 customers. See pricing
Keelmint

The NestJS SaaS boilerplate for multi-tenant B2B apps

Keelmint's API is a NestJS 11 application on PostgreSQL and Prisma that already does the hard, boring parts of a B2B backend, and proves it with more than 700 end-to-end tests against a real database.

Authorization you declare, not re-implement

Every route states what it needs. A controller for an organization's data takes @Entity(), and each route the permission it checks; the permission catalog is generated from the code, so a role editor always lists what really exists.

Tenant data that fails closed

Mark a Prisma model // @tenant and a Prisma extension scopes every query on it to the active organization. Without one, the query is refused instead of returning everyone's rows. Records that belong to a person are // @owned: callers see their own, and admins see the people in their reach. The details are on the multi-tenancy page.

Billing per organization

Stripe subscriptions belong to an organization, not a person. Plans carry limits (members, units, or your own counters) and feature flags; a free plan and a no-card trial are built in, along with Checkout, the Customer Portal and idempotent webhooks. Enforcing a limit in your own code is one call inside your transaction:

await PlanLimits.assertWithin(tx, organizationId, 'projects');

Leave billing out of the product config and nothing is limited and no Stripe keys are needed.

Security details already handled

Background work without new infrastructure

pg-boss runs the job queue on the same PostgreSQL database. Every email goes through it, inserted in the request's transaction, so a request never waits on SMTP and an outage delays mail instead of failing requests. Live in-app notifications travel over server-sent events backed by Postgres LISTEN/NOTIFY: no Redis to run.

Built to be operated

Read the code's documentation first

The introduction lists every feature and what is not included, and the deploy guide shows production step by step. The client side is covered on the Angular page.

Get Keelmint

One-time payment. Read the docs before you buy: they are public.

Your customers are waiting for your features

Not for your role editor, your Stripe webhooks or your invitation emails. Those are done.

Get Keelmint