Boilerplate SaaS multi-tenant para Laravel con aislamiento fuerte por tenant y arquitectura modular por contextos.
Este repositorio implementa un monolito modular con separación estricta entre:
- Central (landlord): administración SaaS global.
- Tenant: aplicación aislada por cliente.
- Shared: infraestructura y contratos compartidos.
El objetivo es evitar fugas de datos por diseño: base de datos, cache, storage y jobs aislados por tenant desde el inicio.
- Implementado: autenticación admin, CRUD de tenants/domains, planes y suscripciones.
- Implementado: onboarding, lifecycle de suscripción, límites de uso, health dashboard.
- Implementado: impersonation, backup/restore por tenant, data export, webhooks, auditoría.
- Implementado: auth tenant (guard separado).
- Implementado: dashboard y perfil (update de datos + contraseña).
- Implementado: rutas tenant modulares por provider.
- Implementado: modelos tenant sin connection hardcodeada.
- Implementado: storage tenant-aware en storage/app/tenants/{uuid}/.
- Implementado: cache tenant-aware con CacheTenancyBootstrapper.
- Implementado: jobs tenant-aware con restore de contexto y guardrail de middleware.
Estado fuente: docs/technical/features.md.
- PHP 8.3+
- Laravel 13
- Livewire 4 + Flux
- Stancl Tenancy 3.x
- PostgreSQL 16 (target)
- Redis (target para cache/colas en producción)
- Horizon, Pulse, Pennant
- Pest + Larastan + Pint
Dependencias: composer.json.
app/
Central/
<Modulo>/
Tenant/
<Modulo>/
Shared/
DTOs/
Contracts/
Infrastructure/
Support/
Módulos tenant actuales:
- AuthenticationModule
- WorkspaceModule
- SelfServiceBillingModule
- FeatureFlagsModule
- ImpersonationModule
Módulos central actuales:
- AuthenticationModule
- TenantProvisioningModule
- BillingModule
- ActivityLogModule
- AdminAuthorizationModule
- SystemHealthModule
- NotificationModule
- PartnerWebhookModule
- DataExportModule
- AffiliateModule
- PHP 8.3+
- Composer 2+
- Node 18+
- PostgreSQL
composer setupEl script realiza:
- instalación de dependencias PHP y JS,
- creación de .env si no existe,
- key generate,
- migrate,
- build frontend.
composer devLevanta en paralelo:
- servidor Laravel,
- listener de queue,
- logs con pail,
- Vite en modo dev.
composer test
composer lint
composer lint:check- Central: rutas fuera de tenancy middleware.
- Tenant: resolución por dominio con InitializeTenancyByDomain + PreventAccessFromCentralDomains.
- Database: conexión tenant dinámica sin hardcode en modelos tenant.
- Storage: root por tenant en storage/app/tenants/{uuid}/.
- Cache: tags por tenant mediante CacheTenancyBootstrapper.
- Queue jobs: payload con tenant_id y restore automático de contexto en worker.
- docs/project/00_Plan.md
- docs/project/01_Dependencias_Requeridas.md
- docs/project/02_Caracteristicas_SaaS_Starter_Kit.md
- docs/project/03_VISION.md
- docs/project/04_ARCHITECTURE.md
- docs/project/05_TENANCY.md
- docs/project/06_PROVISIONING.md
- docs/project/07_BILLING.md
- docs/project/08_PERMISSIONS.md
- docs/project/09_INVITATIONS.md
- docs/project/09_ROADMAP.md
- La cola database está configurada sobre conexión central y usa tenant_id en payload para jobs tenant-aware.
- En producción se recomienda Redis para cache y colas.
- Los tests de aislamiento tenant son parte del criterio de calidad del template.