← 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
M public/_person-profile.tpl.htmlM public/about.htmlM public/art-prints.htmlM public/art-review.htmlM public/attorneys.htmlM public/awards.htmlM public/best-sellers.htmlM public/catalog.htmlM public/cleared-artwork-sale.htmlM public/collections-by-steve.htmlM public/decorator-k-c-fox.htmlM public/decorator.htmlM public/fancy-search.htmlM public/films.htmlM public/games.htmlM public/in-memoriam.htmlM public/index.htmlM public/itinerary.htmlM public/job-board.htmlM public/leaderboards.htmlM public/license-terms.htmlM public/logo-agent.htmlM public/logo-variants.htmlM public/mood-board.htmlM public/print.htmlM public/resources.htmlM public/roster.htmlM public/sdsa.htmlM public/stores.htmlM public/stories.htmlM public/submit.htmlM public/team-k-c-fox.htmlM public/trades.htmlM public/union-talk.htmlM public/unions.htmlM public/video-demo.htmlM public/videos.htmlM public/vintage.htmlM public/wall-treatments.htmlA scripts/og-image-backfill.js
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, '"');
+ const descM = html.match(/<meta[^>]+name=["']description["'][^>]*content=["']([^"']*)["']/i);
+ const desc = (descM ? descM[1] : title).trim().replace(/"/g, '"');
+ 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 →