bachisoft / thunder-pack
Laravel multi-tenant SaaS package with subscription management, flexible limits system, and WhatsApp integration
Installs: 29
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Language:Blade
pkg:composer/bachisoft/thunder-pack
Requires
- php: ^8.2
- laravel/framework: ^12.0
- livewire/livewire: ^3.6.4
Requires (Dev)
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.0
README
Paquete completo de Laravel para construir aplicaciones SaaS multi-tenant con gesti贸n de suscripciones, sistema flexible de l铆mites, integraci贸n con WhatsApp, y panel de Super Admin.
馃殌 Caracter铆sticas
Multi-Tenancy
- Tenancy basado en sesi贸n: Sin bases de datos separadas por tenant
- Trait BelongsToTenant: Aislamiento autom谩tico de datos por tenant
- Selector de tenant: Interfaz para cambiar entre tenants
- Bypass de super admin: Los administradores pueden acceder a todos los tenants
Sistema de Suscripciones
- Gesti贸n completa del ciclo de vida de suscripciones
- Activaci贸n manual y renovaci贸n
- Seguimiento de eventos de pago
- Notificaciones por email y WhatsApp
- Alertas de expiraci贸n (7 d铆as antes)
- Estados: activa, prueba, vencida, cancelada
Sistema Flexible de L铆mites
- L铆mites num茅ricos:
max_clients,max_projects,api_calls_per_month - Feature flags booleanos:
custom_branding,api_access - Habilitaci贸n de m贸dulos:
whatsapp,reports,analytics - Rate limiting: Por d铆a, por mes
- Overrides personalizados: Para clientes VIP
- Tracking de uso: Historial completo de consumo
Directivas Blade
@hasFeature('custom_branding') <!-- Mostrar contenido personalizado --> @endhasFeature @canUseResource('max_clients', 5) <!-- Permitir crear 5 clientes m谩s --> @endcanUseResource @hasAnyFeature(['api_access', 'webhooks']) <!-- Tiene al menos una caracter铆stica --> @endhasAnyFeature
Integraci贸n con WhatsApp
- API Evolution integrada
- M煤ltiples tel茅fonos por tenant
- Notificaciones autom谩ticas
- Sistema de colas con reintentos (3 intentos: 1m, 3m, 10m)
- Registro de mensajes y estad铆sticas
- Comando de prueba incluido
Panel de Super Admin
- Dashboard con m茅tricas clave
- Gesti贸n completa de tenants (crear, editar, ver, l铆mites personalizados)
- Gesti贸n completa de usuarios (crear, editar, asignar tenants, cambiar roles)
- Gesti贸n de suscripciones con renovaci贸n r谩pida
- Gesti贸n de planes con l铆mites configurables
- Configuraci贸n de WhatsApp por tenant
- Historial de uso y eventos
- Interfaz de tablas compactas y minimalistas
Gesti贸n de Equipos
- Invitaciones por email
- Control de acceso basado en roles
- L铆mites de staff por plan
- Notificaciones autom谩ticas
馃搵 Requisitos
- PHP 8.2 o superior
- Laravel 12.0 o superior
- Livewire 3.6.4 o superior
馃摝 Instalaci贸n
1. Instalar v铆a Composer
composer require bachisoft/thunder-pack
2. Ejecutar el comando de instalaci贸n
php artisan thunder-pack:install
Este comando:
- Publica las migraciones
- Publica la configuraci贸n
- Publica las vistas (opcional)
- Ejecuta las migraciones
- Seed los planes por defecto
- Crea el primer super admin
3. Configurar el modelo User
Agrega el trait HasTenants a tu modelo User:
use ThunderPack\Traits\HasTenants; class User extends Authenticatable { use HasTenants; // ... resto del modelo }
4. Registrar middleware (Laravel 12)
El paquete registra autom谩ticamente los middleware con aliases:
tenant- Validaci贸n de acceso al tenantsubscription- Verificaci贸n de suscripci贸n activasuperadmin- Restricci贸n a super adminstenant.permission- Control de permisos dentro del tenant
Apl铆calos en tus rutas:
Route::middleware(['auth', 'tenant', 'subscription'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']); }); Route::middleware(['auth', 'superadmin'])->prefix('sa')->group(function () { Route::get('/dashboard', [SuperAdminController::class, 'index']); });
5. Configurar WhatsApp (Opcional)
Agrega las credenciales en tu .env:
WHATSAPP_EVOLUTION_ENABLED=true WHATSAPP_EVOLUTION_API_URL=https://api.evolutionapi.com WHATSAPP_EVOLUTION_API_KEY=tu_api_key_aqui WHATSAPP_EVOLUTION_DEFAULT_INSTANCE=default
馃敡 Configuraci贸n
Publica el archivo de configuraci贸n:
php artisan vendor:publish --tag=thunder-pack-config
El archivo config/thunder-pack.php permite personalizar:
return [ 'table_prefix' => '', // Prefijo para tablas 'models' => [ 'tenant' => \ThunderPack\Models\Tenant::class, 'plan' => \ThunderPack\Models\Plan::class, // Sobrescribe modelos seg煤n necesites ], 'routes' => [ 'enabled' => true, 'prefix' => '', 'middleware' => ['web', 'auth'], 'super_admin_prefix' => 'sa', ], 'features' => [ 'whatsapp' => true, 'team_invitations' => true, 'super_admin_panel' => true, ], 'cache' => [ 'ttl' => [ 'limits' => 300, // 5 minutos 'features' => 600, // 10 minutos ], ], ];
馃摉 Uso
Verificar caracter铆sticas
use ThunderPack\Facades\FeatureGate; // Verificar si el tenant tiene una caracter铆stica if (FeatureGate::has('api_access')) { // Permitir acceso a la API } // Verificar l铆mite num茅rico if (FeatureGate::can('max_clients', 10)) { // Puede crear 10 clientes m谩s } // Obtener valor de l铆mite $maxProjects = FeatureGate::get('max_projects', 5); // 5 es el valor por defecto
Registrar uso de recursos
use ThunderPack\Facades\PlanLimitService; // Registrar uso de recurso PlanLimitService::recordUsage('api_calls', 1); // Obtener uso actual $usage = PlanLimitService::getCurrentUsage('api_calls', 'month');
Gestionar suscripciones
use ThunderPack\Facades\SubscriptionService; // Activar suscripci贸n manualmente SubscriptionService::activateManual($tenant, $plan, $days = 30); // Verificar estado if (SubscriptionService::isSubscriptionActive($tenant)) { // Suscripci贸n activa } // Obtener d铆as restantes $daysLeft = SubscriptionService::getDaysUntilExpiration($tenant);
Enviar notificaciones WhatsApp
use ThunderPack\Services\WhatsAppService; use ThunderPack\Jobs\SendWhatsAppNotificationJob; // Enviar v铆a Job (recomendado) SendWhatsAppNotificationJob::dispatch( $tenant, 'subscription_activated', ['plan_name' => 'Pro'] ); // O directamente $whatsapp = app(WhatsAppService::class); $whatsapp->sendNotification($tenant, 'payment_received', ['amount' => 500]);
馃帹 Vistas Personalizables
Publica las vistas para personalizarlas:
php artisan vendor:publish --tag=thunder-pack-views
Las vistas se copiar谩n a resources/views/vendor/thunder-pack/
馃И Testing
composer test
馃摎 Documentaci贸n Adicional
馃攧 Actualizaci贸n
composer update bachisoft/thunder-pack php artisan migrate php artisan view:clear
馃 Contribuciones
Las contribuciones son bienvenidas. Por favor, abre un issue primero para discutir cambios mayores.
馃搫 Licencia
MIT License. Ver LICENSE para m谩s detalles.
馃檹 Cr茅ditos
Desarrollado por Bachisoft
馃悰 Soporte
Para reportar bugs o solicitar caracter铆sticas, por favor usa GitHub Issues.