[object Object]

← back to Thesetdecorator

TSD social previews: backfill OG/Twitter tags + fix non-rendering SVG og:image

6684d44d5bf8c256431d45323aed2fa46cde841c · 2026-06-03 07:42:11 -0700 · SteveStudio2

Social platforms (FB/X/LinkedIn/iMessage) don't render SVG og:images, so the
18 pages using tsd-logo.svg had broken previews and ~21 pages had none at all.
- backfill full OG+Twitter tags (og:image=hero-rendered.jpg 1280x800, +title/
  description/url/type, twitter summary_large_image) on pages missing og:image
- swap tsd-logo.svg → raster hero on all og:image/twitter:image (incl the
  _person-profile + _best-seller-detail templates that feed dynamic pages)
- idempotent backfill script at scripts/og-image-backfill.js (re-run = no-op)
39 surfaces now have a valid raster social preview; 0 SVG social images remain.

yolo-loop tick · DTD verdict B (Claude+Codex 2/2) · local only, no deploy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 6684d44d5bf8c256431d45323aed2fa46cde841c
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date:   Wed Jun 3 07:42:11 2026 -0700

    TSD social previews: backfill OG/Twitter tags + fix non-rendering SVG og:image
    
    Social platforms (FB/X/LinkedIn/iMessage) don't render SVG og:images, so the
    18 pages using tsd-logo.svg had broken previews and ~21 pages had none at all.
    - backfill full OG+Twitter tags (og:image=hero-rendered.jpg 1280x800, +title/
      description/url/type, twitter summary_large_image) on pages missing og:image
    - swap tsd-logo.svg → raster hero on all og:image/twitter:image (incl the
      _person-profile + _best-seller-detail templates that feed dynamic pages)
    - idempotent backfill script at scripts/og-image-backfill.js (re-run = no-op)
    39 surfaces now have a valid raster social preview; 0 SVG social images remain.
    
    yolo-loop tick · DTD verdict B (Claude+Codex 2/2) · local only, no deploy.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 public/_person-profile.tpl.html  |  4 +--
 public/about.html                |  4 +--
 public/art-prints.html           |  4 +--
 public/art-review.html           |  7 +++++
 public/attorneys.html            |  4 +--
 public/awards.html               |  4 +--
 public/best-sellers.html         |  4 +--
 public/catalog.html              |  4 +--
 public/cleared-artwork-sale.html |  7 +++++
 public/collections-by-steve.html |  7 +++++
 public/decorator-k-c-fox.html    |  7 +++++
 public/decorator.html            |  7 +++++
 public/fancy-search.html         |  4 +++
 public/films.html                |  4 +--
 public/games.html                |  2 +-
 public/in-memoriam.html          |  4 +--
 public/index.html                |  6 ++--
 public/itinerary.html            |  5 +++
 public/job-board.html            |  7 +++++
 public/leaderboards.html         |  4 +--
 public/license-terms.html        |  7 +++++
 public/logo-agent.html           |  7 +++++
 public/logo-variants.html        |  7 +++++
 public/mood-board.html           |  7 +++++
 public/print.html                |  4 +--
 public/resources.html            |  7 +++++
 public/roster.html               |  4 +--
 public/sdsa.html                 |  4 +--
 public/stores.html               |  4 +--
 public/stories.html              |  7 +++++
 public/submit.html               |  7 +++++
 public/team-k-c-fox.html         |  7 +++++
 public/trades.html               |  7 +++++
 public/union-talk.html           |  7 +++++
 public/unions.html               |  7 +++++
 public/video-demo.html           |  7 +++++
 public/videos.html               |  4 +--
 public/vintage.html              |  4 +--
 public/wall-treatments.html      |  7 +++++
 scripts/og-image-backfill.js     | 66 ++++++++++++++++++++++++++++++++++++++++
 40 files changed, 244 insertions(+), 36 deletions(-)

diff --git a/public/_person-profile.tpl.html b/public/_person-profile.tpl.html
index eae0437..30f5b77 100644
--- a/public/_person-profile.tpl.html
+++ b/public/_person-profile.tpl.html
@@ -11,12 +11,12 @@
   <meta property="og:type" content="profile">
   <meta property="og:url" content="__CANONICAL__">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta property="profile:first_name" content="__NAME__">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="__NAME__ — __ROLE_SHORT__">
   <meta name="twitter:description" content="__ROLE_LONG__. __NOTES_EXCERPT__">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <script type="application/ld+json">__PERSON_SCHEMA__</script>
   <script type="application/ld+json">__BREADCRUMB_SCHEMA__</script>
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
diff --git a/public/about.html b/public/about.html
index cf0d5b6..b33e17f 100644
--- a/public/about.html
+++ b/public/about.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/about.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="About · The Set Decorator">
   <meta name="twitter:description" content="A working hub for production design.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/art-prints.html b/public/art-prints.html
index d8c4325..21eeb09 100644
--- a/public/art-prints.html
+++ b/public/art-prints.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/art-prints.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Art Prints for Sale · The Set Decorator">
   <meta name="twitter:description" content="Cleared artwork from the Abrams library, production-ready prints.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
   <style>
diff --git a/public/art-review.html b/public/art-review.html
index 296774d..2ad8c51 100644
--- a/public/art-review.html
+++ b/public/art-review.html
@@ -155,6 +155,13 @@
     .meta h2{font-size:0.95em}
   }
 </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/art-review.html">
+  <meta property="og:title" content="Art Review — TSD">
+  <meta property="og:description" content="Art Review — TSD">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/attorneys.html b/public/attorneys.html
index fd031a5..989341f 100644
--- a/public/attorneys.html
+++ b/public/attorneys.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/attorneys.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Entertainment Attorneys · The Set Decorator">
   <meta name="twitter:description" content="Bar sections, arts-legal nonprofits, ranking directories. Informational, not legal advice.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
   <style>
diff --git a/public/awards.html b/public/awards.html
index a0e027e..4ccc63d 100644
--- a/public/awards.html
+++ b/public/awards.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/awards">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Awards — Every PD & SD Ever Nominated · The Set Decorator">
   <meta name="twitter:description" content="38 award bodies, every nomination cross-referenced. Browse the canon top-50.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"Awards — Every Production Designer & Set Decorator Ever Nominated","url":"https://thesetdecorator.com/awards","description":"Comprehensive database of every Production Designer and Set Decorator nominated across 38 award bodies worldwide.","isPartOf":{"@type":"WebSite","name":"The Set Decorator","url":"https://thesetdecorator.com"}}</script>
   <script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://thesetdecorator.com"},{"@type":"ListItem","position":2,"name":"Awards","item":"https://thesetdecorator.com/awards.html"}]}</script>
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
diff --git a/public/best-sellers.html b/public/best-sellers.html
index dba3752..819191e 100644
--- a/public/best-sellers.html
+++ b/public/best-sellers.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/best-sellers.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Best Sellers · The Set Decorator">
   <meta name="twitter:description" content="Production-vetted wallcoverings from working sets.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
   <style>
diff --git a/public/catalog.html b/public/catalog.html
index da79e40..783af7e 100644
--- a/public/catalog.html
+++ b/public/catalog.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/catalog.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Cleared Artwork & Designs · The Set Decorator">
   <meta name="twitter:description" content="Searchable cleared art library for set decoration.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/cleared-artwork-sale.html b/public/cleared-artwork-sale.html
index e55d4bb..f5f198a 100644
--- a/public/cleared-artwork-sale.html
+++ b/public/cleared-artwork-sale.html
@@ -52,6 +52,13 @@
   .empty h2{font-family:'Playfair Display',serif;font-size:1.4em;color:var(--fg);margin:0 0 8px}
   .notice{background:rgba(126,230,155,0.1);border:1px solid rgba(126,230,155,0.35);color:#7ee69b;padding:14px 18px;border-radius:10px;margin-bottom:20px}
 </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/cleared-artwork-sale.html">
+  <meta property="og:title" content="Cleared Artwork · For License — The Set Decorator">
+  <meta property="og:description" content="Original cleared artwork by Steve Abrams — film/TV use rights, royalty-free per show. Photography, painted scenes, period composites.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/collections-by-steve.html b/public/collections-by-steve.html
index bb39614..a61aa4a 100644
--- a/public/collections-by-steve.html
+++ b/public/collections-by-steve.html
@@ -71,6 +71,13 @@
   .nav-collections a{padding:6px 12px;background:rgba(255,255,255,0.05);border:1px solid var(--rule);border-radius:999px;color:var(--muted);text-decoration:none;font-size:0.82em}
   .nav-collections a:hover{color:var(--fg);border-color:var(--gold)}
 </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/collections-by-steve.html">
+  <meta property="og:title" content="Collections by Steve · Cleared Artwork — The Set Decorator">
+  <meta property="og:description" content="Original photography by Steve Abrams, grouped by city and month. Royalty-free film/TV use rights — license direct, instant download, no model releases needed.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/decorator-k-c-fox.html b/public/decorator-k-c-fox.html
index 0d867cc..f42fbb0 100644
--- a/public/decorator-k-c-fox.html
+++ b/public/decorator-k-c-fox.html
@@ -50,6 +50,13 @@
     .kc-obits a { font:11px var(--font-ui); letter-spacing:.06em; color:var(--accent); text-decoration:none; border:1px solid var(--rule); padding:6px 12px; border-radius:var(--rad-pill); }
     .kc-obits a:hover { border-color:var(--accent); }
   </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/decorator-k-c-fox.html">
+  <meta property="og:title" content="K.C. Fox — Set Decorator, SDSA Founding Member (1954–2024) — The Set Decorator">
+  <meta property="og:description" content="Karen Cynthia">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/decorator.html b/public/decorator.html
index 1784d86..deb939e 100644
--- a/public/decorator.html
+++ b/public/decorator.html
@@ -6,6 +6,13 @@
   <title>Set Decorator Profile — The Set Decorator</title>
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/decorator.html">
+  <meta property="og:title" content="Set Decorator Profile — The Set Decorator">
+  <meta property="og:description" content="Set Decorator Profile — The Set Decorator">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/fancy-search.html b/public/fancy-search.html
index 093ea43..79374ee 100644
--- a/public/fancy-search.html
+++ b/public/fancy-search.html
@@ -39,6 +39,10 @@
     .btn.ghost { background: transparent; color: var(--fg); border: 1px solid var(--rule); }
     .legal-flag { font-size: 0.7rem; color: #b58a4e; }
   </style>
+  <meta property="og:url" content="https://thesetdecorator.com/fancy-search.html">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/films.html b/public/films.html
index 8fe2d34..9c9c1de 100644
--- a/public/films.html
+++ b/public/films.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/films.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Film Sources · The Set Decorator">
   <meta name="twitter:description" content="Specific pieces from specific films, traced to the prop houses and antique dealers that sourced them.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
   <style>
diff --git a/public/games.html b/public/games.html
index 42bde52..3b10291 100644
--- a/public/games.html
+++ b/public/games.html
@@ -10,7 +10,7 @@
   <meta property="og:description" content="Party games for film set-decoration lovers.">
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/games">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400;1,700&family=Inter:wght@400;500;600;700&display=swap">
   <link rel="stylesheet" href="/css/games.css">
 </head>
diff --git a/public/in-memoriam.html b/public/in-memoriam.html
index 42636a1..4560c5c 100644
--- a/public/in-memoriam.html
+++ b/public/in-memoriam.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/in-memoriam.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="In Memoriam · The Set Decorator">
   <meta name="twitter:description" content="Remembering the set decorators we've lost.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/index.html b/public/index.html
index a8f7861..4508b01 100644
--- a/public/index.html
+++ b/public/index.html
@@ -12,17 +12,17 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="The Set Decorator">
   <meta name="twitter:description" content="Cleared artwork, prop dig, fast-print delivery, and the awards canon for working set decorators.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="preconnect" href="https://fonts.googleapis.com">
   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
   <script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"The Set Decorator","alternateName":"TSD","url":"https://thesetdecorator.com/","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://thesetdecorator.com/roster.html?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
-  <script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"The Set Decorator","url":"https://thesetdecorator.com/","logo":"https://thesetdecorator.com/img/tsd-logo.svg","sameAs":["https://www.setdecorators.org/","https://www.imdb.com/"]}</script>
+  <script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"The Set Decorator","url":"https://thesetdecorator.com/","logo":"https://thesetdecorator.com/img/hero/hero-rendered.jpg","sameAs":["https://www.setdecorators.org/","https://www.imdb.com/"]}</script>
 <!-- Meta Pixel — INERT until set-fb-pixel.sh is run (does NOT load fbevents.js or hit Meta until flipped) -->
 <script>
 (function(){
diff --git a/public/itinerary.html b/public/itinerary.html
index b816b3a..32d333d 100644
--- a/public/itinerary.html
+++ b/public/itinerary.html
@@ -47,6 +47,11 @@
     .legal-note { background: #2a1e10; border: 1px solid #b58a4e; color: var(--fg); padding: 0.7rem 1rem; border-radius: 10px; font-size: 0.86rem; margin: 0 0 1rem; }
     .empty { text-align: center; color: var(--muted); padding: 2rem 1rem; background: var(--card); border: 1px dashed var(--rule); border-radius: 12px; }
   </style>
+  <meta property="og:url" content="https://thesetdecorator.com/itinerary.html">
+  <meta property="og:description" content="Build a working day of stops — prop houses, rental sources, vintage shops, theatre resources, union offices, and entertainment attorneys — ordered, exportable, and mapped.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/job-board.html b/public/job-board.html
index c524cb5..271faa3 100644
--- a/public/job-board.html
+++ b/public/job-board.html
@@ -7,6 +7,13 @@
   <meta name="description" content="Open set-decoration positions submitted by working production designers and decorators, plus auto-extracted production signals from the trade-news corpus.">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/job-board.html">
+  <meta property="og:title" content="Job Board — The Set Decorator">
+  <meta property="og:description" content="Open set-decoration positions submitted by working production designers and decorators, plus auto-extracted production signals from the trade-news corpus.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/leaderboards.html b/public/leaderboards.html
index 20ef40d..02fc589 100644
--- a/public/leaderboards.html
+++ b/public/leaderboards.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/leaderboards.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Leaderboards · The Set Decorator">
   <meta name="twitter:description" content="Set decorators ranked across awards canon, credits, career length, ratings, and genre versatility.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/license-terms.html b/public/license-terms.html
index 7299370..162f64e 100644
--- a/public/license-terms.html
+++ b/public/license-terms.html
@@ -40,6 +40,13 @@
     .meta b{margin-top:10px}
   }
 </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/license-terms.html">
+  <meta property="og:title" content="License Terms — The Set Decorator">
+  <meta property="og:description" content="Plain-English license terms for cleared artwork licensed through thesetdecorator.com. Royalty-Free · Film/TV Use Rights · per-production.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/logo-agent.html b/public/logo-agent.html
index 3e55912..a55c90e 100644
--- a/public/logo-agent.html
+++ b/public/logo-agent.html
@@ -77,6 +77,13 @@
     .lock-panel { padding: 1rem; border: 2px solid #1a5a36; border-radius: 14px; background: #1a5a3618; margin-bottom: 1rem; display: none; }
     .lock-panel.active { display: block; }
   </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/logo-agent.html">
+  <meta property="og:title" content="Logo Agent — Hot-or-Not Design Tournament">
+  <meta property="og:description" content="Pick a logo by tournament. Rank 3 variants, top 2 breed a new third, repeat until convergence. Or hit Set & Go and let the agent auto-pick. Seasonal palettes sourced from Pantone, WWD, and wholesale-furniture publications.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <header class="site-header">
diff --git a/public/logo-variants.html b/public/logo-variants.html
index 2622e44..ed104ea 100644
--- a/public/logo-variants.html
+++ b/public/logo-variants.html
@@ -176,6 +176,13 @@
     .modal .opts{grid-template-columns:1fr}
   }
 </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/logo-variants.html">
+  <meta property="og:title" content="Logo Showdown — TSD">
+  <meta property="og:description" content="Head-to-head logo picker. Pick a winner, chat with the design, crown the champion.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body>
 
diff --git a/public/mood-board.html b/public/mood-board.html
index 6bef54b..b09a95e 100644
--- a/public/mood-board.html
+++ b/public/mood-board.html
@@ -36,6 +36,13 @@
     .upload { border: 1px dashed var(--rule); padding: 1rem 0.5rem; text-align: center; border-radius: 10px; font-size: 0.85rem; color: var(--muted); cursor: pointer; }
     .upload:hover { border-color: var(--accent); color: var(--fg); }
   </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/mood-board.html">
+  <meta property="og:title" content="Mood Board — The Set Decorator">
+  <meta property="og:description" content="Upload a room photo, drop in product images, drag/resize/rotate to compose. Built for set decorators presenting a working look — not pretty for its own sake.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/print.html b/public/print.html
index 22ff701..09e6796 100644
--- a/public/print.html
+++ b/public/print.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/print.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Fast Print + Delivery · The Set Decorator">
   <meta name="twitter:description" content="Production-size prints, same-day Uber Direct in the LA basin.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/resources.html b/public/resources.html
index afe0898..3dfa445 100644
--- a/public/resources.html
+++ b/public/resources.html
@@ -26,6 +26,13 @@
     .affiliation { background: var(--card); border: 1px solid var(--rule); padding: 0.8rem 1rem; border-radius: 10px; font-size: 0.84rem; color: var(--muted); margin-bottom: 1rem; line-height: 1.5; }
     .affiliation strong { color: var(--accent); }
   </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/resources.html">
+  <meta property="og:title" content="Resources — The Set Decorator">
+  <meta property="og:description" content="Trade publications, union/guild contacts, theatre organizations, entertainment attorneys, and production directories — one place for working set decorators to find the right next click.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/roster.html b/public/roster.html
index 1c15ab1..97c6563 100644
--- a/public/roster.html
+++ b/public/roster.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/roster.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Set Decorator Directory · The Set Decorator">
   <meta name="twitter:description" content="The complete IMDb-sourced directory of working set decorators.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/sdsa.html b/public/sdsa.html
index f578b0a..daa29fd 100644
--- a/public/sdsa.html
+++ b/public/sdsa.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/sdsa.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="SDSA Directory · The Set Decorator">
   <meta name="twitter:description" content="Set Decorators Society of America member directory.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/stores.html b/public/stores.html
index d5910ca..0312ddf 100644
--- a/public/stores.html
+++ b/public/stores.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/stores.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Sources & Prop Houses · The Set Decorator">
   <meta name="twitter:description" content="Prop houses, antique dealers, fabricators, and trade vendors.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/stories.html b/public/stories.html
index d3b63d9..a1a695c 100644
--- a/public/stories.html
+++ b/public/stories.html
@@ -7,6 +7,13 @@
   <meta name="description" content="Written stories about set decoration. Continuity craft, period research, sourcing, and the working life of the department.">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/stories.html">
+  <meta property="og:title" content="Stories — The Set Decorator">
+  <meta property="og:description" content="Written stories about set decoration. Continuity craft, period research, sourcing, and the working life of the department.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/submit.html b/public/submit.html
index fdb382b..9596964 100644
--- a/public/submit.html
+++ b/public/submit.html
@@ -42,6 +42,13 @@
   .toast.err{background:rgba(255,138,138,0.1);border:1px solid rgba(255,138,138,0.35);color:#ff8a8a}
   @media (max-width:680px){ .steps{grid-template-columns:1fr} form .row{grid-template-columns:1fr} }
 </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/submit.html">
+  <meta property="og:title" content="Submit your photos — The Set Decorator">
+  <meta property="og:description" content="Share a Google Drive folder with TSD. We license your face-free photography to film/TV productions. You keep 70%. No upload limits, no exclusivity.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/team-k-c-fox.html b/public/team-k-c-fox.html
index a9a4df3..e0dd16e 100644
--- a/public/team-k-c-fox.html
+++ b/public/team-k-c-fox.html
@@ -38,6 +38,13 @@
     .tm-callout .label { font:10px var(--font-ui); letter-spacing:.18em; text-transform:uppercase; color:var(--accent); margin-bottom:6px; }
     .tm-callout p { font:13px/1.6 var(--font-display); color:var(--fg); margin:0 0 6px; }
   </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/team-k-c-fox.html">
+  <meta property="og:title" content="K.C. Fox's Crew — The People Who Built Her Sets — The Set Decorator">
+  <meta property="og:description" content="K.C. Fox">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/trades.html b/public/trades.html
index 2139cc7..b5b77e3 100644
--- a/public/trades.html
+++ b/public/trades.html
@@ -7,6 +7,13 @@
   <meta name="description" content="32 trade, celebrity, craft, design, and prestige outlets in one feed — Variety, THR, California Post, Perez Hilton, AD, Vanity Fair, the lot. Filterable, searchable, LLM-ready.">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/trades.html">
+  <meta property="og:title" content="Industry News — The Set Decorator">
+  <meta property="og:description" content="32 trade, celebrity, craft, design, and prestige outlets in one feed — Variety, THR, California Post, Perez Hilton, AD, Vanity Fair, the lot. Filterable, searchable, LLM-ready.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/union-talk.html b/public/union-talk.html
index 1d8a03c..a37d9f2 100644
--- a/public/union-talk.html
+++ b/public/union-talk.html
@@ -7,6 +7,13 @@
   <meta name="description" content="Shop-talk community for set decorators across every IATSE local and adjacent guild. Per-union threads, regional decorator rosters, relevant industry news, moderated topic queue.">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/union-talk.html">
+  <meta property="og:title" content="Union Talk — The Set Decorator">
+  <meta property="og:description" content="Shop-talk community for set decorators across every IATSE local and adjacent guild. Per-union threads, regional decorator rosters, relevant industry news, moderated topic queue.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/unions.html b/public/unions.html
index 5572491..6210a53 100644
--- a/public/unions.html
+++ b/public/unions.html
@@ -7,6 +7,13 @@
   <meta name="description" content="Every IATSE local and adjacent guild representing set decorators across the US and Canada. LA Local 44, NY Local 52, Atlanta Local 479, plus every regional studio-mechanics local.">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/unions.html">
+  <meta property="og:title" content="Unions & Guilds — The Set Decorator">
+  <meta property="og:description" content="Every IATSE local and adjacent guild representing set decorators across the US and Canada. LA Local 44, NY Local 52, Atlanta Local 479, plus every regional studio-mechanics local.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/video-demo.html b/public/video-demo.html
index 8d6fa40..d629dbb 100644
--- a/public/video-demo.html
+++ b/public/video-demo.html
@@ -42,6 +42,13 @@
     .full-script .seg time { font: 0.78rem ui-monospace, monospace; color: var(--accent); margin-right: 0.6rem; }
     .full-script .seg p { color: var(--muted); margin: 0.25rem 0 0; line-height: 1.55; }
   </style>
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/video-demo.html">
+  <meta property="og:title" content="3-Minute Trade Demo — The Set Decorator">
+  <meta property="og:description" content="A three-minute walk-through of how working set decorators use The Set Decorator: Fancy Search, itinerary, sources, theatre, entertainment attorneys, and the mood board. Narrated by Bubbe — a fictional set-decoration mentor.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/public/videos.html b/public/videos.html
index b8bbf27..4d79eee 100644
--- a/public/videos.html
+++ b/public/videos.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/videos.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Interviews · The Set Decorator">
   <meta name="twitter:description" content="Video interviews with SDSA members and set-decoration veterans.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/vintage.html b/public/vintage.html
index 32121a9..315f80d 100644
--- a/public/vintage.html
+++ b/public/vintage.html
@@ -11,11 +11,11 @@
   <meta property="og:type" content="website">
   <meta property="og:url" content="https://thesetdecorator.com/vintage.html">
   <meta property="og:site_name" content="The Set Decorator">
-  <meta property="og:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <meta name="twitter:card" content="summary">
   <meta name="twitter:title" content="Vintage Prop Dig · The Set Decorator">
   <meta name="twitter:description" content="One search across the major vintage marketplaces.">
-  <meta name="twitter:image" content="https://thesetdecorator.com/img/tsd-logo.svg">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
 </head>
diff --git a/public/wall-treatments.html b/public/wall-treatments.html
index b11fe45..2c767e5 100644
--- a/public/wall-treatments.html
+++ b/public/wall-treatments.html
@@ -7,6 +7,13 @@
   <meta name="description" content="Hand-pulled gradient ombres in nine traditional palettes — left to right and right to left. Print at any size for set-wall washes and backdrops.">
   <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500;600&display=swap">
   <link rel="stylesheet" href="/css/main.css">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="https://thesetdecorator.com/wall-treatments.html">
+  <meta property="og:title" content="Wall Treatments — Ombres — The Set Decorator">
+  <meta property="og:description" content="Hand-pulled gradient ombres in nine traditional palettes — left to right and right to left. Print at any size for set-wall washes and backdrops.">
+  <meta property="og:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:image" content="https://thesetdecorator.com/img/hero/hero-rendered.jpg">
 </head>
 <body data-theme="film-noir">
   <a class="skip-link" href="#main">Skip to main content</a>
diff --git a/scripts/og-image-backfill.js b/scripts/og-image-backfill.js
new file mode 100644
index 0000000..8d930aa
--- /dev/null
+++ b/scripts/og-image-backfill.js
@@ -0,0 +1,66 @@
+#!/usr/bin/env node
+// og-image-backfill.js — idempotent OG/Twitter social-preview backfill.
+// DTD verdict B (2026-06-03): SVG og:images don't render on FB/X/LinkedIn/iMessage,
+// so (1) backfill full OG+Twitter tags on pages missing og:image and (2) swap any
+// og:image/twitter:image pointing at tsd-logo.svg → the raster hero. Re-running is
+// a no-op. Skips _*.tpl.html partials + popout/sent-to-exa utility pages.
+const fs = require('fs'), path = require('path');
+
+const PUB = path.join(__dirname, '..', 'public');
+const RASTER = 'https://thesetdecorator.com/img/hero/hero-rendered.jpg';
+const SVG = 'https://thesetdecorator.com/img/tsd-logo.svg';
+const SKIP = new Set(['popout.html', 'sent-to-exa.html']);
+
+const files = fs.readdirSync(PUB).filter(f =>
+  f.endsWith('.html') && !f.startsWith('_') && !SKIP.has(f));
+
+let changed = 0, swapped = 0, backfilled = 0;
+const log = [];
+
+for (const f of files) {
+  const fp = path.join(PUB, f);
+  let html = fs.readFileSync(fp, 'utf8');
+  const before = html;
+
+  // (1) swap broken SVG social image → raster (idempotent: only if it's the svg)
+  if (html.includes(SVG)) {
+    html = html.split(SVG).join(RASTER);
+  }
+
+  // (2) backfill: if no og:image tag at all, insert the full block before </head>
+  const hasOgImage = /property=["']og:image["']/i.test(html);
+  if (!hasOgImage) {
+    const titleM = html.match(/<title>([^<]*)<\/title>/i);
+    const title = (titleM ? titleM[1] : 'The Set Decorator').trim().replace(/"/g, '&quot;');
+    const descM = html.match(/<meta[^>]+name=["']description["'][^>]*content=["']([^"']*)["']/i);
+    const desc = (descM ? descM[1] : title).trim().replace(/"/g, '&quot;');
+    const slug = f === 'index.html' ? '' : f;
+    const url = 'https://thesetdecorator.com/' + slug;
+    // Only emit tags not already present (some pages have og:title but no og:image).
+    const want = [
+      [/property=["']og:type["']/i,        `<meta property="og:type" content="website">`],
+      [/property=["']og:url["']/i,         `<meta property="og:url" content="${url}">`],
+      [/property=["']og:title["']/i,       `<meta property="og:title" content="${title}">`],
+      [/property=["']og:description["']/i, `<meta property="og:description" content="${desc}">`],
+      [/property=["']og:image["']/i,       `<meta property="og:image" content="${RASTER}">`],
+      [/name=["']twitter:card["']/i,       `<meta name="twitter:card" content="summary_large_image">`],
+      [/name=["']twitter:image["']/i,      `<meta name="twitter:image" content="${RASTER}">`],
+    ];
+    const inject = want.filter(([re]) => !re.test(html)).map(([, tag]) => '  ' + tag).join('\n');
+    if (inject && /<\/head>/i.test(html)) {
+      html = html.replace(/<\/head>/i, inject + '\n</head>');
+      backfilled++;
+    }
+  }
+
+  if (html !== before) {
+    fs.writeFileSync(fp, html, 'utf8');
+    changed++;
+    const didSwap = before.includes(SVG);
+    if (didSwap) swapped++;
+    log.push(`  ${f}${didSwap ? ' [svg→raster]' : ''}${!hasOgImage ? ' [backfill]' : ''}`);
+  }
+}
+
+console.log(`OG backfill: ${changed} files changed (${backfilled} backfilled, ${swapped} svg→raster)`);
+console.log(log.join('\n'));

← 7e06973 hero/ideas: single big full-bleed hero (remove 2x2 four-squa  ·  back to Thesetdecorator  ·  TSD yolo-loop backlog: envelope + tick-1 done + open items 226ae28 →