Agency can edit title/copy on existing cards (optional RRSS sync); Dokploy runs pipeline-publish every 10 minutes with daily-sync as backup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Agency can publish now or on schedule, remove live posts from Meta, and browse pieces newest-first like an IG board.
Co-authored-by: Cursor <cursoragent@cursor.com>
Agency can choose a scheduled calendar post to prefill title, copy, pillar and date, or create/edit one in the calendar while adding it to the pipeline.
Co-authored-by: Cursor <cursoragent@cursor.com>
Approved pieces can be timed for IG/FB from the agency board; cron queues due jobs and calendar uses scheduled_at. Meta publish comes next.
Co-authored-by: Cursor <cursoragent@cursor.com>
Posts persist to the tenant calendar document when moved; contrast on the month grid no longer uses dark text on dark fills.
Co-authored-by: Cursor <cursoragent@cursor.com>
Restore CreativesPipeline on /creatives and the previous board/API behavior (published pieces visible again; no forced reject note).
Co-authored-by: Cursor <cursoragent@cursor.com>
Harden week-grid parsing (placeholders, status rows, month wrap) and ship an October-shaped plantilla for agency uploads.
Co-authored-by: Cursor <cursoragent@cursor.com>
Agency can import editorial calendars per tenant; pieces land on each day with the same month grid and day zoom as existing plans.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ad Tracker only loaded 2000 newest rows, so Brava showed 0 € while Métricas summed the full month. Both now page the same table for the selected range.
Co-authored-by: Cursor <cursoragent@cursor.com>
Editable targets vs actual, pipeline review-only with client reject notes, and published pieces opening from the calendar day.
Co-authored-by: Cursor <cursoragent@cursor.com>
Hide duplicate GSC/GA4 views and the manual day-load CTA so Orgánico matches Search Console, Analytics, and Métricas.
Co-authored-by: Cursor <cursoragent@cursor.com>
The second panel was still live because Next failed on an unwrapped ternary; the unified scorecard can deploy now.
Co-authored-by: Cursor <cursoragent@cursor.com>
Split ads, CRM and web into numbered blocks, drop the Windsor second panel, and keep Google campaigns as a single extra table.
Co-authored-by: Cursor <cursoragent@cursor.com>
Warehouse leads/deals from GHL contacts and opportunities so Métricas and CRM can use the same scorecard as Clientify.
Co-authored-by: Cursor <cursoragent@cursor.com>
Absorb client approval, month filters and editorial pieces into Pipeline; redirect /panel-cliente and remove duplicate menu entry.
Co-authored-by: Cursor <cursoragent@cursor.com>
Meta cards use a 9:16 frame (carousel 1:1 then 4:5). Google gallery balances Search/PMax/Display and surfaces PMax multi-format thumbs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop hardcoding Blue Parrot branding/connectors so switching clients
in the portfolio selector updates labels and integration chips.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fetch display/RDA assets, classify Brand vs Generic Search, and group
the Ad Tracker gallery so previews are not a single undifferentiated image.
Co-authored-by: Cursor <cursoragent@cursor.com>
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
El CRM solo vivía de webhooks; ahora hay pull Clientify, cron daily-sync incluye CRM, y cada módulo de Agencia tiene sync manual.
Co-authored-by: Cursor <cursoragent@cursor.com>
Carga métricas desde ad_daily al instante (mode=fast) y enriquece previews en vivo; la UI de Agencia avisa si falta scope Ads o consent Testing.
Co-authored-by: Cursor <cursoragent@cursor.com>
OAuth Ads caducado: aviso amable + campañas warehouse. Meta deja de volcar todas las variantes del asset_feed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Rellena views/perfil/clics/interacciones con metric_type=total_value y series día a día; carruseles/vídeos/reels con aspect ratio y px originales.
Co-authored-by: Cursor <cursoragent@cursor.com>
Quita copy "Paid ads en Ads", migra Page Insights a page_media_view/page_follows y resuelve creatividades Meta a nivel anuncio.
Co-authored-by: Cursor <cursoragent@cursor.com>
Excluye Málaga del cohort; enriquece source desde lead/Clientify para que el cruce ads vs CRM deje de volcar todo en sin-atribuir.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pagina ad_daily (~420d) para que YoY no quede vacío; Ventas muestra
conteo de deals (importe Clientify en hint/columna Importe).
Co-authored-by: Cursor <cursoragent@cursor.com>
Comparativas WoW/MoM/YoY muestran prev/Δ además del %; sync ads admite
histórico desde 2025; tabla ads↔CRM añade cierres, ventas y ROAS.
Co-authored-by: Cursor <cursoragent@cursor.com>
Series IG/FB (alcance, impresiones, clics, engagement, fans) según el rango del header; Meta y Google quedan como tokens separados.
Co-authored-by: Cursor <cursoragent@cursor.com>
El token de ads no sirve para /posts; intentamos Page Access Token y explicamos los permisos necesarios.
Co-authored-by: Cursor <cursoragent@cursor.com>
Exporta el Google Doc en HTML, parte por fecha y guarda todo el bloque (listas, negritas, links) sin truncar.
Co-authored-by: Cursor <cursoragent@cursor.com>