feat: panel de creatividades (pipeline editorial) en /dashboard/panel-cliente

Nueva tabla creative_pipeline (separada de creatives, que es solo para
anuncios aprobados Meta/Google): Propuesta -> En diseño -> Revisión
interna -> Aprobado/Rechazado -> Publicado, con RLS por tenant.

- sql/creative_pipeline.sql: esquema + políticas RLS
- /api/creative-pipeline: CRUD con transiciones restringidas (el cliente
  solo puede aprobar/rechazar una pieza en revisión interna; el resto de
  movimientos y la creación son solo agencia)
- /api/creative-pipeline/upload + /media: portada y slides de carrusel
  sobre el bucket privado tenant-assets ya existente
- CreativePipelineBoard: tablero agrupado por mes, con subida de imagen
  inline y acciones según rol
- Alta del módulo "Panel de Creatividades" en tenant-modules y sidebar

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WqGTGPznxTp8mwMg6Yv4Ew
This commit is contained in:
Claude
2026-10-04 00:22:03 +02:00
parent e3180ceb51
commit ed18c9d318
8 changed files with 1060 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ export type DashboardModuleId =
| 'organico'
| 'activos'
| 'creatives'
| 'panel_cliente'
| 'asistente';
export type DashboardModuleDef = {
@@ -93,6 +94,13 @@ export const DASHBOARD_MODULES: DashboardModuleDef[] = [
providers: ['google_drive', 'meta_ads', 'google_ads'],
hint: 'Flujo creativo',
},
{
id: 'panel_cliente',
href: '/dashboard/panel-cliente',
label: 'Panel de Creatividades',
providers: [],
hint: 'Producción editorial: propuesta, diseño, revisión y aprobación',
},
{
id: 'asistente',
href: '/dashboard/asistente',