bachisoft/thunder-pack
Thunder Pack
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.
Related Packages
Filement SaaS is a package that provides a set of tools and features to help you...
Laravel authentication and authorization system designed for Filament, focusing...
Run multiple websites using the same laravel installation while keeping tenant s...
Run multiple websites using the same laravel installation while keeping tenant s...
Laravel Artisan command to migrate postgres multi tentant