SaaS Maker is an open-source starter for multi-tenant SaaS products. One command scaffolds three services — API, app and admin panel — with organizations, roles, invitations, sessions, email flows, tests, CI and deploys already wired. Your energy goes into the product, not the plumbing.
uvx saas-maker new my-saas Apache-2.0 · Python 3.14 + React 19 · one command scaffolds and provisions the whole stack
The boring decisions are made and tested — multi-tenancy, auth, sessions, email, an admin realm, a design system. You add the modules that make your product yours.
Every tenant table carries organization_id and every query filters by it. A row from another organization answers 404, never 403. Users can belong to several organizations and switch.
JWT access + refresh tokens persisted and rotated; logout, logout-all and password changes revoke them. Email verification, password reset and per-IP rate limits on every auth endpoint.
owner > admin > member with a single require_role dependency. Token-based invitations with expiration, delivered by email, accepted in the app.
Platform admins live in their own table and auth realm. Neutral gray UI on purpose, so it never gets confused with the product.
DESIGN.md defines the tokens, components and copy tone. One --brand-hue variable re-brands the whole app; shadcn/ui + Tailwind 4 underneath.
pytest against real migrations, Vitest + Testing Library, GitHub Actions per repo (lint, typecheck, tests, audit, Docker build) and Kamal 2 configs for all three services.
The API, the tenant app and the admin panel share nothing but an HTTP contract. Each one has its own git history, CI pipeline, Dockerfile and Kamal config — so they scale, ship and roll back independently.
REST + JWT Kamal 2 · one image per service
Layers, isolation rule, endpoints and test conventions are written down in each service's CLAUDE.md — browse the template.
uvx saas-maker new my-saas The wizard asks for the name, slogan, brand color, Postgres, and optionally your deploy and SMTP details — then downloads the pinned template, brands it, writes every .env and secrets file, installs dependencies, creates the database and runs the migrations.
cd backend && make dev
cd frontend && npm run dev
cd admin && npm run dev API on 8090, app on 5190, admin on 5191. Register in the app to get your first organization; create the first platform admin with one script.
cd backend && kamal deploy
kamal db-migrate
cd frontend && kamal deploy
cd admin && kamal deploy Each service ships with Kamal 2 from its own config/deploy.yml — backend first, then the SPAs (kamal setup only once per service, to install Docker and the proxy). Postgres runs as a Kamal accessory on the same server.
Prerequisites: uv, Node 24 and a local PostgreSQL (or the optional docker-compose with Postgres + Mailpit).
Like rails generate, but for a multi-tenant SaaS. It writes the model, migration, schemas, service, controller and tests on the backend; types, hook, list, form, delete dialog, badge, page, route, sidebar entry and tests on the frontend — and wires them at the generator anchors.
uvx saas-maker generate module tour \
--label Tour --label-plural Tours --icon Map \
--fields "name:str:Nombre,base_price:money:Precio por persona,\
kind:choice(activity=Actividad|package=Paquete):Tipo,\
duration_days:int:Días,notes:text?:Notas" \
--status "active=Activo,draft=Borrador,archived=Archivado" backend/app/{models,schemas}/tour.py
backend/app/services/tour_service.py
backend/app/controllers/tours.py
backend/alembic/versions/…_add_tours_table.py
backend/tests/test_tours.py
frontend/src/types/api.ts · hooks/useTours.ts
frontend/src/components/features/tours/*.tsx
frontend/src/pages/ToursPage.tsx (+ .test.tsx)
+ main.py · models/__init__.py · router · Sidebar
The generated code mirrors the projects reference module. For shapes that aren't a plain CRUD, the saas-maker-add-module skill has the manual checklist. CLI on GitHub · PyPI.
The rules of a SaaS Maker project — isolation, layers, quality gates, design tokens, deploy order — packaged as installable Agent Skills. Your agent reads them on demand and extends the project the right way, pointing to the project's own docs instead of guessing.
npx skills add SaaS-Maker-Stack/skills --skill '*' saas-maker-primerInvoke first. The three services, the non-negotiables, how to apply an external DESIGN.md without breaking the system, and which skill to load next.
saas-maker-clisaas-maker new and generate module: the wizard, every option, the --fields/--status DSL, what gets written and what to run right after.
saas-maker-add-moduleThe checklist for a tenant-scoped resource by hand: backend, frontend, anchors, the isolation rule and the cross-org test.
saas-maker-deployShip and operate on a server with Kamal 2 — backend, frontend, admin in order; migrations, first admin, logs, rollback.
Works with Claude Code, Cursor, Codex, Gemini CLI and more — the open Agent Skills standard. Browse the skills.
| Backend | Python 3.14 · FastAPI · SQLModel · Alembic · PostgreSQL · PyJWT · uv · ruff |
|---|---|
| Frontend | React 19 · TypeScript 6 · Vite 8 · React Router 8 · TanStack Query · shadcn/ui · Tailwind CSS 4 |
| Admin | Same stack as the frontend, separate auth, neutral palette |
| Quality | pytest against real migrations · Vitest + Testing Library · GitHub Actions per repo |
| Ops | Kamal 2 · Docker · Postgres accessory · Mailpit in dev |