[object Object]

← back to Dw Fleet Registry

viewer: deploy curated hero pools live (hero-pool.json rsync to prod)

e53dc9761d5b78777ac288d751b94ac21f82abda · 2026-06-01 15:28:33 -0700 · SteveStudio2

Adds /api/hero-pool/deploy (writes repo public/hero-pool.json + rsync to prod cwd,
static so no reload) and a 'Save & deploy live' modal button. Persists slug->cwd->repo
map in data/deploy-map.json (69 sites). Full loop verified on 1950swallpaper:
pick hi-res -> save -> deploy -> rotateHero rotates the pool (primary 5773px).

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

Files touched

Diff

commit e53dc9761d5b78777ac288d751b94ac21f82abda
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Mon Jun 1 15:28:33 2026 -0700

    viewer: deploy curated hero pools live (hero-pool.json rsync to prod)
    
    Adds /api/hero-pool/deploy (writes repo public/hero-pool.json + rsync to prod cwd,
    static so no reload) and a 'Save & deploy live' modal button. Persists slug->cwd->repo
    map in data/deploy-map.json (69 sites). Full loop verified on 1950swallpaper:
    pick hi-res -> save -> deploy -> rotateHero rotates the pool (primary 5773px).
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 data/deploy-map.json   | 347 +++++++++++++++++++++++++++++++++++++++++++++++++
 dw-fleet-registry.json | 245 +++++++++++++++++-----------------
 viewer/index.html      |  31 +++--
 viewer/server.mjs      |  27 ++++
 4 files changed, 519 insertions(+), 131 deletions(-)

diff --git a/data/deploy-map.json b/data/deploy-map.json
new file mode 100644
index 0000000..361ef4d
--- /dev/null
+++ b/data/deploy-map.json
@@ -0,0 +1,347 @@
+{
+ "1800swallpaper.com": {
+  "name": "1800swallpaper",
+  "cwd": "/var/www/1800swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1800swallpaper"
+ },
+ "1890swallpaper.com": {
+  "name": "1890swallpaper",
+  "cwd": "/var/www/1890swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1890swallpaper"
+ },
+ "1900swallpaper.com": {
+  "name": "1900swallpaper",
+  "cwd": "/var/www/1900swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1900swallpaper"
+ },
+ "1920swallpaper.com": {
+  "name": "1920swallpaper",
+  "cwd": "/var/www/1920swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1920swallpaper"
+ },
+ "1930swallpaper.com": {
+  "name": "1930swallpaper",
+  "cwd": "/var/www/1930swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1930swallpaper"
+ },
+ "1940swallpaper.com": {
+  "name": "1940swallpaper",
+  "cwd": "/var/www/1940swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1940swallpaper"
+ },
+ "1950swallpaper.com": {
+  "name": "1950swallpaper",
+  "cwd": "/var/www/1950swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1950swallpaper"
+ },
+ "1960swallpaper.com": {
+  "name": "1960swallpaper",
+  "cwd": "/var/www/1960swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1960swallpaper"
+ },
+ "1970swallpaper.com": {
+  "name": "1970swallpaper",
+  "cwd": "/var/www/1970swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1970swallpaper"
+ },
+ "1980swallpaper.com": {
+  "name": "1980swallpaper",
+  "cwd": "/var/www/1980swallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/1980swallpaper"
+ },
+ "agedwallpaper.com": {
+  "name": "agedwallpaper",
+  "cwd": "/var/www/agedwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/agedwallpaper"
+ },
+ "architecturalwallcoverings.com": {
+  "name": "architecturalwallcoverings",
+  "cwd": "/var/www/architecturalwallcoverings.com",
+  "repo": "/Users/stevestudio2/Projects/architecturalwallcoverings"
+ },
+ "bestwallpaperplace.com": {
+  "name": "bestwallpaperplace",
+  "cwd": "/root/Projects/bestwallpaperplace",
+  "repo": "/Users/stevestudio2/Projects/bestwallpaperplace"
+ },
+ "carmelwallpapers.com": {
+  "name": "carmelwallpapers",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/carmelwallpapers"
+ },
+ "chinoiseriewallpaper.com": {
+  "name": "chinoiseriewallpaper",
+  "cwd": "/var/www/chinoiseriewallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/chinoiseriewallpaper"
+ },
+ "contractwallpaper.com": {
+  "name": "contractwallpaper",
+  "cwd": "/var/www/contractwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/contractwallpaper"
+ },
+ "corkwallcovering.com": {
+  "name": "corkwallcovering",
+  "cwd": "/var/www/corkwallcovering.com",
+  "repo": "/Users/stevestudio2/Projects/corkwallcovering"
+ },
+ "customdigitalmurals.com": {
+  "name": "customdigitalmurals",
+  "cwd": "/root/Projects/customdigitalmurals",
+  "repo": "/Users/stevestudio2/Projects/customdigitalmurals"
+ },
+ "embroideredwallpaper.com": {
+  "name": "embroideredwallpaper",
+  "cwd": "/var/www/embroideredwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/embroideredwallpaper"
+ },
+ "fabricwallpaper.com": {
+  "name": "fabricwallpaper",
+  "cwd": "/var/www/fabricwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/fabricwallpaper"
+ },
+ "flockedwallpaper.com": {
+  "name": "flockedwallpaper",
+  "cwd": "/root/Projects/Designer-Wallcoverings/DW-Websites/flockedwallpaper",
+  "repo": "/Users/stevestudio2/Projects/flockedwallpaper"
+ },
+ "glassbeadedwallpaper.com": {
+  "name": "glassbeadedwallpaper",
+  "cwd": "/root/Projects/Designer-Wallcoverings/DW-Websites/glassbeadedwallpaper",
+  "repo": "/Users/stevestudio2/Projects/glassbeadedwallpaper"
+ },
+ "glitterwalls.com": {
+  "name": "glitterwalls",
+  "cwd": "/var/www/glitterwalls.com",
+  "repo": "/Users/stevestudio2/Projects/glitterwalls"
+ },
+ "greenwallcoverings.com": {
+  "name": "greenwallcoverings",
+  "cwd": "/var/www/greenwallcoverings.com",
+  "repo": "/Users/stevestudio2/Projects/greenwallcoverings"
+ },
+ "handcraftedwallpaper.com": {
+  "name": "handcraftedwallpaper",
+  "cwd": "/var/www/handcraftedwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/handcraftedwallpaper"
+ },
+ "healthcarewallpaper.com": {
+  "name": "healthcarewallpaper",
+  "cwd": "/var/www/healthcarewallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/healthcarewallpaper"
+ },
+ "hospitalitydesignreps.com": {
+  "name": "hospitalitydesignreps",
+  "cwd": "/root/Projects/hospitalitydesignreps",
+  "repo": "/Users/stevestudio2/Projects/hospitalitydesignreps"
+ },
+ "hospitalitywallcoverings.com": {
+  "name": "hospitalitywallcoverings",
+  "cwd": "/root/Projects/hospitalitywallcoverings",
+  "repo": "/Users/stevestudio2/Projects/hospitalitywallcoverings"
+ },
+ "hospitalitywallpaper.com": {
+  "name": "hospitalitywallpaper",
+  "cwd": "/var/www/hospitalitywallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/hospitalitywallpaper"
+ },
+ "hotelwallcoverings.com": {
+  "name": "hotelwallcoverings",
+  "cwd": "/var/www/hotelwallcoverings.com",
+  "repo": "/Users/stevestudio2/Projects/hotelwallcoverings"
+ },
+ "jutewallpaper.com": {
+  "name": "jutewallpaper",
+  "cwd": "/var/www/jutewallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/jutewallpaper"
+ },
+ "linenwallpaper.com": {
+  "name": "linenwallpaper",
+  "cwd": "/var/www/linenwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/linenwallpaper"
+ },
+ "madagascarwallpaper.com": {
+  "name": "madagascarwallpaper",
+  "cwd": "/var/www/madagascarwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/madagascarwallpaper"
+ },
+ "metallicwallpaper.com": {
+  "name": "metallicwallpaper",
+  "cwd": "/var/www/metallicwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/metallicwallpaper"
+ },
+ "micawallpaper.com": {
+  "name": "micawallpaper",
+  "cwd": "/var/www/micawallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/micawallpaper"
+ },
+ "museumwallpaper.com": {
+  "name": "museumwallpaper",
+  "cwd": "/var/www/museumwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/museumwallpaper"
+ },
+ "mylarwallpaper.com": {
+  "name": "mylarwallpaper",
+  "cwd": "/var/www/mylarwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/mylarwallpaper"
+ },
+ "naturaltextilewallpaper.com": {
+  "name": "naturaltextilewallpaper",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/naturaltextilewallpaper"
+ },
+ "naturalwallcoverings.com": {
+  "name": "naturalwallcoverings",
+  "cwd": "/var/www/naturalwallcoverings.com",
+  "repo": "/Users/stevestudio2/Projects/naturalwallcoverings"
+ },
+ "pastelwallpaper.com": {
+  "name": "pastelwallpaper",
+  "cwd": "/var/www/pastelwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/pastelwallpaper"
+ },
+ "philipperomano.com": {
+  "name": "philipperomano",
+  "cwd": "/root/public-projects/philipperomano",
+  "repo": "/Users/stevestudio2/Projects/philipperomano"
+ },
+ "raffiawallcoverings.com": {
+  "name": "raffiawallcoverings",
+  "cwd": "/var/www/raffiawallcoverings.com",
+  "repo": "/Users/stevestudio2/Projects/raffiawallcoverings"
+ },
+ "raffiawalls.com": {
+  "name": "raffiawalls",
+  "cwd": "/var/www/raffiawalls.com",
+  "repo": "/Users/stevestudio2/Projects/raffiawalls"
+ },
+ "recycledwallpaper.com": {
+  "name": "recycledwallpaper",
+  "cwd": "/var/www/recycledwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/recycledwallpaper"
+ },
+ "restaurantwallpaper.com": {
+  "name": "restaurantwallpaper",
+  "cwd": "/var/www/restaurantwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/restaurantwallpaper"
+ },
+ "restorationwallpaper.com": {
+  "name": "restorationwallpaper",
+  "cwd": "/var/www/restorationwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/restorationwallpaper"
+ },
+ "saloonwallpaper.com": {
+  "name": "saloonwallpaper",
+  "cwd": "/var/www/saloonwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/saloonwallpaper"
+ },
+ "screenprintedwallpaper.com": {
+  "name": "screenprintedwallpaper",
+  "cwd": "/var/www/screenprintedwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/screenprintedwallpaper"
+ },
+ "silkwallcoverings.com": {
+  "name": "silkwallcoverings",
+  "cwd": "/var/www/silkwallcoverings.com",
+  "repo": "/Users/stevestudio2/Projects/silkwallcoverings"
+ },
+ "silkwallpaper.com": {
+  "name": "silkwallpaper",
+  "cwd": "/var/www/silkwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/silkwallpaper"
+ },
+ "silverleafwallpaper.com": {
+  "name": "silverleafwallpaper",
+  "cwd": "/var/www/silverleafwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/silverleafwallpaper"
+ },
+ "stringwallpaper.com": {
+  "name": "stringwallpaper",
+  "cwd": "/var/www/stringwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/stringwallpaper"
+ },
+ "suedewallpaper.com": {
+  "name": "suedewallpaper",
+  "cwd": "/var/www/suedewallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/suedewallpaper"
+ },
+ "textiletuesday.com": {
+  "name": "textiletuesday",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/textiletuesday"
+ },
+ "textilewallpaper.com": {
+  "name": "textilewallpaper",
+  "cwd": "/var/www/textilewallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/textilewallpaper"
+ },
+ "thesetdecorator.com": {
+  "name": "thesetdecorator",
+  "cwd": "/root/public-projects/thesetdecorator",
+  "repo": "/Users/stevestudio2/Projects/thesetdecorator"
+ },
+ "vinylwallpaper.com": {
+  "name": "vinylwallpaper",
+  "cwd": "/var/www/vinylwallpaper.com",
+  "repo": "/Users/stevestudio2/Projects/vinylwallpaper"
+ },
+ "wallco.ai": {
+  "name": "wallco",
+  "cwd": "/root/Projects/wallco",
+  "repo": "/Users/stevestudio2/Projects/wallco"
+ },
+ "wallco.com": {
+  "name": "wallco",
+  "cwd": "/root/Projects/wallco",
+  "repo": "/Users/stevestudio2/Projects/wallco"
+ },
+ "wallpapercanada.com": {
+  "name": "wallpapercanada",
+  "cwd": "/root/Projects/wallpapercanada",
+  "repo": "/Users/stevestudio2/Projects/wallpapercanada"
+ },
+ "wallpapercontractor.com": {
+  "name": "wallpapercontractor",
+  "cwd": "/root/Projects/wallpapercontractor",
+  "repo": "/Users/stevestudio2/Projects/wallpapercontractor"
+ },
+ "wallpaperdefinitions.com": {
+  "name": "wallpaperdefinitions",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/wallpaperdefinitions"
+ },
+ "wallpaperdictionary.com": {
+  "name": "wallpaperdictionary",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/wallpaperdictionary"
+ },
+ "wallpaperdistributors.com": {
+  "name": "wallpaperdistributors",
+  "cwd": "/root/Projects/wallpaperdistributors",
+  "repo": "/Users/stevestudio2/Projects/wallpaperdistributors"
+ },
+ "wallpaperestimator.com": {
+  "name": "wallpaperestimator",
+  "cwd": "/root/Projects/wallpaperestimator",
+  "repo": "/Users/stevestudio2/Projects/wallpaperestimator"
+ },
+ "wallpaperglossary.com": {
+  "name": "wallpaperglossary",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/wallpaperglossary"
+ },
+ "wallpaperhistory.com": {
+  "name": "wallpaperhistory",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/wallpaperhistory"
+ },
+ "wallpapersback.com": {
+  "name": "wallpapersback",
+  "cwd": "/var/www/wallpapersback.com",
+  "repo": "/Users/stevestudio2/Projects/wallpapersback"
+ },
+ "wallpaperwednesday.com": {
+  "name": "wallpaperwednesday",
+  "cwd": "/root",
+  "repo": "/Users/stevestudio2/Projects/wallpaperwednesday"
+ }
+}
\ No newline at end of file
diff --git a/dw-fleet-registry.json b/dw-fleet-registry.json
index 4b1dec3..8463b3b 100644
--- a/dw-fleet-registry.json
+++ b/dw-fleet-registry.json
@@ -84,10 +84,10 @@
     "scheme": "https",
     "checkedAt": "2026-06-01T19:45:47.045Z"
    },
-   "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T35177.jpg?v=1762233205&width=1600",
+   "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Raffia_Wallpaper_Burma_Square_Image_Rotated_1_d77f76a5-0515-4f71-a36e-9f716a7efa5d.jpg?v=1778629800",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
-   "heroSource": "product"
+   "heroAt": "2026-06-01T22:11:27.746Z",
+   "heroSource": "catalog-refresh"
   },
   {
    "domain": "1800wallcoverings.com",
@@ -135,7 +135,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t34036.jpg?v=1775149508",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -178,7 +178,7 @@
    },
    "heroImage": "https://1890swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -221,7 +221,7 @@
    },
    "heroImage": "https://1900swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -264,7 +264,7 @@
    },
    "heroImage": "https://1920swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -307,7 +307,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72376-sample-clean.jpg?v=1774485266&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -350,7 +350,7 @@
    },
    "heroImage": "https://1940swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -391,10 +391,11 @@
     "scheme": "https",
     "checkedAt": "2026-06-01T19:45:46.526Z"
    },
-   "heroImage": "https://1950swallpaper.com/hero-bg.jpg",
+   "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Untitleddesign_10_9a6e70c8-170a-4583-852d-4192a9c0db4a.png?v=1778630204",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
-   "heroSource": "live"
+   "heroAt": "2026-06-01T22:28:32.539Z",
+   "heroSource": "pool",
+   "heroImages": []
   },
   {
    "domain": "1960swallpaper.com",
@@ -436,7 +437,7 @@
    },
    "heroImage": "https://1960swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -479,7 +480,7 @@
    },
    "heroImage": "https://1970swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -522,7 +523,7 @@
    },
    "heroImage": "https://1980swallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -565,7 +566,7 @@
    },
    "heroImage": "https://agedwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -608,7 +609,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-dwtt-81007-designer-wallcoverings-los-angeles.jpg?v=1775070978&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -651,7 +652,7 @@
    },
    "heroImage": "https://architecturalwallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -700,7 +701,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/selenite-celestine_05a0733d-bc9a-4b5a-8c9e-2bd7068d81af.jpg?v=1777481406",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -749,7 +750,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/0ba8dc45ab39d2f32b3f0bfa0817fa31.jpg?v=1572309972",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -798,7 +799,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/img_88aaf127-9911-47d7-b8a2-4ff0a20c8d61.jpg?v=1775512372",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -847,7 +848,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-201098-sample-hollywood-and-western-hollywood-wallcoverings.jpg?v=1775716918",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -896,7 +897,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BW45141_2_7598bef2-55ce-4530-80c2-706adbab8a89.jpg?v=1776795816",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -938,7 +939,7 @@
    "heroImage": "https://bestwallpaperplace.com/hero-bg.jpg",
    "heroReason": "no-candidates",
    "heroSource": "live",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "blankstocklining.com",
@@ -986,7 +987,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260148.jpg?v=1773968869",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1029,7 +1030,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513499041843.jpg?v=1775522668&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -1081,7 +1082,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W0202_01_CAC.jpg?v=1777020004",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1133,7 +1134,7 @@
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Indienne_Agra_18310_Roomshot_Web_LR-medium-two-thirds.jpg?v=1775694511&width=1600",
    "heroReason": "no-candidates",
    "heroSource": "product",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "cfafabrics.com",
@@ -1181,7 +1182,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6aaa92d98ce154f4eb6902902d268e40.png?v=1775520452",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1223,7 +1224,7 @@
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a03989d448565ac6ac2c483ecbc877e5.jpg?v=1572309983&width=1600",
    "heroReason": "no-candidates",
    "heroSource": "product",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "classawallcovering.com",
@@ -1271,7 +1272,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Freya-Crystal-Ball-1024x914.jpg?v=1775010185",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1320,7 +1321,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/rpl-6327.jpg?v=1762305398",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1369,7 +1370,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/e1175daca55ee8fb67393d08420a4c9b.png?v=1775519649",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1412,7 +1413,7 @@
    },
    "heroImage": "https://contractwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1455,7 +1456,7 @@
    },
    "heroImage": "https://corkwallcovering.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1496,7 +1497,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Indienne_Agra_18310_Roomshot_Web_LR-medium-two-thirds.jpg?v=1775694511",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1545,7 +1546,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE509__silver.jpg?v=1775511844",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1586,7 +1587,7 @@
    },
    "heroImage": "https://www.designerwallcoverings.com/cdn/shop/files/HomeHero_959x640.jpg?v=1773170745",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1629,7 +1630,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010235-sample-hollywood-atelier-woven-hollywood-wallcoverings.jpg?v=1775716985&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -1678,7 +1679,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DD113031-0_e50eb14d-5ce6-431d-b5e6-6343a9ea4b16.jpg?v=1776284867",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1727,7 +1728,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70644.jpg?v=1775156038",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1770,7 +1771,7 @@
    },
    "heroImage": "https://fabricwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1819,7 +1820,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fgb-110-sample-faux-glass-bead-wallpaper.jpg?v=1775711848",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1871,7 +1872,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/583-88_image1_5a69dd41-45e6-4809-845a-770e7aceb0db.jpg?v=1646104605",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1915,7 +1916,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/VV241_art_deco_fans_BLACKGOLD_install_913x_04f5f81c-8fff-4df7-85da-40c679e15e00.webp?v=1734414891",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -1957,7 +1958,7 @@
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/0d1ddcda0d8e4178b62081a96901af6d.jpg?v=1572309483&width=1600",
    "heroReason": "all-candidates-dead",
    "heroSource": "product",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "glitterwalls.com",
@@ -1999,7 +2000,7 @@
    },
    "heroImage": "https://glitterwalls.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2040,7 +2041,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6a78d132a57e1ffc17eb644949e3c00a.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2089,7 +2090,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gatehouse-oat_grass.jpg?v=1777480721",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2132,7 +2133,7 @@
    },
    "heroImage": "https://greenwallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2175,7 +2176,7 @@
    },
    "heroImage": "https://handcraftedwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2224,7 +2225,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Navarre_A202-357-Night_Sky.jpg?v=1773880204",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2267,7 +2268,7 @@
    },
    "heroImage": "https://healthcarewallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2319,7 +2320,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010424-sample-hollywood-contemporary-cobblestone-hollywood-wallcoverings.jpg?v=1775717225",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2365,7 +2366,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/batiste-lime.jpg?v=1777480094",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2407,7 +2408,7 @@
    "heroImage": "https://hospitalitydesignreps.com/hero-bg.jpg",
    "heroReason": "no-candidates",
    "heroSource": "live",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "hospitalitysalesagency.com",
@@ -2455,7 +2456,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwa-52086-sample-canal-damask-durable-vinyl-hollywood-wallcoverings.jpg?v=1775707079",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2503,7 +2504,7 @@
    },
    "heroImage": "https://hospitalitywallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2549,7 +2550,7 @@
    },
    "heroImage": "https://hospitalitywallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2592,7 +2593,7 @@
    },
    "heroImage": "https://hotelwallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2635,7 +2636,7 @@
    },
    "heroImage": "https://jutewallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2678,7 +2679,7 @@
    },
    "heroImage": "https://linenwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2721,7 +2722,7 @@
    },
    "heroImage": "https://madagascarwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2770,7 +2771,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72006-sample-clean.jpg?v=1774483931",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2813,7 +2814,7 @@
    },
    "heroImage": "https://metallicwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2856,7 +2857,7 @@
    },
    "heroImage": "https://micawallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2905,7 +2906,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prelude-opera_white.jpg?v=1777480571",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2948,7 +2949,7 @@
    },
    "heroImage": "https://museumwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -2991,7 +2992,7 @@
    },
    "heroImage": "https://mylarwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3032,7 +3033,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/2022101_5_060796c6-a8c9-450d-a5b7-c0e35f41109a.jpg?v=1726530286",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3075,7 +3076,7 @@
    },
    "heroImage": "https://naturalwallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3124,7 +3125,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58104-sample-gundelson-gunny-sack-vinyl-hollywood-wallcoverings.jpg?v=1775715287",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3167,7 +3168,7 @@
    },
    "heroImage": "https://pastelwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3216,7 +3217,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwq-52978-sample-flagler-embossed-durable-hollywood-wallcoverings.jpg?v=1775713351",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3257,7 +3258,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/2395_quadrat.jpg?v=1576118216",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3306,7 +3307,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/76b4c0554cd76e4ab7ff1fef509c6447.jpg?v=1572310445",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3355,7 +3356,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/20319258.jpg?v=1758052023",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3401,7 +3402,7 @@
    },
    "heroImage": "https://raffiawallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3447,7 +3448,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9d29dc5f11982d34892d18f757d270b6.jpg?v=1750789732&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -3490,7 +3491,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T83042_7e0638bb-5571-48c5-8142-55dbea6e5240.jpg?v=1733894340&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -3539,7 +3540,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Fairfax-Teal-Tropique-1024x914.jpg?v=1775009772",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3588,7 +3589,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-07-22at10.16.45AM.png?v=1658510339",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3631,7 +3632,7 @@
    },
    "heroImage": "https://restaurantwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3674,7 +3675,7 @@
    },
    "heroImage": "https://restorationwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3723,7 +3724,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW170-01-fusuma-wallcovering-parchment_01.jpg?v=1776398815",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3766,7 +3767,7 @@
    },
    "heroImage": "https://saloonwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3809,7 +3810,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/3ae1761583a583821f1f595b3d85bd48.jpg?v=1572309599&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -3852,7 +3853,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GPR-76642-sample-clean_159bebae-b7d0-4f9d-869e-0e4213655524.jpg?v=1774479040&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -3901,7 +3902,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41111_1f573b0e-8c44-48c9-9b04-6eb5cca542c0.jpg?v=1733893672",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3947,7 +3948,7 @@
    },
    "heroImage": "https://silkwallcoverings.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -3993,7 +3994,7 @@
    },
    "heroImage": "https://silkwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4036,7 +4037,7 @@
    },
    "heroImage": "https://silverleafwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4085,7 +4086,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_ad9500.jpg?v=1733874163",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4134,7 +4135,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fdn-5412.jpg?v=1762294570",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4177,7 +4178,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/harrison-solaire_4ddd8e59-7726-4952-8e48-b28f153ded6c.jpg?v=1777480977&width=1600",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "product"
   },
   {
@@ -4220,7 +4221,7 @@
    },
    "heroImage": "https://suedewallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4261,7 +4262,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-hotel_lobby-2022101-5-0.jpg?v=1775086481",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4304,7 +4305,7 @@
    },
    "heroImage": "https://textilewallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4353,7 +4354,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/amami-indigo.jpg?v=1761537957",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4394,7 +4395,7 @@
    },
    "heroImage": "https://thesetdecorator.com/img/tsd-logo.svg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4443,7 +4444,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/120_6023S_CS_e697010a-8303-47bd-8851-6e86dec2c192.jpg?v=1777020006",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4492,7 +4493,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T89177.jpg?v=1762227888",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4535,7 +4536,7 @@
    },
    "heroImage": "https://vinylwallpaper.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4576,7 +4577,7 @@
    },
    "heroImage": "https://wallco.ai/designs/room/design_53872_living_room_hero.png",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4617,7 +4618,7 @@
    },
    "heroImage": "https://wallco.com/storage/app/resources/resize/img_5e421a5ba5bcde740862cd77b955f9e9_680_0_0_0_auto.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4666,7 +4667,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513507037235.jpg?v=1775523903",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4709,7 +4710,7 @@
    },
    "heroImage": "https://wallpapercanada.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4751,7 +4752,7 @@
    "heroImage": "https://wallpapercontractor.com/hero-bg.jpg",
    "heroReason": "no-candidates",
    "heroSource": "live",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "wallpaperdefinitions.com",
@@ -4791,7 +4792,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/java_linen-cassia.jpg?v=1775856233",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4832,7 +4833,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LesTapisseries_Floraison_97870_Roomshot_Web_LR-medium-two-thirds.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -4874,7 +4875,7 @@
    "heroImage": "https://wallpaperdistributors.com/hero-bg.jpg",
    "heroReason": "no-candidates",
    "heroSource": "live",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "wallpaperestimator.com",
@@ -4915,7 +4916,7 @@
    "heroImage": "https://wallpaperestimator.com/hero-bg.jpg",
    "heroReason": "no-candidates",
    "heroSource": "live",
-   "heroAt": "2026-06-01T22:07:27.000Z"
+   "heroAt": "2026-06-01T22:08:11.535Z"
   },
   {
    "domain": "wallpaperexports.com",
@@ -4963,7 +4964,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWTA-65449.jpg?v=1776283654",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5012,7 +5013,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72196-sample-clean.jpg?v=1774484754",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5053,7 +5054,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2022110_821_20f7858e-4602-4187-b2d1-282da682d37a.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5094,7 +5095,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/db9a82d50e4f814d833e3c737140d880.jpg?v=1776041074",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5143,7 +5144,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72294-sample-clean.jpg?v=1774485076",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5192,7 +5193,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72225-sample-clean.jpg?v=1774484809",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5233,7 +5234,7 @@
    },
    "heroImage": "https://wallpapersback.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5274,7 +5275,7 @@
    },
    "heroImage": "https://wallpaperwednesday.com/hero-bg.jpg",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5323,7 +5324,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3625.jpg?v=1733892666",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   },
   {
@@ -5372,7 +5373,7 @@
    },
    "heroImage": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/09620171f63a6edf9af7fcb2057d1f67.jpg?v=1572309178",
    "heroReason": "ok",
-   "heroAt": "2026-06-01T22:07:27.000Z",
+   "heroAt": "2026-06-01T22:08:11.535Z",
    "heroSource": "live"
   }
  ],
diff --git a/viewer/index.html b/viewer/index.html
index e7ea8d8..6cfdda7 100644
--- a/viewer/index.html
+++ b/viewer/index.html
@@ -132,7 +132,8 @@
     <footer>
       <span class="hint" id="poolHint"></span>
       <button class="btn-ghost" id="poolCancel">Cancel</button>
-      <button id="poolSave">Save pool</button>
+      <button class="btn-ghost" id="poolSave">Save (registry)</button>
+      <button id="poolDeploy">Save &amp; deploy live</button>
     </footer>
   </div>
 </div>
@@ -367,17 +368,29 @@ $('#poolList').addEventListener('drop',(e)=>{
   const toI=+it.dataset.i; if(toI===dragI)return;
   const [m]=poolArr.splice(dragI,1); poolArr.splice(toI,0,m); renderPool();
 });
+async function savePool(){
+  const j=await postJSON('/api/hero-pool/set',{domain:poolDomain,images:poolArr});
+  if(j.ok){ const s=SITES.find(x=>x.domain===poolDomain); if(s){ s.heroImages=j.images; s.heroImage=j.primary||s.heroImage; } }
+  return j;
+}
 $('#poolSave').onclick=async()=>{
   const b=$('#poolSave'); b.disabled=true; b.textContent='saving…';
-  try{
-    const j=await postJSON('/api/hero-pool/set',{domain:poolDomain,images:poolArr});
-    if(j.ok){
-      const s=SITES.find(x=>x.domain===poolDomain); if(s){ s.heroImages=j.images; s.heroImage=j.primary||s.heroImage; }
-      toast('Saved '+j.images.length+' hero'+(j.images.length===1?'':'es')+' for '+poolDomain);
-      closePool(); render();
-    } else toast('Save failed: '+(j.error||'unknown'));
+  try{ const j=await savePool();
+    if(j.ok){ toast('Saved '+j.images.length+' hero'+(j.images.length===1?'':'es')+' (registry) for '+poolDomain); closePool(); render(); }
+    else toast('Save failed: '+(j.error||'unknown'));
   }catch{ toast('Save failed'); }
-  finally{ b.disabled=false; b.textContent='Save pool'; }
+  finally{ b.disabled=false; b.textContent='Save (registry)'; }
+};
+$('#poolDeploy').onclick=async()=>{
+  const b=$('#poolDeploy'); b.disabled=true; b.textContent='deploying…';
+  try{
+    const j=await savePool();
+    if(!j.ok){ toast('Save failed: '+(j.error||'unknown')); return; }
+    const dj=await postJSON('/api/hero-pool/deploy',{domain:poolDomain});
+    if(dj.ok){ toast('Deployed '+dj.count+' hero'+(dj.count===1?'':'es')+' live → '+poolDomain); closePool(); render(); }
+    else toast('Deploy failed: '+(dj.error||'unknown'));
+  }catch{ toast('Deploy failed'); }
+  finally{ b.disabled=false; b.textContent='Save & deploy live'; }
 };
 document.addEventListener('keydown',(e)=>{ if(e.key==='Escape'&&$('#poolModal').classList.contains('show')) closePool(); });
 
diff --git a/viewer/server.mjs b/viewer/server.mjs
index 10919c7..a6a9104 100644
--- a/viewer/server.mjs
+++ b/viewer/server.mjs
@@ -284,6 +284,33 @@ const server = http.createServer(async (req, res) => {
       return json(res, 200, { ok: true, domain: d, images, primary: images[0] || null });
     } catch (e) { return json(res, 500, { error: String(e && e.message || e) }); }
   }
+  // Push one site's curated hero pool LIVE: write hero-pool.json into the repo +
+  // rsync it to the prod public/ dir (static — no reload needed). Reads heroImages[]
+  // from the registry and the slug->cwd->repo map in data/deploy-map.json.
+  if (u.pathname === '/api/hero-pool/deploy' && req.method === 'POST') {
+    let d = '';
+    try { d = (JSON.parse((await readBody(req)).toString('utf8') || '{}').domain || ''); } catch { /* bad */ }
+    if (!/^[a-z0-9.-]+$/i.test(d)) return json(res, 400, { error: 'bad domain' });
+    let reg, mapAll;
+    try { reg = JSON.parse(fs.readFileSync(REG, 'utf8')); } catch { return json(res, 500, { error: 'registry read failed' }); }
+    try { mapAll = JSON.parse(fs.readFileSync(path.join(DIR, '..', 'data', 'deploy-map.json'), 'utf8')); } catch { return json(res, 500, { error: 'deploy-map missing' }); }
+    const site = (reg.sites || []).find(s => s.domain === d);
+    const dep = mapAll[d];
+    if (!site) return json(res, 404, { error: 'domain not in registry' });
+    if (!dep || !dep.repo || !dep.cwd) return json(res, 409, { error: 'no deploy target for ' + d + ' (redirect-only or unmapped)' });
+    const images = Array.isArray(site.heroImages) ? site.heroImages : (site.heroImage ? [site.heroImage] : []);
+    const poolPath = path.join(dep.repo, 'public', 'hero-pool.json');
+    try { fs.mkdirSync(path.join(dep.repo, 'public'), { recursive: true }); fs.writeFileSync(poolPath, JSON.stringify(images, null, 0)); }
+    catch (e) { return json(res, 500, { error: 'write local hero-pool.json failed: ' + (e && e.message) }); }
+    const p = spawn('rsync', ['-az', poolPath, `my-server:${dep.cwd}/public/hero-pool.json`]);
+    let err = '';
+    p.stderr.on('data', x => err += x);
+    p.on('close', code => json(res, code === 0 ? 200 : 502, code === 0
+      ? { ok: true, domain: d, count: images.length, url: 'https://' + d + '/hero-pool.json' }
+      : { error: 'rsync failed: ' + err.slice(-300) }));
+    p.on('error', e => json(res, 500, { error: String(e && e.message || e) }));
+    return;
+  }
   if (u.pathname === '/api/reprobe' && req.method === 'POST') {
     heroCache.clear();   // force fresh hero resolution after a re-probe
     const root = path.join(DIR, '..');

← 706726c viewer: hero-pool picker — pick high-res images to rotate pe  ·  back to Dw Fleet Registry  ·  fleet viewer: downsize grid thumbnails (Shopify width param) 389f621 →