[object Object]

← back to Marketing Command Center

keep social board images durable

61d9ee2bce167f19dc140304c4c09cedd9afbb79 · 2026-08-28 14:30:55 -0700 · Steve Abrams

Files touched

Diff

commit 61d9ee2bce167f19dc140304c4c09cedd9afbb79
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Aug 28 14:30:55 2026 -0700

    keep social board images durable
---
 cta/CTA-REPORT.md      |  4 ++--
 public/panels/board.js | 10 +++++++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/cta/CTA-REPORT.md b/cta/CTA-REPORT.md
index 48a3f41..5a7162d 100644
--- a/cta/CTA-REPORT.md
+++ b/cta/CTA-REPORT.md
@@ -6,8 +6,8 @@
 
 ## Browser coverage
 
-- Chrome/Chromium recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/chrome/page@d704e2fc7b1b5356c2f85ff034ffafaf.webm
-- Safari/WebKit recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/safari/page@df14a167e95ab798cf6bd7589446f5e4.webm
+- Chrome/Chromium recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/chrome/page@8792ca22b82f5113bce4c5dc418e6f2b.webm
+- Safari/WebKit recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/safari/page@4e723f6350cee266351365cf24c89bbb.webm
 - Browserbase: skipped by design because the target is localhost and Browserbase cannot reach the Mac-local service.
 
 ## Components
diff --git a/public/panels/board.js b/public/panels/board.js
index 5e7d440..39aca45 100644
--- a/public/panels/board.js
+++ b/public/panels/board.js
@@ -22,6 +22,14 @@ window.MCC_PANELS['board'] = {
     const fmtWhen = iso => { if (!iso) return ''; const d = new Date(iso); return isNaN(d) ? '' : d.toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }); };
     const pickDate = o => o && (o.at || o.created_at || o.createdAt || o.date || o.scheduled_at || o.scheduledAt || o.scheduled || o.send_time || o.when || '');
     const pickText = o => o && (o.caption || o.body || o.text || o.message || o.subject || o.name || o.title || '');
+    // Instagram/Facebook CDN URLs are signed and expire. Keep the board's image
+    // requests same-origin through the existing allowlisted relay so old cards
+    // fail gracefully instead of rendering as broken/blank tiles.
+    const durableMedia = src => {
+      if (!src || !/^https?:/i.test(String(src))) return src;
+      return /(?:cdninstagram\.com|fbcdn\.net|instagram\.com)/i.test(src)
+        ? `${ORIGIN}/api/img-proxy?u=${encodeURIComponent(src)}` : src;
+    };
 
     // persisted controls
     const board = $('#bd-board');
@@ -162,7 +170,7 @@ window.MCC_PANELS['board'] = {
         ${w ? `<div class="when" title="${esc(when)}">🕓 ${esc(w)}</div>` : ''}
         <div class="txt">${esc((text || '').slice(0, 220)) || '<span class="bd-metric">(no text)</span>'}</div>
         ${badges || ''}
-        ${media ? `<img class="media" src="${esc(media)}" loading="lazy" onerror="this.onerror=null;this.classList.add('media-missing');this.src='data:image/svg+xml;utf8,${PLACEHOLDER_SVG}'">` : ''}
+        ${media ? `<img class="media" src="${esc(durableMedia(media))}" loading="lazy" onerror="this.onerror=null;this.classList.add('media-missing');this.src='data:image/svg+xml;utf8,${PLACEHOLDER_SVG}'">` : ''}
         <div class="foot">
           ${metric ? `<span class="bd-metric">${esc(metric)}</span>` : '<span></span>'}
           ${status ? `<span class="bd-status ${statusClass(status)}">${esc(status)}</span>` : ''}

← dec35e1 auto-data-snapshot: 2026-08-28T13:58:10 (1 data files) — pub  ·  back to Marketing Command Center  ·  auto-data-snapshot: 2026-08-28T14:34:59 (1 data files) — pub 61a29b6 →