2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00
2026-03-31 13:21:48 +00:00

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)

  1. Crea tu archivo de entorno:
cp .env.example .env.local
  1. Ajusta valores reales (DB, NEXTAUTH_SECRET, SMTP). Importante: define APP_URL con https://benell.maliountech.com.mx para enlaces por correo.
  2. 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
  1. Inicia el proyecto:
npm run dev

Build de producción:

npm run build
npm run start

Sync automático Meta (Marketing) diario 06:00

  1. Define en .env o .env.local:
MARKETING_SYNC_CRON_SECRET="un-secreto-largo"
INSTAGRAM_TOKEN="..."
INSTAGRAM_USER_ID="..."
  1. Instala unidades systemd (si despliegas con systemd):
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
  1. 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 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.
Description
No description provided
Readme 1.7 MiB
Languages
TypeScript 99.9%
CSS 0.1%