Tu próximo SaaS empieza
después del auth, las organizaciones y la plomería.

SaaS Maker es un starter open-source para productos SaaS multi-tenant. Un comando crea tres servicios — API, app y panel admin — con organizaciones, roles, invitaciones, sesiones, correos, tests, CI y deploys ya cableados. Tu energía va al producto, no a la plomería.

$ uvx saas-maker new my-saas

Apache-2.0 · Python 3.14 + React 19 · un comando crea y aprovisiona todo el stack

Una app generada con SaaS Maker: la lista del módulo de tours con búsqueda, filtro por estado y acciones por fila
Baterías incluidas

Todo lo que un SaaS necesita antes de su primera funcionalidad

Las decisiones aburridas ya están tomadas y probadas — multi-tenancy, auth, sesiones, correo, un panel admin aparte, un sistema de diseño. Tú agregas los módulos que hacen tuyo al producto.

Multi-tenant por organización

Cada tabla de tenant lleva organization_id y cada query filtra por él. Una fila de otra organización responde 404, nunca 403. Un usuario puede pertenecer a varias organizaciones y cambiar entre ellas.

Auth bien hecho

JWT de acceso + refresh tokens persistidos y rotados; logout, logout-all y cambio de contraseña los revocan. Verificación de correo, reset de contraseña y rate limit por IP en cada endpoint de auth.

Equipos, roles, invitaciones

owner > admin > member con una sola dependencia require_role. Invitaciones por token con expiración, enviadas por correo y aceptadas en la app.

Un panel admin aparte

Los admins de plataforma viven en su propia tabla y su propio realm de auth. UI gris neutra a propósito, para que nunca se confunda con el producto.

Un sistema de diseño, no un tema

DESIGN.md define los tokens, los componentes y el tono de los textos. Una sola variable --brand-hue rebrandea toda la app; shadcn/ui + Tailwind 4 por debajo.

Tests, CI y deploys

pytest contra migraciones reales, Vitest + Testing Library, GitHub Actions por repo (lint, typecheck, tests, audit, build de Docker) y configs de Kamal 2 para los tres servicios.

Tres servicios, tres repos

Cada servicio es su propio repo y se despliega solo

La API, la app de los clientes y el panel admin no comparten nada más que un contrato HTTP. Cada uno tiene su historial de git, su pipeline de CI, su Dockerfile y su config de Kamal — así escalan, salen y se revierten por separado.

Kamal 2 · una imagen por servicio

Capas, regla de aislamiento, endpoints y convenciones de tests están escritos en el CLAUDE.md de cada servicio — explora la plantilla.

Quickstart

De cero a un SaaS corriendo

1

Crea el proyecto

uvx saas-maker new my-saas

El wizard pregunta nombre, slogan, color de marca, Postgres y, opcionalmente, tus datos de deploy y SMTP — luego descarga la plantilla fijada, la brandea, escribe cada .env y archivo de secretos, instala dependencias, crea la base de datos y corre las migraciones.

2

Levanta los servicios

cd backend  && make dev
cd frontend && npm run dev
cd admin    && npm run dev

API en 8090, app en 5190, admin en 5191. Regístrate en la app para tener tu primera organización; crea el primer admin de plataforma con un script.

3

Despliega

cd backend  && kamal deploy
               kamal db-migrate
cd frontend && kamal deploy
cd admin    && kamal deploy

Cada servicio sale con Kamal 2 desde su propio config/deploy.yml — primero el backend, luego las SPAs (kamal setup solo una vez por servicio, para instalar Docker y el proxy). Postgres corre como accesorio de Kamal en el mismo servidor.

Prerequisitos: uv, Node 24 y un PostgreSQL local (o el docker-compose opcional con Postgres + Mailpit).

Generador

Un módulo por organización en un comando

Como rails generate, pero para un SaaS multi-tenant. Escribe modelo, migración, schemas, servicio, controlador y tests en el backend; tipos, hook, lista, formulario, diálogo de borrado, badge, página, ruta, entrada del sidebar y tests en el frontend — y los conecta en las anclas del generador.

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
El formulario generado: un input decimal para el precio, dos selects para las listas cerradas y el select de estado

El código generado calca el módulo de referencia projects. Para formas que no son un CRUD plano, la skill saas-maker-add-module tiene la lista manual. CLI en GitHub · PyPI.

Skills para tu agente

Enséñale las convenciones a tu agente de código

Las reglas de un proyecto SaaS Maker — aislamiento, capas, gates de calidad, tokens de diseño, orden de deploy — empaquetadas como Agent Skills instalables. Tu agente las lee on-demand y extiende el proyecto como corresponde, apuntando a la doc del propio proyecto en vez de adivinar.

$ npx skills add SaaS-Maker-Stack/skills --skill '*'

saas-maker-primer

Invócala primero. Los tres servicios, las reglas no negociables, cómo aplicar un DESIGN.md externo sin romper el sistema y qué skill cargar después.

saas-maker-cli

saas-maker new y generate module: el wizard, cada opción, el DSL de --fields/--status, qué escribe y qué correr justo después.

saas-maker-add-module

La lista para un recurso por organización a mano: backend, frontend, anclas, la regla de aislamiento y el test entre organizaciones.

saas-maker-deploy

Despliega y opera en un servidor con Kamal 2 — backend, frontend, admin en orden; migraciones, primer admin, logs, rollback.

Funciona con Claude Code, Cursor, Codex, Gemini CLI y más — el estándar abierto Agent Skills. Explora las skills.

Stack

Aburrido, moderno, tipado

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 Mismo stack que el frontend, auth aparte, paleta neutra
Calidad pytest contra migraciones reales · Vitest + Testing Library · GitHub Actions por repo
Ops Kamal 2 · Docker · Postgres como accesorio · Mailpit en dev