feat: subir versión final Tablero CDC

This commit is contained in:
2026-05-28 13:26:32 -04:00
parent b4d3abc9fc
commit eb461ee134
19 changed files with 1795 additions and 2962 deletions
+78 -69
View File
@@ -6,63 +6,43 @@ El objetivo de esta app es simplificar el flujo de trabajo del equipo creativo m
---
## Descripción general
**Tablero CDC** permite crear, visualizar y gestionar proyectos creativos en una interfaz sencilla, clara y colaborativa.
Cada proyecto se representa como una tarjeta dentro del tablero. Al abrir una tarjeta, el usuario puede consultar o completar información como cliente, marca, país, solicitante, brief, enlaces de propuestas, artes finales, estatus y otros datos relevantes para el proceso interno.
La app está pensada para alimentar posteriormente el archivo de aprobaciones utilizado por el dashboard de Power BI del departamento creativo.
---
## Objetivo del proyecto
Reducir el trabajo manual y desordenado que actualmente se realiza en hojas colaborativas, reemplazándolo por una interfaz más amigable para el equipo.
La app busca:
- Centralizar la información de cada proyecto creativo.
- Facilitar el seguimiento de propuestas y artes finales.
- Permitir que el equipo agregue enlaces de trabajo de forma organizada.
- Mantener proyectos cerrados visibles, pero diferenciados visualmente.
- Preparar la información para ser enviada al Sheet original que alimenta Power BI.
- Mejorar la colaboración del equipo creativo.
---
## Estado actual
Esta versión corresponde a la **base inicial limpia** del proyecto.
Esta versión incluye:
Incluye:
- React + Vite puro.
- Configuración de `base` en `vite.config.ts`.
- Proyecto React + Vite limpio.
- Limpieza del ecosistema Lovable.
- Corrección de `County Manager` a `Country Manager`.
- Configuración de `base: "/tablero-cdc/"` en `vite.config.ts`.
- Favicon personalizado para la pestaña del navegador.
- Login corporativo con Firebase.
- Diseño visual aprobado como base del producto.
- Login corporativo con Supabase Auth y Google Sign-In.
- Restricción de acceso a correos `@gomezleemarketing.com`.
- Usuario autenticado real en el encabezado.
- Botón de cerrar sesión.
- Rol `isGerardo` para Gerardo Marrero.
- Permisos visuales iniciales: solo Gerardo Marrero puede ver/editar monto interno y editar estatus.
- Paginación local en las vistas de Todos, Activos y Cerrados con 12 proyectos por página.
- Persistencia de proyectos en Supabase.
- Sincronización multiusuario con Supabase Realtime.
- Desplegables dinámicos desde Supabase `app_lists`, con fallback local mientras se termina la sincronización del Sheet.
---
## Funcionalidades principales del prototipo
## Funcionalidades principales
- Tablero visual de proyectos.
- Tarjetas por proyecto.
- Filtros por estado:
- Todos
- Activos
- Cerrados
- Filtros por estado: Todos, Activos y Cerrados.
- Buscador por datos del proyecto.
- Modal de creación y edición de proyecto.
- Campos para cliente, marca, país y solicitante.
- Campo de `Country Manager`.
- Links de brief.
- Links de propuestas.
- Links de artes finales.
- Campos para cliente, marca, país, solicitante y `Country Manager`.
- Link de brief.
- Links múltiples de propuestas.
- Links múltiples de artes finales.
- Etiquetas de color por proyecto.
- Visualización de estatus.
- Preparación para control de permisos por usuario.
- Estatus visible para todos los usuarios.
- Monto interno visible solo para Gerardo Marrero.
- Paginación local para manejar tableros con muchos proyectos.
---
@@ -70,28 +50,22 @@ Incluye:
Las siguientes funcionalidades se implementarán en próximas fases:
1. Control de permisos por usuario.
2. Ocultar monto interno a usuarios que no sean Gerardo Marrero.
3. Bloquear edición de estatus para usuarios que no sean Gerardo Marrero.
4. Almacenamiento persistente.
5. Sincronización multiusuario.
6. Paginación en las vistas de Todos, Activos y Cerrados.
7. Sincronización automática de desplegables con la hoja `listas` del Google Sheet original.
8. Escritura automática de datos en el Sheet original mediante n8n u otra integración definida.
9. Agregar una nueva columna final para enlace de brief en el Sheet original.
1. Sincronización automática de la hoja `listas` del Google Sheet original hacia Supabase `app_lists`.
2. Escritura automática de datos en el Sheet original mediante n8n u otra integración definida.
3. Agregar una nueva columna final para enlace de brief en el Sheet original.
4. Reglas de seguridad definitivas con Supabase RLS.
5. Optimización futura de carga con RPC si el volumen de datos lo requiere.
---
## Arquitectura prevista
La arquitectura esperada para las próximas fases es:
```text
Frontend React/Vite
Firebase Auth
Supabase Auth
Almacenamiento persistente
Supabase Database/Postgres + Realtime + RLS
n8n como capa de integración
@@ -134,23 +108,17 @@ npm run preview
## Variables de entorno
El proyecto utiliza variables de entorno para Firebase y futuras integraciones.
Crear un archivo `.env` local basado en `.env.example`.
Estructura esperada:
```env
VITE_FIREBASE_API_KEY=""
VITE_FIREBASE_AUTH_DOMAIN=""
VITE_FIREBASE_PROJECT_ID=""
VITE_FIREBASE_STORAGE_BUCKET=""
VITE_FIREBASE_MESSAGING_SENDER_ID=""
VITE_FIREBASE_APP_ID=""
VITE_SUPABASE_URL=""
VITE_SUPABASE_ANON_KEY=""
VITE_WEBHOOK_URL=""
```
El campo `VITE_WEBHOOK_URL` puede permanecer vacío hasta que se defina la integración con n8n.
El campo `VITE_WEBHOOK_URL` puede permanecer vacío hasta que se defina la integración con n8n. La `anon key` de Supabase es pública para el frontend; nunca subir claves privadas como `service_role`, secretos OAuth o contraseñas de base de datos.
---
@@ -178,16 +146,16 @@ El archivo `.env.example` sí puede subirse, siempre que no contenga valores rea
El proyecto está preparado para publicarse bajo la ruta:
```ts
base: "/tablero-cdc/"
base: "/tablero-cdc/";
```
Si la ruta final cambia, debe actualizarse `vite.config.ts`.
Si la ruta final cambia, debe actualizarse `vite.config.ts` y el `basename` del router si aplica.
---
## Notas importantes
- Este repositorio representa la versión inicial del proyecto.
- Este repositorio representa la base inicial del proyecto.
- El diseño base fue aprobado antes de iniciar las integraciones técnicas.
- Las próximas fases deben implementarse en commits separados.
- No se debe alterar la estructura del Google Sheet original sin validación previa.
@@ -199,3 +167,44 @@ Si la ruta final cambia, debe actualizarse `vite.config.ts`.
Proyecto interno de **GomezLee Marketing**.
Desarrollo y soporte técnico: **Isaac Aracena**.
## Persistencia en Supabase
Esta versión ya no depende de `localStorage` para los proyectos. El tablero lee y guarda la información en Supabase usando las tablas:
- `projects`
- `project_links`
- `profiles`
- `app_lists`
Notas importantes:
- Los proyectos abiertos se guardan en base de datos con `status = 'Activo'`, pero en la interfaz se muestran como proyectos sin estatus para mantener el comportamiento visual original.
- Los usuarios normales no ven ni actualizan el monto interno desde la app.
- Solo Gerardo Marrero puede modificar estatus, monto interno y eliminar proyectos desde la interfaz.
- Los links de propuestas y artes finales se guardan en `project_links`.
- Los desplegables se leen desde `app_lists`. Si una categoría todavía no existe en Supabase, la app usa una lista local de respaldo para no bloquear el formulario.
## Supabase Realtime
Para que la sincronización multiusuario funcione, habilita Realtime para las tablas `projects`, `project_links` y `app_lists` ejecutando en Supabase SQL Editor el archivo:
```text
supabase_realtime_projects.sql
```
Luego abre la app en dos pestañas o dos navegadores: al crear, editar o eliminar un proyecto en una ventana, la otra debe actualizarse automáticamente.
## Desplegables dinámicos
La app intenta cargar estos desplegables desde `public.app_lists`:
- `client` / `cliente` / `clientes`
- `brand` / `marca` / `marcas`
- `country` / `pais` / `bu`
- `status` / `estatus`
- `country_manager` / `cm` / `bu_cm` para mapear BU → Country Manager
Si una categoría aún no existe en Supabase, se usa el respaldo local del frontend. Más adelante n8n sincronizará la hoja `listas` del Sheet original hacia `app_lists`.