| name | SaaS App Structure |
| description | ARQUITECTAR aplicaciones SaaS multiinquilino con aislamiento de datos, RBAC, abstracción de facturación y middleware de autenticación. Prevenir fugas de datos entre inquilinos, rutas desprotegidas y lógica de facturación dispersa en la UI. Activadores: "build (a|an) saas", "create (a|an) multi-tenant app", "architect (the) saas backend", "set up subscriptions".
|
| category | full-stack |
| version | 3.0.0 |
| last_updated | 2026-06-28T00:00:00.000Z |
| stacks | ["Next.js 16 (App Router)","React 19.2","Node.js","PostgreSQL 17","Prisma 7 / Drizzle 0.45+","Better Auth / Clerk"] |
| related_skills | ["database-schema-design","backend-validation-layers","production-api-error-handling","api-route-structure","dashboard-information-architecture"] |
| lang | es |
| direction | ltr |
| source_version | 3.0.0 |
| translated_at | 2026-06-29T00:00:00.000Z |
Estructura de Aplicación SaaS
IDENTIFICAR: Cuándo activarse
Activar al construir cualquier aplicación con:
- Cuentas de usuario y autenticación
- Suscripciones de pago o facturación
- Organizaciones/equipos/espacios de trabajo (multitenencia)
- Control de acceso basado en roles
DECIDIR: Modelo de Tenencia
SI cada usuario es su propio inquilino →
MODELO B2C: Usuario = Inquilino
No se necesita tabla de organización
user_id limita todas las consultas
SI organizaciones/equipos/espacios de trabajo →
MODELO B2B: Organización = Inquilino
REQUIERE: tablas users + organizations + organization_members
org_id limita todas las consultas
EJECUTAR: Los Cuatro Pilares
Construir en este ORDEN para evitar retrabajo:
Pilar 1: Autenticación (Construir Primero)
| Escenario | Solución | Configuración |
|---|
| Autogestionado, control total | Better Auth | npx better-auth@latest init |
| Proyecto Auth.js existente | Auth.js v5 | npm install next-auth@5 |
| Auth gestionada, configuración rápida | Clerk | npm install @clerk/nextjs |
| Empresarial B2B (SSO, SCIM) | WorkOS | npm install @workos-inc/node |
Pilar 2: Multitenencia (Construir Segundo)
TABLAS PRINCIPALES (modelo B2B):
users (id UUID PK, email VARCHAR(255) UNIQUE NOT NULL, name VARCHAR(100) NOT NULL, ...)
organizations (id UUID PK, name VARCHAR(100) NOT NULL, slug VARCHAR(50) UNIQUE NOT NULL, ...)
organization_members (id UUID PK, org_id UUID FK, user_id UUID FK, role ENUM('owner','admin','member'), UNIQUE(org_id, user_id))