Files
Benell/README.md
2026-03-31 13:21:48 +00:00

100 lines
3.5 KiB
Markdown

# 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.