← back to Marketing Command Center
keep social board images durable
61d9ee2bce167f19dc140304c4c09cedd9afbb79 · 2026-08-28 14:30:55 -0700 · Steve Abrams
Files touched
M cta/CTA-REPORT.mdM public/panels/board.js
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 →