# Casa Benell - Dashboard ejecutivo Dashboard en Next.js + TypeScript para Casa Benell, con base PostgreSQL para auth/roles/invitaciones. ## Stack - Next.js (App Router) + TypeScript - TailwindCSS - Recharts (Sankey) - Zustand (estado UI persistido en `localStorage`) - Prisma + PostgreSQL - NextAuth (credentials + adapter Prisma) - Nodemailer (SMTP invitations) ## Ejecutar ```bash npm install npm run dev ``` Abre `https://benell.maliountech.com.mx`. ## Configuración backend (Fase 3/4) 1. Crea tu archivo de entorno: ```bash cp .env.example .env.local ``` 2. Ajusta valores reales (DB, `NEXTAUTH_SECRET`, SMTP). Importante: define `APP_URL` con `https://benell.maliountech.com.mx` para enlaces por correo. 3. Genera cliente Prisma y aplica migraciones: ```bash npm run prisma:generate npm run prisma:migrate npm run prisma:seed ``` Para servidor (sin permisos de create database), usa: ```bash npm run prisma:deploy ``` 4. Inicia el proyecto: ```bash npm run dev ``` Build de producción: ```bash npm run build npm run start ``` ## Sync automático Meta (Marketing) diario 06:00 1. Define en `.env` o `.env.local`: ```bash MARKETING_SYNC_CRON_SECRET="un-secreto-largo" INSTAGRAM_TOKEN="..." INSTAGRAM_USER_ID="..." ``` 2. Instala unidades `systemd` (si despliegas con `systemd`): ```bash sudo cp deploy/systemd/benell-marketing-sync.service /etc/systemd/system/ sudo cp deploy/systemd/benell-marketing-sync.timer /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now benell-marketing-sync.timer ``` 3. Verifica: ```bash systemctl status benell-marketing-sync.timer systemctl list-timers | grep benell-marketing-sync ``` Nota: `OnCalendar=*-*-* 06:00:00` usa la zona horaria del servidor. ## Estructura relevante - `src/app`: rutas App Router (`/login`, `/dashboard`, `/financial-flow`, etc.) - `src/components`: shell y componentes UI reutilizables - `src/lib/mock`: datos mock tipados (`locations`, `departments`, `kpis`, `initiatives`, `meetings`, `people`) - `src/lib/store/ui-store.ts`: rol/filtros globales (persistidos) - `src/styles/tokens.ts`: tokens de diseño (paleta, radios, sombras, spacing) - `public/brand/logo.webp`, `public/brand/mascot.png`: assets de marca - `prisma/schema.prisma`: modelos DB (users, roles, user_roles, invitations, next-auth tables) - `src/app/api/invitations/route.ts`: crear invitaciones + envío SMTP - `src/app/api/invitations/accept/route.ts`: aceptar invitación y crear/actualizar usuario - `src/app/api/auth/register/route.ts`: crear cuenta y enviar verificación por correo - `src/app/api/auth/verify-email/route.ts`: validar token de verificación y activar login ## Estado UI (sin backend) - Rol de vista en topbar es informativo y se toma de la sesión autenticada (no editable en UI). - Filtros de rango de fecha y ubicación en topbar - Búsqueda global local para filtrar listas visibles ## Estado backend actual 1. Login con credenciales reales desde PostgreSQL. 2. Rutas de app protegidas con middleware (`/dashboard`, `/financial-flow`, etc). 3. Rol en sesión (`owner|leader|employee`) como fuente de verdad para la UI. 4. Invitaciones por email con token seguro hash + expiración + aceptación. 5. Botón "Crear cuenta" y verificación de correo antes de login. 6. Recuperación de contraseña por correo (`/forgot-password` + `/reset-password`). ## Pendiente 1. Migrar KPIs y métricas mock a tablas reales. 2. Agregar UI admin para listar/reenviar invitaciones. 3. Fortalecer manejo de errores SMTP/DB en panel de configuración.