The Angular SaaS boilerplate for B2B apps
Most SaaS boilerplates are built for Next.js. Keelmint is built for teams that write Angular: a complete B2B product on Angular 22 and a NestJS API, with the screens companies expect before they sign already done.
If your team knows Angular, switching to React to use a starter kit costs more than it saves. Keelmint keeps you in the framework you already ship with, and covers the parts every business app needs before its first real feature: sign-up and login, organizations and their members, roles, billing, and the admin screens around them.
What the Angular client includes
- Modern Angular: standalone components and signals throughout, every page lazy-loaded, no NgModules.
- A design system: spartan/ui (Brain + Helm) on Tailwind 4, with one palette and typography file, light and dark themes applied before first paint, and lucide icons.
- Authentication screens: register with email verification, login, Google sign-in, password reset, two-factor (TOTP) enrolment with a QR code and recovery codes, and invitation acceptance.
- A dashboard layout: a sidebar that collapses to icons and becomes a drawer on phones, an organization switcher, a notification bell with live updates, and an account menu.
- Administration, by permission: members and invitations, units, roles, the audit log and the helpdesk. Each page shows to whoever holds its permission, scoped to their place in the organization.
- Lists that hold up: one data table with search, sort, paging and column filters kept in the URL, so links and the back button work.
- Translations: Transloco with English and Greek, a language switcher, and API error codes mapped to translated messages.
Your product next to the core
Keelmint is an Nx monorepo. The shared foundation lives in libs/core and does not change per product.
Your app is a product: its own API, clients and database, generated with one command.
pnpm nx g @core/plugin:product crm
The product's options sit in one file: its name, whether people can register, the default language, single or multi organization, unit types and billing plans.
export const productConfig = defineProductConfig({
name: 'Acme CRM',
registration: 'open',
defaultLanguage: 'en',
organizations: 'multi',
unitTypes: ['branch', 'department'],
});
Because your code lives next to core instead of inside it, you merge new Keelmint releases with git and keep your own screens.
A real API behind it
The client talks to a NestJS 11 API on PostgreSQL through typed contracts shared by both sides, so a change to a response shape breaks the build instead of a customer's screen. The API enforces everything the client hides: permissions per route, organization scoping on every query, plan limits. Read more on the NestJS side and on multi-tenancy.
Who it is for
- Angular teams starting a B2B product, where customers are companies with admins, branches and departments.
- Agencies that build Angular apps for clients and want the same solid base each time.
- Developers who want a codebase their AI assistant can follow: Keelmint ships a
CLAUDE.mdwith its conventions, lint rules that enforce module boundaries, and strict types.
If your users are all individuals, or you prefer React, a simpler or Next.js boilerplate will serve you better; see the comparison.
Try before you buy
The documentation is public at docs.keelmint.com: the introduction lists everything that is included and what is not, and the quickstart shows exactly what you will run.