Paid Media Reporting Tool
Screen Registry & Sprint Roadmap - Detalle extendido con descripcion funcional, tabs/vistas internas, modales, estados especiales y APIs involucradas por cada pantalla.
20
Pantallas
4
Sprints
2 semanas
Por sprint
2 devs full-time
Equipo
Timeline del Proyecto
8 semanas de desarrollo divididas en 4 sprints. Cada sprint entrega pantallas funcionales y deployables.
Semanas 1-2
Foundations
Semanas 3-4
Paid Media core
Semanas 5-6
Paid Media completo
Semanas 7-8
Organic completo + Ops + Export + Polish + Deploy a produccion.
Screen Registry
20 pantallas principales con descripcion funcional completa, tabs internas, modales y estados especiales.
- Vista unica
- Forgot Password: modal con input de email y confirmacion de envio de link de reset
- Error: credenciales invalidas (inline)
- Error: cuenta no verificada
- Loading state en submit (spinner en boton)
- Redirect post-login segun rol del usuario
- Supabase Auth
- Google OAuth
- Vista unica
- Email verification: overlay post-registro confirmando envio de mail
- Error: email ya registrado
- Error: contrasenas no coinciden (inline)
- Loading state en submit
- Success: pantalla de confirmacion / redirect
- Supabase Auth
- Google OAuth
- Vista unica
- Ninguno
- Error: codigo incorrecto (inline)
- Error: codigo expirado + boton Resend
- Timer regresivo para reenvio (ej: 60s)
- Loading state en validacion
- Supabase Auth (TOTP)
- Vista de tarjetas (default)
- Vista de tabla (alternativa)
- Crear cliente: modal con nombre, logo upload, descripcion, toggle de metricas habilitadas (multiselect)
- Editar cliente: mismo modal prellenado
- Archive cliente: modal de confirmacion
- Empty state: sin clientes asignados
- Loading skeleton de tarjetas
- Badge 'Archivado' en clientes inactivos
- Acceso condicional: boton 'Crear' solo para Superadmin/Empleado
- Supabase DB
- Tarjetas de campana (default)
- Campaign List tabla (tab alternativo)
- Add User: modal con email, rol, permisos por campana (checkbox list)
- Filtros avanzados: drawer lateral con plataforma, estado, rango de fechas, objetivo de campana
- Empty state: sin campanas para el cliente
- Loading skeleton por card
- Badge 'API no conectada' si falta una integracion
- Error de integracion: muestra datos disponibles + warning por plataforma caida
- Supabase DB
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Sub-tab dentro de Channel Performance
- Export: modal con formato CSV/Excel, rango de fechas a exportar
- Filtros por columna (dropdown inline en header de tabla)
- Empty state
- Loading skeleton de filas
- Row hover: muestra acciones (ver detalle, archivar)
- Paginacion o infinite scroll
- Columnas ordenables (click en header)
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Overview (activa)
- Performance
- Goals
- Ads
- Export: modal con seleccion de metricas y formato (PDF/Excel)
- Loading skeleton por KPI card
- Warning parcial: API de una plataforma caida
- Sin datos para el rango seleccionado (empty per card)
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Overview
- Performance (activa)
- Goals
- Ads
- Export: modal con seleccion de graficos a incluir en el PDF
- Key Insight expandido: drawer lateral con explicacion detallada + accion sugerida + benchmark
- Loading skeleton por chart (independientes)
- Error por grafico individual (no bloquea la pantalla)
- Sin datos para el periodo
- Toggle activo resaltado en chart de tendencias
- Tipos de insight: Strong Performance (verde), Optimization Opportunity (amarillo), Monitor Frequency (azul)
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Overview
- Performance
- Goals (activa)
- Ads
- Create Goal: modal de 3 pasos (plataforma, metrica, valor objetivo + fecha limite)
- Edit Goal: mismo modal prellenado
- Delete Goal: modal de confirmacion simple
- Empty state con CTA 'Crear primer goal'
- Goal 'On track': barra verde + porcentaje
- Goal 'At risk': barra amarilla + porcentaje
- Goal 'Missed': barra roja + valor final
- Goal 'Completado': check icon + fecha de cumplimiento
- Supabase DB (goals)
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Overview
- Performance
- Goals
- Ads (activa)
- Sub-tab: Ad Groups
- Sub-tab: Ads individuales
- Filtros: dropdown con plataforma, estado (activo/pausado/completado)
- Empty state por plataforma
- Loading skeleton
- Thumbnail no disponible: placeholder con icono de plataforma
- Badge de estado (Activo/Pausado/Completado) por plataforma
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Tab Ads (padre)
- Ad Groups (activa)
- Ads individuales
- Export: modal con Excel o CSV
- Filtros: dropdown inline con estado del ad group
- Empty state
- Loading skeleton de tabla
- Columnas ordenables
- Row click: navega al Ad Group Detail
- Row hover: muestra boton 'Ver detalle'
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Key Metrics (KPI cards)
- Ads del grupo (tabla interna)
- Ninguno
- Loading skeleton por seccion
- Empty state en tabla de ads
- Error en carga de datos de targeting
- Breadcrumb: Cliente > Campana > Ad Group
- Meta Ads API
- TikTok Ads API
- Google Ads API
- Performance Trends (grafico con toggle Impressions/Clicks/CTR)
- Conversion Funnel (visualizacion en embudo)
- Insight expandido: drawer lateral o popover con descripcion, benchmark y accion sugerida
- Loading por seccion
- Sin datos de conversion funnel (empty state localizado)
- Preview de creative: imagen/video del ad + badge de plataforma
- Tipos de insight: Strong Performance / Optimization Opportunity / Monitor Frequency
- Meta Ads API
- TikTok Ads API
- Google Ads API
- All
- TikTok
- YouTube
- Connect Account: modal paso a paso (seleccion plataforma, redirect OAuth, callback y confirmacion)
- Disconnect: modal de confirmacion con advertencia de perdida de datos
- Re-auth: modal de token expirado con boton para reconectar
- Cuenta conectada: badge verde + timestamp de ultimo sync
- Token expirado: badge naranja + boton Re-auth
- Error de conexion: badge rojo + mensaje de error de la API
- Sincronizando: spinner + 'Actualizando datos...'
- Empty state: sin cuentas conectadas + CTA 'Conectar primera cuenta'
- Instagram Graph API
- Facebook Graph API
- TikTok Organic API
- YouTube Data API v3
- Overview (activa)
- Audience Insights
- Export: modal con formato PDF o CSV, rango de fechas
- Top Content item: modal con metricas completas del post/video
- Loading skeleton por seccion
- Error de sync: banner superior con boton 'Reintentar'
- Sin datos para el periodo seleccionado
- Variantes de UI por plataforma (Instagram, Facebook, TikTok, YouTube)
- Instagram Graph API
- Facebook Graph API
- TikTok Organic API
- YouTube Analytics API
- Overview
- Audience Insights (activa)
- Ninguno
- Loading skeleton por chart
- Datos insuficientes: banner informativo
- Empty state por rango de fechas demasiado corto
- Variantes por plataforma (Instagram/Facebook: edad, genero, ciudades; TikTok: top videos; YouTube: watch time, dispositivos)
- Instagram Graph API
- Facebook Graph API
- TikTok Organic API
- YouTube Analytics API
- Todos los usuarios (tabla)
- Invitaciones pendientes
- Invite User: modal con email, dropdown de rol, multiselect de clientes asignados
- Edit User: modal prellenado para cambiar rol y clientes asignados
- Deactivate User: modal de confirmacion
- Badge 'Pending' para invitaciones sin aceptar
- Usuario inactivo: fila desaturada + badge 'Inactivo'
- Loading de envio de invitacion
- Error: email ya registrado
- El usuario logueado no puede editarse ni desactivarse a si mismo
- Supabase Auth (invites)
- Supabase DB (roles)
- Paid Media (Meta, TikTok, Google Ads)
- Organic (Instagram, Facebook, TikTok Organic, YouTube)
- Disconnect: modal de confirmacion con advertencia de cuentas que dejaran de sincronizar
- Re-auth: modal de token expirado con boton Reconectar
- Error detalle: modal/drawer con descripcion del error + pasos para resolver
- Conectado: badge verde + timestamp ultimo sync + cuentas conectadas
- Token expirado: badge naranja + boton Re-auth prominente
- Error de conexion: badge rojo + mensaje del error de la API
- Conectando / procesando OAuth: spinner full-card
- No conectado: card gris + boton 'Conectar' prominente
- Meta OAuth 2.0
- TikTok OAuth 2.0
- Google OAuth 2.0
- Supabase DB (tokens cifrados)
- Perfil (nombre, email, foto)
- Seguridad (contrasena, 2FA)
- Cambiar contrasena: modal (solo para usuarios email+password)
- Configurar 2FA: modal con QR code TOTP + campo de verificacion de 6 digitos
- Desactivar 2FA: modal de confirmacion
- Campos email/nombre read-only para usuarios con Google SSO
- Success toast al guardar cambios
- Error de validacion inline en cada campo
- Badge 'SSO' para usuarios conectados con Google
- Supabase Auth
- Info del cliente (nombre, logo, descripcion)
- Metricas habilitadas (toggles por modulo y plataforma)
- Usuarios asignados (lista + acceso rapido a User Management)
- Create Client: modal o pagina dedicada con nombre, logo upload, descripcion, metricas habilitadas
- Archive Client: modal de confirmacion con advertencia de datos historicos
- Cliente archivado: badge 'Archivado', acceso solo lectura
- Logo upload: preview en tiempo real + validacion de formato y tamano
- Guardar: loading state + success toast
- Error: nombre de cliente duplicado
- Supabase DB (clientes)
- Supabase Storage (logos)
Plan de Ejecucion
4 sprints de 2 semanas. Dev A = Frontend/UI. Dev B = Backend/Integraciones. Trabajo en paralelo.
Foundations: proyecto configurado, auth funcionando, clients dashboard, infraestructura base.
App deployada en staging con auth completo y clients dashboard funcional.
- Setup Next.js 14 + Tailwind + Shadcn/ui
- Layout base: sidebar, header, breadcrumbs
- Sistema de routing y proteccion de rutas por rol
- Pantalla 1 - Login (email+password + Google SSO)
- Pantalla 2 - Signup
- Pantalla 3 - 2FA
- Pantalla 4 - Clients Dashboard (tarjetas + tabla + modal Crear Cliente)
- Design tokens: colores, tipografia, spacing
- Componentes base: Button, Input, Modal, Badge, Toast, Skeleton
- Solicitar acceso: Meta Ads API (Business Verification)Critico
- Solicitar acceso: TikTok Ads API + TikTok for DevelopersCritico
- Solicitar acceso: Google Ads Developer TokenCritico
- Solicitar acceso: YouTube OAuth app verificationCritico
- Setup Supabase: proyecto, schema de DB inicial
- Auth: Supabase Auth con Google SSO + email+password + 2FA
- Row Level Security (RLS): politicas de acceso por rol
- Setup CI/CD: GitHub Actions + deploy automatico a Vercel (staging)
- Mock data layer completo
- Variables de entorno y secrets management
Pantallas entregadas en este sprint
Acciones Requeridas
Acciones que deben ejecutarse antes o al inicio del proyecto para evitar bloqueos en el desarrollo.
Pendientes (4)
Solicitar TikTok Ads API access
Sin TikTok Ads: campana multi-plataforma incompleta.
Solicitar YouTube Data API access
Sin YouTube: modulo Organic queda incompleto, no se pueden mostrar metricas de video.
Freeze de diseno
Cada cambio de diseno post-freeze implica retrabajar pantallas ya desarrolladas.
Definir frecuencia de sync de datos
Impacta arquitectura de cron jobs, costos de API y UX (timestamp 'Actualizado hace X horas').
Resueltas (2)
Solicitar Meta Ads API access
Acceso obtenido correctamente.
Solicitar Google Ads Developer Token
Acceso obtenido correctamente.