Laravel
Artículo
Laravel

Pasos a seguir para convertir una app normal a SaaS

Por Admin ·


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_id en 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 subscriptions ligada 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 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

  1. Elegir enfoque multi-tenancy (single DB es más pragmático para empezar)

  2. Agregar tabla tenants + tenant_id a todas las tablas

  3. Instalar stancl/tenancy o spatie/laravel-multitenancy

  4. Integrar Stripe + Cashier con planes

  5. Construir flujo de registro/onboarding

  6. Agregar límites por plan

  7. Super admin global