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

1.6.2 2026-01-17 16:28 UTC

This package is auto-updated.

Last update: 2026-01-17 16:28:53 UTC


README

Latest Version Total Downloads License

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 tenant
  • subscription - Verificaci贸n de suscripci贸n activa
  • superadmin - Restricci贸n a super admins
  • tenant.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.