# 5to sueño — Product Requirements Document

## Original problem statement
Sitio web corporativo + plataforma multifuncional para la agencia "5to sueño". Tres portales con RBAC: público, gestión interna, portal cliente. Iteración 2 añade: roles expandidos, flujo de activación, departamentos, CRM, marketing & ventas, notificaciones, búsqueda global, solicitudes de propuesta.

## Architecture
- Backend: FastAPI + Socket.IO (ASGI) + MongoDB (motor). Modular routers en `routes_*.py`.
- Frontend: React + Tailwind + shadcn + sonner + lucide-react + socket.io-client + react-router v6.
- Auth: JWT cookies httpOnly + bcrypt. Activación por token. Resend para email.

## RBAC Roles (10)
- **ceo**: super-admin (todo lo de admin + privilegios completos)
- **admin**: gestión total — usuarios, departamentos, proyectos, CMS
- **rh**: gestión de usuarios (no puede crear ceo/admin)
- **pm**: gestión de proyectos (Kanban, hitos)
- **pmo**: oficina de proyectos — ve todo de proyectos
- **sales**: CRM + email + chats con cliente
- **marketing**: CRM + campañas + plantillas
- **account_manager**: chats con clientes + CRM
- **collaborator**: ejecuta tareas asignadas
- **client**: ve solo su proyecto, chatea con PM, envía solicitudes de propuesta

## What's been implemented

### Iteración 1 (2026-05-28)
- ✓ Sitio público (landing, nosotros, servicios, portafolio, contacto)
- ✓ JWT cookie auth + RBAC inicial
- ✓ Dashboard interno con Kanban, hitos, equipo, chat, CMS
- ✓ Portal cliente con pipeline + chat
- ✓ Socket.IO real-time
- ✓ Resend email para contacto

### Iteración 2 (2026-05-28)
- ✓ 6 nuevos roles (ceo, rh, pmo, sales, marketing, account_manager)
- ✓ Flujo de activación: contraseña aleatoria + token + email con enlace `/activate/{token}` → forzar nueva contraseña → auto-login
- ✓ Endpoint `resend-activation` regenera token
- ✓ Departamentos CRUD (ceo/admin only) — auto-crea canal de departamento
- ✓ Mini-CRM: clientes/leads con notas, tags, status, owner, search/filter
- ✓ Marketing: plantillas con variables {{name}}, envío individual, campañas masivas con audiencia por status/tags/emails ad-hoc, log de envíos
- ✓ Notificaciones: persistidas en Mongo + push Socket.IO `notification` event. Triggers: mensaje, asignación/remoción de proyecto, hito completado, nueva propuesta
- ✓ Búsqueda global role-aware (proyectos, tareas, usuarios, clientes CRM, departamentos)
- ✓ Sistema de propuestas: cliente solicita desde portal → notifica a roles viewers → status workflow
- ✓ Chat: canales por departamento + canales de equipo personalizados. Canales con clientes restringidos a ceo/admin/pm/pmo/sales/account_manager
- ✓ Sidebar role-based + NotificationBell + GlobalSearch en topbar
- ✓ 74/74 tests backend passing; smoke frontend 100%

## Test credentials
Ver `/app/memory/test_credentials.md` — 10 cuentas seedeadas.

## Backlog
### P1
- Notificaciones por email (no solo in-app) en eventos críticos: nueva propuesta, asignación de proyecto, hito completado.
- Vista Gantt como alternativa al Kanban.
- Upload de imágenes/assets vía object storage (CMS, perfiles, CRM).
- Convertir propuesta aceptada → proyecto con un clic.
- Carga de trabajo por colaborador (Ecosistema de Equipos visualizado).

### P2
- Editor de texto enriquecido (TipTap) para descripciones y plantillas de email.
- Mensaje no leído por canal (badge en sidebar de chat).
- Programación de campañas (envío diferido).
- Importación de leads desde CSV.
- Exportar informes de proyecto en PDF para clientes.

### P3
- Verificar dominio en Resend para envíos sin restricción de testing mode.
- Webhooks de eventos clave (proyecto creado, propuesta convertida).
- SSO / Emergent Google Auth opcional.

## Known limitations
- Resend está en modo testing: emails solo se entregan a `xtradiux@gmail.com`. Resto de destinatarios quedan registrados como failed en `email_log` (función + audit intactos). Verificar dominio para producción.
- `_temp_password` se devuelve en la respuesta de `POST /api/users` para que el creador pueda copiarlo manualmente — gated por USER_MGMT_ROLES; no se loguea ni expone fuera del modal.
