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>
Stop seeding Agua Miia’s October plan for every client and restrict the portal publish action to that tenant only.
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>
Edge getUser() could not reach Auth, so a valid cookie still looked
logged-out. Route on the local session cookie instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
Middleware getUser() could not validate the session cookie via the
internal Docker hostname, so auth succeeded in the browser but kept
redirecting back to /login stuck on "Verificando".
Co-authored-by: Cursor <cursoragent@cursor.com>
Prefer agency google_drive+ads token over stale env refresh to avoid
PERMISSION_DENIED, and accept Clientify contact_id/deal_id payload aliases.
Co-authored-by: Cursor <cursoragent@cursor.com>