feat: subir versión final Tablero CDC
This commit is contained in:
@@ -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`.
|
||||
|
||||
Reference in New Issue
Block a user