Plataforma de mesa de ayuda y gestión operativa para equipos de soporte TI
Modelo MSP → empresas cliente con aislamiento por tenant, portales por subdominio y control de acceso granular.
EkinDesk centraliza tickets, incidencias, catálogos, usuarios y permisos en una sola aplicación. Está pensado para MSPs y equipos internos que necesitan trazabilidad, auditoría y portales dedicados por organización.
| Área | Descripción |
|---|---|
| Helpdesk / Resolbeb | Ciclo completo de tickets: creación, asignación, prioridades, estados, comentarios, adjuntos, macros, wallboard y auditoría. |
| Incidencias | Flujo paralelo con tipos, severidades, estados y políticas de visibilidad por área o cliente. |
| Multi-tenant MSP | Operadores MSP con varios clientes; portales por subdominio (portal_slug); scopes en API y RLS opcional en PostgreSQL. |
| RBAC | Roles y permisos con Spatie Laravel Permission; políticas por ticket e incidencia. |
| Invitaciones | Flujo por correo: el invitado activa su cuenta y un administrador asigna el rol; soporte opcional de Google OAuth. |
| Catálogos | Prioridades, estados, tipos, áreas, sedes, campañas, matriz de prioridad y más — scope plataforma + operador MSP. |
| Notificaciones y auditoría | Alertas in-app, exportación de auditoría de tickets, monitor de sesiones y trazabilidad de cambios. |
| Capa | Tecnología |
|---|---|
| Backend | PHP 8.2+, Laravel 12, Sanctum 4, Spatie Permission, Socialite (Google OAuth) |
| Frontend | React 19, Inertia.js 3, Vite 7, Tailwind CSS 4 |
| UI / datos | Radix UI, React Hook Form + Zod, Recharts, TanStack Table, Lucide Icons |
| Datos | MySQL / MariaDB, SQLite (dev/tests), PostgreSQL + RLS (staging/prod opcional) |
| Auth | Sesión stateful Sanctum (cookies), Google OAuth vía Socialite (opcional) |
Navegador
│
├─► Rutas web (Inertia) → inertia.jsx → Inertia/Pages/
│ login, /home, /resolbeb/*, catálogos, incidencias…
│
└─► API REST /api/* → Axios + cookie Sanctum
tickets, users, catalogs, notifications…
- Un solo frontend: entrada Vite
resources/js/inertia.jsx; páginas enresources/js/Inertia/Pages/. - API desacoplada: mutaciones y listados JSON bajo
/api/*con middlewareauth:sanctumy permisosperm:*. - Sesión:
GET /check-auth(web) valida la cookie; la API no sustituye ese handshake.
Detalle completo: ARCHITECTURE.md.
- PHP 8.2+
- Composer 2.x
- Node.js 20 LTS (o 18+)
- MySQL 8+ / MariaDB, o SQLite para desarrollo local
- Extensiones PHP:
openssl,pdo,mbstring,tokenizer,xml,ctype,json,bcmath(yziprecomendado para Composer)
git clone https://github.com/TravisDev5x/ekindesk.git
cd ekindesk
composer install
cp .env.example .env
php artisan key:generateConfigura la base de datos en .env (SQLite o MySQL) y ejecuta:
php artisan migrate:fresh --seed
npm install
npm run buildcomposer devArranca servidor Laravel, cola, logs (Pail) y Vite en paralelo.
Acceso local: http://127.0.0.1:8000
Ver USUARIOS_DEMO.md. Ejemplo tras seed completo:
| Campo | Valor |
|---|---|
| Correo | admin@helpdesk.local |
| Contraseña | AdminHelpdesk2025! |
El login acepta correo o número de empleado.
Variables relevantes en .env (ver docs/SANCTUM_TENANCY.md):
TENANCY_BASE_DOMAIN=ekindesk.test
TENANCY_STRICT_CLIENT_PORTAL=true
SESSION_DOMAIN=.ekindesk.test
SANCTUM_STATEFUL_DOMAINS=ekindesk.test,cliente-a.ekindesk.test,localhostCada empresa cliente puede tener un portal en https://{portal_slug}.{base_domain}/login con branding y aislamiento de datos.
Documentación:
| Documento | Contenido |
|---|---|
docs/CLIENT_PORTAL.md |
Subdominios y portal |
docs/DATABASE_TENANCY.md |
Modelo BD y scopes |
docs/MULTITENANT_ROADMAP.md |
Plan de trabajo |
docs/INERTIA_MIGRATION.md |
Frontend Inertia y URLs legacy |
# Tests
php artisan test
# Estilo PHP
./vendor/bin/pint
# Verificar integridad client_id en tickets/sedes
php artisan tenant:client-id verify
# Sembrar catálogos al operador MSP (idempotente)
php artisan tenant:seed-catalogs {operator_user_id}
# Build producción frontend
npm run buildapp/ Modelos, controladores API, servicios, políticas, middleware tenant
resources/js/
inertia.jsx Entrada Vite + Inertia
Inertia/Pages/ Páginas por ruta web
components/ UI compartida (sidebar, dashboards, formularios)
routes/
web.php Vistas Inertia + redirects legacy
api.php REST API
inertia_legacy.php Compatibilidad URLs antiguas
database/ Migraciones y seeders
docs/ Tenancy, Sanctum, auditoría API, migración Inertia
tests/Feature/ Tests de tenant, catálogos, invitaciones, tickets
| Archivo | Descripción |
|---|---|
ARCHITECTURE.md |
Arquitectura multi-módulo |
API_CONTRACT.md |
Contrato de endpoints API |
INSTALACION.md |
Guía de instalación detallada |
CLAUDE.md |
Convenciones para desarrollo asistido |
USUARIOS_DEMO.md |
Usuarios y contraseñas de prueba |
Consulta el estado actual en docs/MULTITENANT_ROADMAP.md. Líneas generales:
- Cierre de fugas tenant en API y CI con PostgreSQL + RLS
- Branding por portal y seed de catálogos por operador MSP
- Notificaciones en tiempo real y reportes avanzados
- Base de conocimiento (Knowledge Base)
Proyecto Source Available: el código es público para consulta y referencia. No está permitido copiarlo, redistribuirlo ni usarlo como base de otros productos sin autorización. Ver LICENSE.
Eric Rafael Pérez Hernández — github.com/TravisDev5x
Consultas: eric_perez96@outlook.com