Pasos a seguir para convertir una app normal a SaaS
1. Multi-tenancy (La parte más crítica)
Es el corazón del SaaS. Cada cliente ("tenant") debe ver solo sus datos. Hay dos enfoques:
Single database — todos los tenants en una BD, con un
tenant_iden cada tabla. Más simple, más barato.Database per tenant — cada tenant tiene su propia BD. Más aislado, más costoso. Para apps con datos muy sensibles.
En Laravel el paquete más popular es spatie/laravel-multitenancy o stancl/tenancy.
2. Planes y Suscripciones (Billing)
Definir planes (Free, Pro, Enterprise) con límites (ej: máx 5 proyectos, máx 10 usuarios).
Integrar Stripe con Laravel Cashier (
laravel/cashier) para manejar suscripciones, pagos recurrentes, trials, cancelaciones.Agregar una tabla
subscriptionsligada al tenant.
3. Onboarding / Registro de Tenants
Flujo de registro donde el usuario crea su organización/empresa (no solo una cuenta).
Opcionalmente subdominio propio:
miempresa.tuapp.com.Setup inicial automático: seed de datos básicos, roles, etc. para el nuevo tenant.
4. Límites por Plan (Feature Gates)
Controlar qué puede hacer cada tenant según su plan:
if ($tenant->onPlan('pro')) { ... }
if ($tenant->projectCount() >= $tenant->plan->max_projects) { abort(403); }
Laravel Cashier o un sistema de features propio.
5. Aislamiento de Archivos/Storage
Los archivos subidos deben estar separados por tenant.
En S3/local:
storage/{tenant_id}/photos/...
6. Admin Panel Global (Super Admin)
Una vista separada donde tú como dueño del SaaS ves todos los tenants, sus planes, uso, etc.
No confundir con el admin de cada tenant.
7. Infraestructura y Escalabilidad
Queues por tenant para jobs.
Cache separado por tenant.
Considerar Laravel Horizon para monitoreo de queues.
Orden recomendado para esta app específicamente
Elegir enfoque multi-tenancy (single DB es más pragmático para empezar)
Agregar tabla
tenants+tenant_ida todas las tablasInstalar
stancl/tenancyospatie/laravel-multitenancyIntegrar Stripe + Cashier con planes
Construir flujo de registro/onboarding
Agregar límites por plan
Super admin global