3.5 KiB
3.5 KiB
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
npm install
npm run dev
Abre https://benell.maliountech.com.mx.
Configuración backend (Fase 3/4)
- Crea tu archivo de entorno:
cp .env.example .env.local
- Ajusta valores reales (DB,
NEXTAUTH_SECRET, SMTP). Importante: defineAPP_URLconhttps://benell.maliountech.com.mxpara enlaces por correo. - Genera cliente Prisma y aplica migraciones:
npm run prisma:generate
npm run prisma:migrate
npm run prisma:seed
Para servidor (sin permisos de create database), usa:
npm run prisma:deploy
- Inicia el proyecto:
npm run dev
Build de producción:
npm run build
npm run start
Sync automático Meta (Marketing) diario 06:00
- Define en
.envo.env.local:
MARKETING_SYNC_CRON_SECRET="un-secreto-largo"
INSTAGRAM_TOKEN="..."
INSTAGRAM_USER_ID="..."
- Instala unidades
systemd(si despliegas consystemd):
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
- Verifica:
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 reutilizablessrc/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 marcaprisma/schema.prisma: modelos DB (users, roles, user_roles, invitations, next-auth tables)src/app/api/invitations/route.ts: crear invitaciones + envío SMTPsrc/app/api/invitations/accept/route.ts: aceptar invitación y crear/actualizar usuariosrc/app/api/auth/register/route.ts: crear cuenta y enviar verificación por correosrc/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
- Login con credenciales reales desde PostgreSQL.
- Rutas de app protegidas con middleware (
/dashboard,/financial-flow, etc). - Rol en sesión (
owner|leader|employee) como fuente de verdad para la UI. - Invitaciones por email con token seguro hash + expiración + aceptación.
- Botón "Crear cuenta" y verificación de correo antes de login.
- Recuperación de contraseña por correo (
/forgot-password+/reset-password).
Pendiente
- Migrar KPIs y métricas mock a tablas reales.
- Agregar UI admin para listar/reenviar invitaciones.
- Fortalecer manejo de errores SMTP/DB en panel de configuración.