[object Object]

← back to Dw Fleet Registry

live fleet viewer (:9774) — 119 cards, live og:image thumbs + status, per-site theme accents, sort+density; carry theme tokens in registry

bf16606466836dc72efdead0eb5307a49da43cb5 · 2026-06-01 12:46:27 -0700 · Steve Abrams

Files touched

Diff

commit bf16606466836dc72efdead0eb5307a49da43cb5
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Jun 1 12:46:27 2026 -0700

    live fleet viewer (:9774) — 119 cards, live og:image thumbs + status, per-site theme accents, sort+density; carry theme tokens in registry
---
 build-registry.mjs     |    2 +
 dw-fleet-registry.json | 1194 ++++++++++++++++++++++++++++++++++++++----------
 viewer/index.html      |  137 ++++++
 viewer/server.mjs      |   67 +++
 4 files changed, 1160 insertions(+), 240 deletions(-)

diff --git a/build-registry.mjs b/build-registry.mjs
index 752f7f5..65410a0 100644
--- a/build-registry.mjs
+++ b/build-registry.mjs
@@ -56,6 +56,7 @@ function scanLocal() {
       hasSiteConfig: !!cfg,
       domainInferred: !(cfg && cfg.domain),
       port: (cfg && cfg.port) || null,
+      theme: (cfg && cfg.theme) || null,
     });
   }
   return out;
@@ -81,6 +82,7 @@ function scanManifest() {
       port: cfg.port || null,
       siteEmail: cfg.siteEmail || null,
       hasLocalDir: exists(path.join(PROJECTS, slug)),
+      theme: cfg.theme || null,
     });
   }
   return out;
diff --git a/dw-fleet-registry.json b/dw-fleet-registry.json
index 6ec84e7..57790e3 100644
--- a/dw-fleet-registry.json
+++ b/dw-fleet-registry.json
@@ -1,6 +1,6 @@
 {
   "$schema": "dw-fleet-registry/v1",
-  "generatedAt": "2026-06-01T19:19:37.047Z",
+  "generatedAt": "2026-06-01T19:45:45.840Z",
   "provenance": "DTD verdict 2026-06-01 — consolidate to one canonical registry (control plane only; serving methods pluggable).",
   "summary": {
     "totalDomains": 119,
@@ -69,7 +69,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9856
+        "port": 9856,
+        "theme": {
+          "accent": "#c89060"
+        }
       },
       "manifest": null,
       "live": {
@@ -79,7 +82,7 @@
         "server": "nginx",
         "redirectedOffDomain": "1890swallpaper.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.881Z"
+        "checkedAt": "2026-06-01T19:45:47.045Z"
       }
     },
     {
@@ -103,7 +106,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/1800wallcoverings.json",
         "port": 10001,
         "siteEmail": "info@1800wallcoverings.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7d3c00",
+          "bg": "#14110d",
+          "bgLight": "#faf7f2",
+          "ink": "#f3efe8",
+          "inkLight": "#1a1714",
+          "rule": "#d8cec0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ivory",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -112,7 +127,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.310Z"
+        "checkedAt": "2026-06-01T19:45:46.100Z"
       }
     },
     {
@@ -138,7 +153,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9857
+        "port": 9857,
+        "theme": {
+          "accent": "#d4a847"
+        }
       },
       "manifest": null,
       "live": {
@@ -148,7 +166,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.443Z"
+        "checkedAt": "2026-06-01T19:45:46.258Z"
       }
     },
     {
@@ -174,7 +192,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#a89060"
+        }
       },
       "manifest": null,
       "live": {
@@ -184,7 +205,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.381Z"
+        "checkedAt": "2026-06-01T19:45:46.211Z"
       }
     },
     {
@@ -210,7 +231,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#d4a847"
+        }
       },
       "manifest": null,
       "live": {
@@ -220,7 +244,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.425Z"
+        "checkedAt": "2026-06-01T19:45:46.323Z"
       }
     },
     {
@@ -246,7 +270,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9837
+        "port": 9837,
+        "theme": {
+          "accent": "#9eb8c8"
+        }
       },
       "manifest": null,
       "live": {
@@ -256,7 +283,7 @@
         "server": "nginx",
         "redirectedOffDomain": "1920swallpaper.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.455Z"
+        "checkedAt": "2026-06-01T19:45:46.398Z"
       }
     },
     {
@@ -282,7 +309,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9838
+        "port": 9838,
+        "theme": {
+          "accent": "#d49a55"
+        }
       },
       "manifest": null,
       "live": {
@@ -292,7 +322,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.492Z"
+        "checkedAt": "2026-06-01T19:45:46.473Z"
       }
     },
     {
@@ -318,7 +348,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9908
+        "port": 9908,
+        "theme": {
+          "accent": "#d8a878"
+        }
       },
       "manifest": null,
       "live": {
@@ -328,7 +361,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.614Z"
+        "checkedAt": "2026-06-01T19:45:46.526Z"
       }
     },
     {
@@ -354,7 +387,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9839
+        "port": 9839,
+        "theme": {
+          "accent": "#ff5cd0"
+        }
       },
       "manifest": null,
       "live": {
@@ -364,7 +400,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.608Z"
+        "checkedAt": "2026-06-01T19:45:46.614Z"
       }
     },
     {
@@ -390,7 +426,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#d4a047"
+        }
       },
       "manifest": null,
       "live": {
@@ -400,7 +439,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.739Z"
+        "checkedAt": "2026-06-01T19:45:46.670Z"
       }
     },
     {
@@ -426,7 +465,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9909
+        "port": 9909,
+        "theme": {
+          "accent": "#ff007a"
+        }
       },
       "manifest": null,
       "live": {
@@ -436,7 +478,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.702Z"
+        "checkedAt": "2026-06-01T19:45:46.684Z"
       }
     },
     {
@@ -462,7 +504,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#7a6a52"
+        }
       },
       "manifest": null,
       "live": {
@@ -472,7 +517,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.745Z"
+        "checkedAt": "2026-06-01T19:45:46.832Z"
       }
     },
     {
@@ -498,7 +543,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9893
+        "port": 9893,
+        "theme": {
+          "accent": "#a89072"
+        }
       },
       "manifest": null,
       "live": {
@@ -508,7 +556,7 @@
         "server": "nginx",
         "redirectedOffDomain": "wallpapersback.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.521Z"
+        "checkedAt": "2026-06-01T19:45:47.739Z"
       }
     },
     {
@@ -534,7 +582,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#7a8a9a"
+        }
       },
       "manifest": null,
       "live": {
@@ -544,7 +595,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.865Z"
+        "checkedAt": "2026-06-01T19:45:46.908Z"
       }
     },
     {
@@ -568,7 +619,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/asseeninhotels.json",
         "port": 10002,
         "siteEmail": "info@asseeninhotels.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#b08923",
+          "bg": "#0d0b06",
+          "bgLight": "#f7f3e8",
+          "ink": "#f2ecd8",
+          "inkLight": "#1c1810",
+          "rule": "#d8caa0",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "gilt",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -577,7 +640,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.878Z"
+        "checkedAt": "2026-06-01T19:45:46.932Z"
       }
     },
     {
@@ -601,7 +664,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/asseeninla.json",
         "port": 10003,
         "siteEmail": "info@asseeninla.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#a8884a",
+          "bg": "#0a0a09",
+          "bgLight": "#f4f2ee",
+          "ink": "#f0ede6",
+          "inkLight": "#15140f",
+          "rule": "#cfcabf",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "noir",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -610,7 +685,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.897Z"
+        "checkedAt": "2026-06-01T19:45:47.036Z"
       }
     },
     {
@@ -634,7 +709,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/asseeninmovies.json",
         "port": 10004,
         "siteEmail": "info@asseeninmovies.com",
-        "hasLocalDir": true
+        "hasLocalDir": true,
+        "theme": {
+          "accent": "#a8884a",
+          "bg": "#0a0a09",
+          "bgLight": "#f4f2ee",
+          "ink": "#f0ede6",
+          "inkLight": "#15140f",
+          "rule": "#cfcabf",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "noir",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -643,7 +730,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.915Z"
+        "checkedAt": "2026-06-01T19:45:47.075Z"
       }
     },
     {
@@ -667,7 +754,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/asseeninshowrooms.json",
         "port": 10005,
         "siteEmail": "info@asseeninshowrooms.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -676,7 +775,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.983Z"
+        "checkedAt": "2026-06-01T19:45:47.172Z"
       }
     },
     {
@@ -700,7 +799,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/barwallpaper.json",
         "port": 10006,
         "siteEmail": "info@barwallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7a2230",
+          "bg": "#120a08",
+          "bgLight": "#f6f0ee",
+          "ink": "#f0e6e2",
+          "inkLight": "#1d1310",
+          "rule": "#d4c2bb",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "bordeaux",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -709,7 +820,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:37.982Z"
+        "checkedAt": "2026-06-01T19:45:47.206Z"
       }
     },
     {
@@ -735,7 +846,8 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9920
+        "port": 9920,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -745,7 +857,7 @@
         "server": null,
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.153Z"
+        "checkedAt": "2026-06-01T19:45:47.346Z"
       }
     },
     {
@@ -769,7 +881,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/blankstocklining.json",
         "port": 10007,
         "siteEmail": "info@blankstocklining.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#444440",
+          "bg": "#080807",
+          "bgLight": "#f1f1f0",
+          "ink": "#ededec",
+          "inkLight": "#121211",
+          "rule": "#c8c8c5",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ink",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -778,7 +902,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.008Z"
+        "checkedAt": "2026-06-01T19:45:47.341Z"
       }
     },
     {
@@ -802,7 +926,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/bleachfriendly.json",
         "port": 10008,
         "siteEmail": "info@bleachfriendly.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#2a7d8a",
+          "bg": "#0a1113",
+          "bgLight": "#f0f4f5",
+          "ink": "#e6eef0",
+          "inkLight": "#10191c",
+          "rule": "#bdcdd0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "coastal",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -811,7 +947,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.154Z"
+        "checkedAt": "2026-06-01T19:45:47.323Z"
       }
     },
     {
@@ -837,7 +973,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9895
+        "port": 9895,
+        "theme": {
+          "accent": "#b85c40"
+        }
       },
       "manifest": null,
       "live": {
@@ -847,7 +986,7 @@
         "server": "nginx",
         "redirectedOffDomain": "handcraftedwallpaper.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.885Z"
+        "checkedAt": "2026-06-01T19:45:48.494Z"
       }
     },
     {
@@ -871,7 +1010,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/carmelwallpaper.json",
         "port": 10009,
         "siteEmail": "info@carmelwallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#5a6f3e",
+          "bg": "#10120c",
+          "bgLight": "#f3f4ee",
+          "ink": "#eef0e6",
+          "inkLight": "#1c1f17",
+          "rule": "#cdd0c0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "sage",
+          "font": "cormorant"
+        }
       },
       "clusterCanonical": "carmelwallpaper.com",
       "isCanonical": true,
@@ -883,7 +1034,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.324Z"
+        "checkedAt": "2026-06-01T19:45:47.507Z"
       }
     },
     {
@@ -909,7 +1060,15 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9832
+        "port": 9832,
+        "theme": {
+          "accent": "#8B7355",
+          "accentSoft": "#b8a48a",
+          "bg": "#12100d",
+          "bgLight": "#f7f3ec",
+          "ink": "#f0ebe3",
+          "inkLight": "#1a1612"
+        }
       },
       "manifest": null,
       "clusterCanonical": "carmelwallpaper.com",
@@ -922,7 +1081,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.212Z"
+        "checkedAt": "2026-06-01T19:45:47.603Z"
       }
     },
     {
@@ -946,7 +1105,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/cfafabrics.json",
         "port": 10010,
         "siteEmail": "info@cfafabrics.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#a85a5f",
+          "bg": "#130c0b",
+          "bgLight": "#f8f1f0",
+          "ink": "#f1e6e3",
+          "inkLight": "#1f1614",
+          "rule": "#dcc8c4",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "blush",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -955,7 +1126,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.368Z"
+        "checkedAt": "2026-06-01T19:45:47.602Z"
       }
     },
     {
@@ -981,7 +1152,8 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -991,7 +1163,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.403Z"
+        "checkedAt": "2026-06-01T19:45:47.729Z"
       }
     },
     {
@@ -1015,7 +1187,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/classawallcovering.json",
         "port": 10011,
         "siteEmail": "info@classawallcovering.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -1024,7 +1208,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.476Z"
+        "checkedAt": "2026-06-01T19:45:47.904Z"
       }
     },
     {
@@ -1048,7 +1232,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/commercialsalesreps.json",
         "port": 10012,
         "siteEmail": "info@commercialsalesreps.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#444440",
+          "bg": "#080807",
+          "bgLight": "#f1f1f0",
+          "ink": "#ededec",
+          "inkLight": "#121211",
+          "rule": "#c8c8c5",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ink",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -1057,7 +1253,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.592Z"
+        "checkedAt": "2026-06-01T19:45:47.896Z"
       }
     },
     {
@@ -1081,7 +1277,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/commercialwallcovering.json",
         "port": 10013,
         "siteEmail": "info@commercialwallcovering.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -1090,7 +1298,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.611Z"
+        "checkedAt": "2026-06-01T19:45:47.988Z"
       }
     },
     {
@@ -1116,7 +1324,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9849
+        "port": 9849,
+        "theme": {
+          "accent": "#7ea8d4"
+        }
       },
       "manifest": null,
       "live": {
@@ -1126,7 +1337,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.727Z"
+        "checkedAt": "2026-06-01T19:45:48.043Z"
       }
     },
     {
@@ -1152,7 +1363,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9848
+        "port": 9848,
+        "theme": {
+          "accent": "#a87030"
+        }
       },
       "manifest": null,
       "live": {
@@ -1162,7 +1376,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.813Z"
+        "checkedAt": "2026-06-01T19:45:48.129Z"
       }
     },
     {
@@ -1188,7 +1402,8 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -1198,7 +1413,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.741Z"
+        "checkedAt": "2026-06-01T19:45:48.124Z"
       }
     },
     {
@@ -1222,7 +1437,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/designermagnetics.json",
         "port": 10014,
         "siteEmail": "info@designermagnetics.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "slate",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -1231,7 +1458,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.840Z"
+        "checkedAt": "2026-06-01T19:45:48.246Z"
       }
     },
     {
@@ -1257,7 +1484,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -1267,7 +1495,7 @@
         "server": "cloudflare",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.812Z"
+        "checkedAt": "2026-06-01T19:45:49.214Z"
       }
     },
     {
@@ -1293,7 +1521,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#8c4a6a"
+        }
       },
       "manifest": null,
       "live": {
@@ -1303,7 +1534,7 @@
         "server": "nginx",
         "redirectedOffDomain": "fabricwallpaper.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.713Z"
+        "checkedAt": "2026-06-01T19:45:49.107Z"
       }
     },
     {
@@ -1327,7 +1558,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/etciemurals.json",
         "port": 10015,
         "siteEmail": "info@etciemurals.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#6a3a7a",
+          "bg": "#0e0a10",
+          "bgLight": "#f3eff3",
+          "ink": "#ece4ee",
+          "inkLight": "#1a131c",
+          "rule": "#cdc1d0",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "plum",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -1336,7 +1579,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.953Z"
+        "checkedAt": "2026-06-01T19:45:48.389Z"
       }
     },
     {
@@ -1360,7 +1603,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/fabricfridays.json",
         "port": 10016,
         "siteEmail": "info@fabricfridays.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#a85a5f",
+          "bg": "#130c0b",
+          "bgLight": "#f8f1f0",
+          "ink": "#f1e6e3",
+          "inkLight": "#1f1614",
+          "rule": "#dcc8c4",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "blush",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -1369,7 +1624,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:38.976Z"
+        "checkedAt": "2026-06-01T19:45:48.511Z"
       }
     },
     {
@@ -1395,7 +1650,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9846
+        "port": 9846,
+        "theme": {
+          "accent": "#b89060"
+        }
       },
       "manifest": null,
       "live": {
@@ -1405,7 +1663,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.139Z"
+        "checkedAt": "2026-06-01T19:45:48.646Z"
       }
     },
     {
@@ -1429,7 +1687,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/fireratedwallcovering.json",
         "port": 10017,
         "siteEmail": "info@fireratedwallcovering.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -1438,7 +1708,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.105Z"
+        "checkedAt": "2026-06-01T19:45:48.643Z"
       }
     },
     {
@@ -1462,7 +1732,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/flocked.json",
         "port": 10018,
         "siteEmail": "info@flocked.org",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7a2230",
+          "bg": "#120a08",
+          "bgLight": "#f6f0ee",
+          "ink": "#f0e6e2",
+          "inkLight": "#1d1310",
+          "rule": "#d4c2bb",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "bordeaux",
+          "font": "bodoni"
+        }
       },
       "clusterCanonical": "flockedwallpaper.com",
       "isCanonical": false,
@@ -1474,7 +1756,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.200Z"
+        "checkedAt": "2026-06-01T19:45:48.700Z"
       }
     },
     {
@@ -1500,7 +1782,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "clusterCanonical": "flockedwallpaper.com",
@@ -1513,7 +1796,7 @@
         "server": "cloudflare",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.276Z"
+        "checkedAt": "2026-06-01T19:45:48.826Z"
       }
     },
     {
@@ -1539,7 +1822,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -1549,7 +1833,7 @@
         "server": "cloudflare",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.437Z"
+        "checkedAt": "2026-06-01T19:45:48.827Z"
       }
     },
     {
@@ -1575,7 +1859,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#d4af37"
+        }
       },
       "manifest": null,
       "live": {
@@ -1585,7 +1872,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.345Z"
+        "checkedAt": "2026-06-01T19:45:48.929Z"
       }
     },
     {
@@ -1611,7 +1898,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -1621,7 +1909,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.479Z"
+        "checkedAt": "2026-06-01T19:45:48.943Z"
       }
     },
     {
@@ -1645,7 +1933,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/grassclothwallcovering.json",
         "port": 10019,
         "siteEmail": "info@grassclothwallcovering.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#5a6f3e",
+          "bg": "#10120c",
+          "bgLight": "#f3f4ee",
+          "ink": "#eef0e6",
+          "inkLight": "#1c1f17",
+          "rule": "#cdd0c0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "sage",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -1654,7 +1954,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.414Z"
+        "checkedAt": "2026-06-01T19:45:49.040Z"
       }
     },
     {
@@ -1680,7 +1980,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#5a7a4a"
+        }
       },
       "manifest": null,
       "live": {
@@ -1690,7 +1993,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.547Z"
+        "checkedAt": "2026-06-01T19:45:49.105Z"
       }
     },
     {
@@ -1716,7 +2019,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9897
+        "port": 9897,
+        "theme": {
+          "accent": "#a07050"
+        }
       },
       "manifest": null,
       "live": {
@@ -1726,7 +2032,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.489Z"
+        "checkedAt": "2026-06-01T19:45:49.046Z"
       }
     },
     {
@@ -1750,7 +2056,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/handmadewallcovering.json",
         "port": 10020,
         "siteEmail": "info@handmadewallcovering.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#9c6b30",
+          "bg": "#16120a",
+          "bgLight": "#f6f1e7",
+          "ink": "#f1ead9",
+          "inkLight": "#211c12",
+          "rule": "#d6c9ad",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "sand",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -1759,7 +2077,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.616Z"
+        "checkedAt": "2026-06-01T19:45:49.173Z"
       }
     },
     {
@@ -1785,7 +2103,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9859
+        "port": 9859,
+        "theme": {
+          "accent": "#80c8b8"
+        }
       },
       "manifest": null,
       "live": {
@@ -1795,7 +2116,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.675Z"
+        "checkedAt": "2026-06-01T19:45:49.221Z"
       }
     },
     {
@@ -1819,7 +2140,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/hollywoodwallcovering.json",
         "port": 10021,
         "siteEmail": "info@hollywoodwallcovering.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#b08923",
+          "bg": "#0d0b06",
+          "bgLight": "#f7f3e8",
+          "ink": "#f2ecd8",
+          "inkLight": "#1c1810",
+          "rule": "#d8caa0",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "gilt",
+          "font": "bodoni"
+        }
       },
       "clusterCanonical": "hollywoodwallcoverings.com",
       "isCanonical": false,
@@ -1831,7 +2164,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.687Z"
+        "checkedAt": "2026-06-01T19:45:49.276Z"
       }
     },
     {
@@ -1857,7 +2190,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#b89060"
+        }
       },
       "manifest": null,
       "clusterCanonical": "hollywoodwallcoverings.com",
@@ -1870,7 +2206,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.857Z"
+        "checkedAt": "2026-06-01T19:45:49.344Z"
       }
     },
     {
@@ -1896,7 +2232,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -1906,7 +2243,7 @@
         "server": null,
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.799Z"
+        "checkedAt": "2026-06-01T19:45:49.512Z"
       }
     },
     {
@@ -1930,7 +2267,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/hospitalitysalesagency.json",
         "port": 10022,
         "siteEmail": "info@hospitalitysalesagency.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#b08923",
+          "bg": "#0d0b06",
+          "bgLight": "#f7f3e8",
+          "ink": "#f2ecd8",
+          "inkLight": "#1c1810",
+          "rule": "#d8caa0",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "gilt",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -1939,7 +2288,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.814Z"
+        "checkedAt": "2026-06-01T19:45:49.454Z"
       }
     },
     {
@@ -1965,7 +2314,12 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9866
+        "port": 9866,
+        "theme": {
+          "bg": "#0E1116",
+          "paper": "#F2EBDD",
+          "accent": "#A88A4F"
+        }
       },
       "manifest": null,
       "clusterCanonical": "hospitalitywallcoverings.com",
@@ -1978,7 +2332,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.897Z"
+        "checkedAt": "2026-06-01T19:45:49.551Z"
       }
     },
     {
@@ -2004,7 +2358,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9855
+        "port": 9855,
+        "theme": {
+          "accent": "#d4a847"
+        }
       },
       "manifest": null,
       "clusterCanonical": "hospitalitywallcoverings.com",
@@ -2017,7 +2374,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:39.993Z"
+        "checkedAt": "2026-06-01T19:45:49.625Z"
       }
     },
     {
@@ -2043,7 +2400,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9910
+        "port": 9910,
+        "theme": {
+          "accent": "#d4a847"
+        }
       },
       "manifest": null,
       "live": {
@@ -2053,7 +2413,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.042Z"
+        "checkedAt": "2026-06-01T19:45:49.706Z"
       }
     },
     {
@@ -2079,7 +2439,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9911
+        "port": 9911,
+        "theme": {
+          "accent": "#c89858"
+        }
       },
       "manifest": null,
       "live": {
@@ -2089,7 +2452,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.118Z"
+        "checkedAt": "2026-06-01T19:45:49.735Z"
       }
     },
     {
@@ -2115,7 +2478,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9842
+        "port": 9842,
+        "theme": {
+          "accent": "#a89060"
+        }
       },
       "manifest": null,
       "live": {
@@ -2125,7 +2491,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.171Z"
+        "checkedAt": "2026-06-01T19:45:49.844Z"
       }
     },
     {
@@ -2151,7 +2517,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#8c6a3a"
+        }
       },
       "manifest": null,
       "live": {
@@ -2161,7 +2530,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.254Z"
+        "checkedAt": "2026-06-01T19:45:49.895Z"
       }
     },
     {
@@ -2185,7 +2554,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/malibuwallpaper.json",
         "port": 10023,
         "siteEmail": "info@malibuwallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#2a7d8a",
+          "bg": "#0a1113",
+          "bgLight": "#f0f4f5",
+          "ink": "#e6eef0",
+          "inkLight": "#10191c",
+          "rule": "#bdcdd0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "coastal",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -2194,7 +2575,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.304Z"
+        "checkedAt": "2026-06-01T19:45:49.936Z"
       }
     },
     {
@@ -2220,7 +2601,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9847
+        "port": 9847,
+        "theme": {
+          "accent": "#c8a878"
+        }
       },
       "manifest": null,
       "live": {
@@ -2230,7 +2614,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.384Z"
+        "checkedAt": "2026-06-01T19:45:50.031Z"
       }
     },
     {
@@ -2256,7 +2640,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#b8a87c"
+        }
       },
       "manifest": null,
       "live": {
@@ -2266,7 +2653,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.447Z"
+        "checkedAt": "2026-06-01T19:45:50.097Z"
       }
     },
     {
@@ -2290,7 +2677,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/montereywallpaper.json",
         "port": 10024,
         "siteEmail": "info@montereywallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#5a6f3e",
+          "bg": "#10120c",
+          "bgLight": "#f3f4ee",
+          "ink": "#eef0e6",
+          "inkLight": "#1c1f17",
+          "rule": "#cdd0c0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "sage",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -2299,7 +2698,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.504Z"
+        "checkedAt": "2026-06-01T19:45:50.127Z"
       }
     },
     {
@@ -2325,7 +2724,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9899
+        "port": 9899,
+        "theme": {
+          "accent": "#6a5a4a"
+        }
       },
       "manifest": null,
       "live": {
@@ -2335,7 +2737,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.632Z"
+        "checkedAt": "2026-06-01T19:45:50.230Z"
       }
     },
     {
@@ -2361,7 +2763,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#c0c0c0"
+        }
       },
       "manifest": null,
       "live": {
@@ -2371,7 +2776,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.572Z"
+        "checkedAt": "2026-06-01T19:45:50.304Z"
       }
     },
     {
@@ -2397,7 +2802,8 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -2407,7 +2813,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.716Z"
+        "checkedAt": "2026-06-01T19:45:50.328Z"
       }
     },
     {
@@ -2433,7 +2839,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9900
+        "port": 9900,
+        "theme": {
+          "accent": "#9a8a6a"
+        }
       },
       "manifest": null,
       "live": {
@@ -2443,7 +2852,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.677Z"
+        "checkedAt": "2026-06-01T19:45:50.454Z"
       }
     },
     {
@@ -2467,7 +2876,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/naturalwalltextures.json",
         "port": 10025,
         "siteEmail": "info@naturalwalltextures.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#5a6f3e",
+          "bg": "#10120c",
+          "bgLight": "#f3f4ee",
+          "ink": "#eef0e6",
+          "inkLight": "#1c1f17",
+          "rule": "#cdd0c0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "sage",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -2476,7 +2897,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.783Z"
+        "checkedAt": "2026-06-01T19:45:50.406Z"
       }
     },
     {
@@ -2502,7 +2923,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#e8c0c8"
+        }
       },
       "manifest": null,
       "live": {
@@ -2512,7 +2936,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.781Z"
+        "checkedAt": "2026-06-01T19:45:50.514Z"
       }
     },
     {
@@ -2536,7 +2960,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/patterndesignlab.json",
         "port": 10026,
         "siteEmail": "info@patterndesignlab.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#6a3a7a",
+          "bg": "#0e0a10",
+          "bgLight": "#f3eff3",
+          "ink": "#ece4ee",
+          "inkLight": "#1a131c",
+          "rule": "#cdc1d0",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "plum",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -2545,7 +2981,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.855Z"
+        "checkedAt": "2026-06-01T19:45:50.583Z"
       }
     },
     {
@@ -2571,7 +3007,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -2581,7 +3018,7 @@
         "server": "cloudflare",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.949Z"
+        "checkedAt": "2026-06-01T19:45:50.647Z"
       }
     },
     {
@@ -2605,7 +3042,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/philliperomano.json",
         "port": 10027,
         "siteEmail": "info@philliperomano.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#a8884a",
+          "bg": "#0a0a09",
+          "bgLight": "#f4f2ee",
+          "ink": "#f0ede6",
+          "inkLight": "#15140f",
+          "rule": "#cfcabf",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "noir",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -2614,7 +3063,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.019Z"
+        "checkedAt": "2026-06-01T19:45:50.748Z"
       }
     },
     {
@@ -2638,7 +3087,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/printmurals.json",
         "port": 10028,
         "siteEmail": "info@printmurals.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#6a3a7a",
+          "bg": "#0e0a10",
+          "bgLight": "#f3eff3",
+          "ink": "#ece4ee",
+          "inkLight": "#1a131c",
+          "rule": "#cdc1d0",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "plum",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -2647,7 +3108,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.932Z"
+        "checkedAt": "2026-06-01T19:45:50.773Z"
       }
     },
     {
@@ -2673,7 +3134,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9845
+        "port": 9845,
+        "theme": {
+          "accent": "#b89058"
+        }
       },
       "manifest": null,
       "clusterCanonical": "raffiawallcoverings.com",
@@ -2686,7 +3150,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:40.957Z"
+        "checkedAt": "2026-06-01T19:45:50.855Z"
       }
     },
     {
@@ -2712,7 +3176,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9901
+        "port": 9901,
+        "theme": {
+          "accent": "#b89058"
+        }
       },
       "manifest": null,
       "clusterCanonical": "raffiawallcoverings.com",
@@ -2725,7 +3192,7 @@
         "server": "nginx",
         "redirectedOffDomain": "raffiawallcoverings.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.152Z"
+        "checkedAt": "2026-06-01T19:45:50.882Z"
       }
     },
     {
@@ -2751,7 +3218,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9902
+        "port": 9902,
+        "theme": {
+          "accent": "#5a8a6a"
+        }
       },
       "manifest": null,
       "live": {
@@ -2761,7 +3231,7 @@
         "server": "nginx",
         "redirectedOffDomain": "naturalwallcoverings.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.301Z"
+        "checkedAt": "2026-06-01T19:45:50.974Z"
       }
     },
     {
@@ -2785,7 +3255,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/restaurantfabrics.json",
         "port": 10029,
         "siteEmail": "info@restaurantfabrics.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7a2230",
+          "bg": "#120a08",
+          "bgLight": "#f6f0ee",
+          "ink": "#f0e6e2",
+          "inkLight": "#1d1310",
+          "rule": "#d4c2bb",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "bordeaux",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -2794,7 +3276,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.192Z"
+        "checkedAt": "2026-06-01T19:45:51.014Z"
       }
     },
     {
@@ -2818,7 +3300,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/restaurantmurals.json",
         "port": 10030,
         "siteEmail": "info@restaurantmurals.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7a2230",
+          "bg": "#120a08",
+          "bgLight": "#f6f0ee",
+          "ink": "#f0e6e2",
+          "inkLight": "#1d1310",
+          "rule": "#d4c2bb",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "bordeaux",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -2827,7 +3321,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.189Z"
+        "checkedAt": "2026-06-01T19:45:51.052Z"
       }
     },
     {
@@ -2853,7 +3347,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9854
+        "port": 9854,
+        "theme": {
+          "accent": "#a04030"
+        }
       },
       "manifest": null,
       "live": {
@@ -2863,7 +3360,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.366Z"
+        "checkedAt": "2026-06-01T19:45:51.114Z"
       }
     },
     {
@@ -2889,7 +3386,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9903
+        "port": 9903,
+        "theme": {
+          "accent": "#8a6a4a"
+        }
       },
       "manifest": null,
       "live": {
@@ -2899,7 +3399,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.379Z"
+        "checkedAt": "2026-06-01T19:45:51.224Z"
       }
     },
     {
@@ -2923,7 +3423,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/roomsettings.json",
         "port": 10031,
         "siteEmail": "info@roomsettings.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7d3c00",
+          "bg": "#14110d",
+          "bgLight": "#faf7f2",
+          "ink": "#f3efe8",
+          "inkLight": "#1a1714",
+          "rule": "#d8cec0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ivory",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -2932,7 +3444,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.503Z"
+        "checkedAt": "2026-06-01T19:45:51.234Z"
       }
     },
     {
@@ -2958,7 +3470,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#a04030"
+        }
       },
       "manifest": null,
       "live": {
@@ -2968,7 +3483,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.391Z"
+        "checkedAt": "2026-06-01T19:45:51.359Z"
       }
     },
     {
@@ -2994,7 +3509,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9904
+        "port": 9904,
+        "theme": {
+          "accent": "#3a5a8a"
+        }
       },
       "manifest": null,
       "live": {
@@ -3004,7 +3522,7 @@
         "server": "nginx",
         "redirectedOffDomain": "handcraftedwallpaper.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.537Z"
+        "checkedAt": "2026-06-01T19:45:51.390Z"
       }
     },
     {
@@ -3030,7 +3548,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9905
+        "port": 9905,
+        "theme": {
+          "accent": "#5a8aa8"
+        }
       },
       "manifest": null,
       "live": {
@@ -3040,7 +3561,7 @@
         "server": "nginx",
         "redirectedOffDomain": "wallpapersback.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.629Z"
+        "checkedAt": "2026-06-01T19:45:53.174Z"
       }
     },
     {
@@ -3064,7 +3585,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/sheltermagazines.json",
         "port": 10032,
         "siteEmail": "info@sheltermagazines.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#a8884a",
+          "bg": "#0a0a09",
+          "bgLight": "#f4f2ee",
+          "ink": "#f0ede6",
+          "inkLight": "#15140f",
+          "rule": "#cfcabf",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "noir",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -3073,7 +3606,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.642Z"
+        "checkedAt": "2026-06-01T19:45:51.468Z"
       }
     },
     {
@@ -3099,7 +3632,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#c8a878"
+        }
       },
       "manifest": null,
       "clusterCanonical": "silkwallpaper.com",
@@ -3112,7 +3648,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.712Z"
+        "checkedAt": "2026-06-01T19:45:51.595Z"
       }
     },
     {
@@ -3138,7 +3674,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#c8a878"
+        }
       },
       "manifest": null,
       "clusterCanonical": "silkwallpaper.com",
@@ -3151,7 +3690,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.825Z"
+        "checkedAt": "2026-06-01T19:45:51.633Z"
       }
     },
     {
@@ -3177,7 +3716,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9912
+        "port": 9912,
+        "theme": {
+          "accent": "#c8c8d4"
+        }
       },
       "manifest": null,
       "live": {
@@ -3187,7 +3729,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.811Z"
+        "checkedAt": "2026-06-01T19:45:51.753Z"
       }
     },
     {
@@ -3211,7 +3753,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/specifywallpaper.json",
         "port": 10033,
         "siteEmail": "info@specifywallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -3220,7 +3774,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.928Z"
+        "checkedAt": "2026-06-01T19:45:51.788Z"
       }
     },
     {
@@ -3244,7 +3798,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/stevenabramsphotography.json",
         "port": 10034,
         "siteEmail": "info@stevenabramsphotography.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#444440",
+          "bg": "#080807",
+          "bgLight": "#f1f1f0",
+          "ink": "#ededec",
+          "inkLight": "#121211",
+          "rule": "#c8c8c5",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ink",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -3253,7 +3819,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:41.933Z"
+        "checkedAt": "2026-06-01T19:45:51.877Z"
       }
     },
     {
@@ -3279,7 +3845,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9906
+        "port": 9906,
+        "theme": {
+          "accent": "#8a7a5a"
+        }
       },
       "manifest": null,
       "live": {
@@ -3289,7 +3858,7 @@
         "server": "nginx",
         "redirectedOffDomain": "linenwallpaper.com",
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.075Z"
+        "checkedAt": "2026-06-01T19:45:51.964Z"
       }
     },
     {
@@ -3315,7 +3884,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": 9907
+        "port": 9907,
+        "theme": {
+          "accent": "#6a4a3a"
+        }
       },
       "manifest": null,
       "live": {
@@ -3325,7 +3897,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.074Z"
+        "checkedAt": "2026-06-01T19:45:51.995Z"
       }
     },
     {
@@ -3351,7 +3923,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3361,7 +3934,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.099Z"
+        "checkedAt": "2026-06-01T19:45:52.054Z"
       }
     },
     {
@@ -3387,7 +3960,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#7a6a5a"
+        }
       },
       "manifest": null,
       "live": {
@@ -3397,7 +3973,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.209Z"
+        "checkedAt": "2026-06-01T19:45:52.085Z"
       }
     },
     {
@@ -3421,7 +3997,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/thehotelwallpaper.json",
         "port": 10035,
         "siteEmail": "info@thehotelwallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#b08923",
+          "bg": "#0d0b06",
+          "bgLight": "#f7f3e8",
+          "ink": "#f2ecd8",
+          "inkLight": "#1c1810",
+          "rule": "#d8caa0",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "gilt",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -3430,7 +4018,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.232Z"
+        "checkedAt": "2026-06-01T19:45:52.152Z"
       }
     },
     {
@@ -3456,7 +4044,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3466,7 +4055,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.345Z"
+        "checkedAt": "2026-06-01T19:45:52.171Z"
       }
     },
     {
@@ -3490,7 +4079,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/traditionalwhimsy.json",
         "port": 10036,
         "siteEmail": "info@traditionalwhimsy.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#a85a5f",
+          "bg": "#130c0b",
+          "bgLight": "#f8f1f0",
+          "ink": "#f1e6e3",
+          "inkLight": "#1f1614",
+          "rule": "#dcc8c4",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "blush",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -3499,7 +4100,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.232Z"
+        "checkedAt": "2026-06-01T19:45:52.254Z"
       }
     },
     {
@@ -3523,7 +4124,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/unitedstateswallpaper.json",
         "port": 10037,
         "siteEmail": "info@unitedstateswallpaper.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -3532,7 +4145,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.255Z"
+        "checkedAt": "2026-06-01T19:45:52.381Z"
       }
     },
     {
@@ -3558,7 +4171,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#5a6a8a"
+        }
       },
       "manifest": null,
       "live": {
@@ -3568,7 +4184,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.337Z"
+        "checkedAt": "2026-06-01T19:45:52.446Z"
       }
     },
     {
@@ -3594,7 +4210,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3604,7 +4221,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.356Z"
+        "checkedAt": "2026-06-01T19:45:52.406Z"
       }
     },
     {
@@ -3630,7 +4247,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3640,7 +4258,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.366Z"
+        "checkedAt": "2026-06-01T19:45:53.486Z"
       }
     },
     {
@@ -3664,7 +4282,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wallcovering.json",
         "port": 10038,
         "siteEmail": "info@wallcovering.net",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7d3c00",
+          "bg": "#14110d",
+          "bgLight": "#faf7f2",
+          "ink": "#f3efe8",
+          "inkLight": "#1a1714",
+          "rule": "#d8cec0",
+          "serif": "'Cormorant Garamond','Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ivory",
+          "font": "cormorant"
+        }
       },
       "live": {
         "state": "live",
@@ -3673,7 +4303,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.391Z"
+        "checkedAt": "2026-06-01T19:45:52.529Z"
       }
     },
     {
@@ -3699,7 +4329,10 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": {
+          "accent": "#d4a847"
+        }
       },
       "manifest": null,
       "live": {
@@ -3709,7 +4342,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.540Z"
+        "checkedAt": "2026-06-01T19:45:52.684Z"
       }
     },
     {
@@ -3735,7 +4368,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3745,7 +4379,7 @@
         "server": null,
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.605Z"
+        "checkedAt": "2026-06-01T19:45:52.786Z"
       }
     },
     {
@@ -3771,7 +4405,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3781,7 +4416,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.611Z"
+        "checkedAt": "2026-06-01T19:45:52.747Z"
       }
     },
     {
@@ -3807,7 +4442,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3817,7 +4453,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.684Z"
+        "checkedAt": "2026-06-01T19:45:52.763Z"
       }
     },
     {
@@ -3843,7 +4479,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3853,7 +4490,7 @@
         "server": null,
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.805Z"
+        "checkedAt": "2026-06-01T19:45:52.914Z"
       }
     },
     {
@@ -3879,7 +4516,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3889,7 +4527,7 @@
         "server": null,
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.866Z"
+        "checkedAt": "2026-06-01T19:45:52.991Z"
       }
     },
     {
@@ -3913,7 +4551,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wallpaperexports.json",
         "port": 10039,
         "siteEmail": "info@wallpaperexports.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#9c6b30",
+          "bg": "#16120a",
+          "bgLight": "#f6f1e7",
+          "ink": "#f1ead9",
+          "inkLight": "#211c12",
+          "rule": "#d6c9ad",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "sand",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -3922,7 +4572,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.872Z"
+        "checkedAt": "2026-06-01T19:45:53.000Z"
       }
     },
     {
@@ -3946,7 +4596,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wallpaperfromthe80s.json",
         "port": 10040,
         "siteEmail": "info@wallpaperfromthe80s.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#6a3a7a",
+          "bg": "#0e0a10",
+          "bgLight": "#f3eff3",
+          "ink": "#ece4ee",
+          "inkLight": "#1a131c",
+          "rule": "#cdc1d0",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "plum",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -3955,7 +4617,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.070Z"
+        "checkedAt": "2026-06-01T19:45:53.047Z"
       }
     },
     {
@@ -3981,7 +4643,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -3991,7 +4654,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.902Z"
+        "checkedAt": "2026-06-01T19:45:53.142Z"
       }
     },
     {
@@ -4017,7 +4680,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -4027,7 +4691,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.131Z"
+        "checkedAt": "2026-06-01T19:45:53.142Z"
       }
     },
     {
@@ -4051,7 +4715,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wallpaperny.json",
         "port": 10041,
         "siteEmail": "info@wallpaperny.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#444440",
+          "bg": "#080807",
+          "bgLight": "#f1f1f0",
+          "ink": "#ededec",
+          "inkLight": "#121211",
+          "rule": "#c8c8c5",
+          "serif": "'Bodoni Moda',Didot,Georgia,serif",
+          "sans": "-apple-system,'Helvetica Neue',Arial,sans-serif",
+          "palette": "ink",
+          "font": "bodoni"
+        }
       },
       "live": {
         "state": "live",
@@ -4060,7 +4736,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.011Z"
+        "checkedAt": "2026-06-01T19:45:53.200Z"
       }
     },
     {
@@ -4084,7 +4760,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wallpaperpurchasing.json",
         "port": 10042,
         "siteEmail": "info@wallpaperpurchasing.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -4093,7 +4781,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.014Z"
+        "checkedAt": "2026-06-01T19:45:53.269Z"
       }
     },
     {
@@ -4119,7 +4807,8 @@
         "hasServer": true,
         "hasSiteConfig": true,
         "domainInferred": false,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -4129,7 +4818,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:42.367Z"
+        "checkedAt": "2026-06-01T19:45:53.207Z"
       }
     },
     {
@@ -4155,7 +4844,8 @@
         "hasServer": true,
         "hasSiteConfig": false,
         "domainInferred": true,
-        "port": null
+        "port": null,
+        "theme": null
       },
       "manifest": null,
       "live": {
@@ -4165,7 +4855,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.074Z"
+        "checkedAt": "2026-06-01T19:45:53.323Z"
       }
     },
     {
@@ -4189,7 +4879,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wallpaperweekly.json",
         "port": 10043,
         "siteEmail": "info@wallpaperweekly.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#7d3c00",
+          "bg": "#14110d",
+          "bgLight": "#faf7f2",
+          "ink": "#f3efe8",
+          "inkLight": "#1a1714",
+          "rule": "#d8cec0",
+          "serif": "'Playfair Display',Georgia,serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "ivory",
+          "font": "playfair"
+        }
       },
       "live": {
         "state": "live",
@@ -4198,7 +4900,7 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.162Z"
+        "checkedAt": "2026-06-01T19:45:53.442Z"
       }
     },
     {
@@ -4222,7 +4924,19 @@
         "configPath": "/Users/stevestudio2/Projects/dw-domain-fleet/sites/wc01wallcoverings.json",
         "port": 10044,
         "siteEmail": "info@wc01wallcoverings.com",
-        "hasLocalDir": false
+        "hasLocalDir": false,
+        "theme": {
+          "accent": "#3a5f8a",
+          "bg": "#0c0e11",
+          "bgLight": "#eef0f2",
+          "ink": "#e8eaee",
+          "inkLight": "#161a1e",
+          "rule": "#c4cad0",
+          "serif": "Georgia,'Times New Roman',serif",
+          "sans": "-apple-system,'Inter',system-ui,sans-serif",
+          "palette": "slate",
+          "font": "georgia"
+        }
       },
       "live": {
         "state": "live",
@@ -4231,12 +4945,12 @@
         "server": "nginx",
         "redirectedOffDomain": null,
         "scheme": "https",
-        "checkedAt": "2026-06-01T19:19:43.269Z"
+        "checkedAt": "2026-06-01T19:45:53.465Z"
       }
     }
   ],
   "probeSummary": {
-    "probedAt": "2026-06-01T19:19:43.366Z",
+    "probedAt": "2026-06-01T19:45:53.487Z",
     "timeoutMs": 8000,
     "tally": {
       "live": 119
diff --git a/viewer/index.html b/viewer/index.html
new file mode 100644
index 0000000..a8a121c
--- /dev/null
+++ b/viewer/index.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>DW Fleet — Live Registry</title>
+<style>
+  :root{--bg:#0e0f12;--panel:#16181d;--ink:#e8e6e1;--muted:#8b8f98;--rule:#272a31;--accent:#9c7a4d;--cols:5}
+  *{box-sizing:border-box;margin:0;padding:0}
+  body{background:var(--bg);color:var(--ink);font-family:'Inter',system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased}
+  header{position:sticky;top:0;z-index:5;background:rgba(14,15,18,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule);padding:16px 24px}
+  .htop{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
+  h1{font-family:'Cormorant Garamond',Georgia,serif;font-weight:600;font-size:26px;letter-spacing:.04em}
+  .sub{color:var(--muted);font-size:13px}
+  .controls{display:flex;gap:18px;align-items:center;margin-top:12px;flex-wrap:wrap}
+  .ctl{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted)}
+  select,input[type=range],input[type=search]{background:var(--panel);color:var(--ink);border:1px solid var(--rule);border-radius:6px;padding:6px 9px;font-size:12px;font-family:inherit}
+  input[type=search]{min-width:200px}
+  button{background:var(--accent);color:#1a1a1a;border:0;border-radius:6px;padding:7px 13px;font-size:12px;font-weight:600;cursor:pointer}
+  .stat{display:inline-flex;gap:5px;align-items:center}
+  .dot{width:8px;height:8px;border-radius:50%;display:inline-block}
+  .grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:14px;padding:20px 24px}
+  .card{background:var(--panel);border:1px solid var(--rule);border-radius:10px;overflow:hidden;cursor:pointer;transition:transform .12s,border-color .12s;text-decoration:none;color:inherit;display:flex;flex-direction:column}
+  .card:hover{transform:translateY(-2px);border-color:var(--accent)}
+  .accentbar{height:5px}
+  .thumb{aspect-ratio:16/9;background:#0a0b0d center/cover no-repeat;border-bottom:1px solid var(--rule);position:relative;display:flex;align-items:center;justify-content:center}
+  .thumb .ph{font-family:'Cormorant Garamond',serif;font-size:22px;color:var(--muted);letter-spacing:.1em}
+  .body{padding:11px 12px 13px;display:flex;flex-direction:column;gap:6px;flex:1}
+  .dom{font-size:13px;font-weight:600;word-break:break-all;line-height:1.25}
+  .nm{font-size:11px;color:var(--muted)}
+  .badges{display:flex;flex-wrap:wrap;gap:5px;margin-top:auto;padding-top:6px}
+  .b{font-size:9px;letter-spacing:.04em;text-transform:uppercase;padding:2px 6px;border-radius:4px;border:1px solid var(--rule);color:var(--muted)}
+  .b.live{color:#4ade80;border-color:#4ade8044}.b.parked{color:#fbbf24;border-color:#fbbf2444}.b.down{color:#f87171;border-color:#f8717144}
+  .b.local{color:#7dd3fc;border-color:#7dd3fc44}.b.manifest{color:#c4b5fd;border-color:#c4b5fd44}
+  .b.canon{color:#fcd34d;border-color:#fcd34d55}.b.redir{color:#fb923c;border-color:#fb923c55}
+  .count{font-size:12px;color:var(--muted);margin-left:auto}
+</style>
+</head>
+<body>
+<header>
+  <div class="htop">
+    <h1>Designer Wallcoverings — Live Fleet</h1>
+    <span class="sub" id="summary">loading…</span>
+    <span class="count" id="count"></span>
+  </div>
+  <div class="controls">
+    <div class="ctl">Sort
+      <select id="sort">
+        <option value="domain">Domain A→Z</option>
+        <option value="status">Live status</option>
+        <option value="serving">Serving mode</option>
+        <option value="fleet">Fleet</option>
+        <option value="hue">Accent hue</option>
+      </select>
+    </div>
+    <div class="ctl">Density <input type="range" id="density" min="3" max="8" value="5"></div>
+    <div class="ctl"><input type="search" id="q" placeholder="filter domains…"></div>
+    <button id="reprobe">↻ Re-probe live</button>
+  </div>
+</header>
+<div class="grid" id="grid"></div>
+
+<script>
+const $ = s => document.querySelector(s);
+let SITES = [];
+const hueOf = hex => { if(!/^#?[0-9a-f]{6}$/i.test(hex||''))return 999; const n=parseInt(hex.replace('#',''),16); const r=(n>>16&255)/255,g=(n>>8&255)/255,b=(n&255)/255; const mx=Math.max(r,g,b),mn=Math.min(r,g,b),d=mx-mn; let h=0; if(d){ if(mx===r)h=((g-b)/d)%6; else if(mx===g)h=(b-r)/d+2; else h=(r-g)/d+4; } return Math.round(h*60+360)%360; };
+const accentOf = s => (s.local&&s.local.port?null:null) || (s.manifest&&s.manifest.theme&&s.manifest.theme.accent) || (s.local&&s.local.theme&&s.local.theme.accent) || '#9c7a4d';
+
+function render(){
+  const q = $('#q').value.trim().toLowerCase();
+  const sort = $('#sort').value;
+  let rows = SITES.filter(s => !q || s.domain.includes(q) || (s.siteName||'').toLowerCase().includes(q));
+  const cmp = {
+    domain:(a,b)=>a.domain.localeCompare(b.domain),
+    status:(a,b)=>(a.live?.state||'z').localeCompare(b.live?.state||'z')||a.domain.localeCompare(b.domain),
+    serving:(a,b)=>(a.servingModes?.[0]||'').localeCompare(b.servingModes?.[0]||'')||a.domain.localeCompare(b.domain),
+    fleet:(a,b)=>(a.fleets?.[0]||'').localeCompare(b.fleets?.[0]||'')||a.domain.localeCompare(b.domain),
+    hue:(a,b)=>hueOf(a._accent)-hueOf(b._accent),
+  }[sort];
+  rows.sort(cmp);
+  $('#count').textContent = rows.length + ' shown';
+  const g = $('#grid'); g.innerHTML = '';
+  for(const s of rows){
+    const a = document.createElement('a');
+    a.className='card'; a.href='https://'+s.domain; a.target='_blank'; a.rel='noopener noreferrer';
+    const st = s.live?.state||'?';
+    const stClass = st==='live'?'live':st==='parked'?'parked':(st==='unreachable'||st==='timeout'||st==='error')?'down':'';
+    const serving = (s.servingModes||[]).map(m=>m==='standalone-node'?'local':'manifest');
+    const redir = s.shouldRedirectTo ? '<span class="b redir">→ '+s.shouldRedirectTo.replace(/\\.com$/,'')+'</span>' : '';
+    const canon = (s.isCanonical) ? '<span class="b canon">canonical</span>' : '';
+    a.innerHTML =
+      '<div class="accentbar" style="background:'+s._accent+'"></div>'+
+      '<div class="thumb" data-domain="'+s.domain+'" style="background-color:'+s._accent+'22"><div class="ph">'+(s.siteName||s.domain).slice(0,18)+'</div></div>'+
+      '<div class="body">'+
+        '<div class="dom">'+s.domain+'</div>'+
+        '<div class="nm">'+(s.siteName||'')+'</div>'+
+        '<div class="badges">'+
+          '<span class="b '+stClass+'"><span class="dot" style="background:currentColor"></span>'+st+'</span>'+
+          serving.map(m=>'<span class="b '+m+'">'+m+'</span>').join('')+
+          canon+redir+
+        '</div>'+
+      '</div>';
+    g.appendChild(a);
+  }
+  lazyHeroes();
+}
+
+let io;
+function lazyHeroes(){
+  if(io) io.disconnect();
+  io = new IntersectionObserver((ents)=>{
+    for(const e of ents){ if(!e.isIntersecting) continue; const el=e.target; io.unobserve(el);
+      const d=el.dataset.domain;
+      fetch('/api/hero?domain='+encodeURIComponent(d)).then(r=>r.json()).then(j=>{
+        if(j.image){ const img=new Image(); img.onload=()=>{ el.style.backgroundImage='url('+j.image+')'; const ph=el.querySelector('.ph'); if(ph)ph.style.display='none'; }; img.src=j.image; }
+      }).catch(()=>{});
+    }
+  },{rootMargin:'300px'});
+  document.querySelectorAll('.thumb').forEach(t=>io.observe(t));
+}
+
+async function load(){
+  const r = await fetch('/api/registry'); const reg = await r.json();
+  SITES = (reg.sites||[]).map(s=>({...s, _accent: ((s.manifest&&s.manifest.theme&&s.manifest.theme.accent)||(s.local&&s.local.theme&&s.local.theme.accent)||'#9c7a4d')}));
+  const sm = reg.summary||{}; const tally = reg.probeSummary?.tally||{};
+  $('#summary').textContent = (sm.totalDomains||SITES.length)+' domains · '+(sm.localMicrosites||0)+' local + '+(sm.manifestDomains||0)+' manifest · '+(tally.live||0)+' live'+(reg.probeSummary?' · probed '+new Date(reg.probeSummary.probedAt).toLocaleString():'');
+  render();
+}
+$('#sort').onchange=render; $('#q').oninput=render;
+$('#density').oninput=e=>document.documentElement.style.setProperty('--cols', e.target.value);
+// persist controls
+for(const id of ['sort','density']){ const el=$('#'+id); const k='dwfleet-'+id; if(localStorage[k]){ el.value=localStorage[k]; if(id==='density')document.documentElement.style.setProperty('--cols',el.value);} el.addEventListener('change',()=>localStorage[k]=el.value); el.addEventListener('input',()=>localStorage[k]=el.value); }
+$('#reprobe').onclick=async()=>{ const b=$('#reprobe'); b.textContent='probing…'; b.disabled=true; try{ await fetch('/api/reprobe',{method:'POST'}); await load(); }finally{ b.textContent='↻ Re-probe live'; b.disabled=false; } };
+load();
+</script>
+</body>
+</html>
diff --git a/viewer/server.mjs b/viewer/server.mjs
new file mode 100644
index 0000000..a2cf688
--- /dev/null
+++ b/viewer/server.mjs
@@ -0,0 +1,67 @@
+#!/usr/bin/env node
+// Live DW fleet registry viewer — zero dependencies (node:http + built-in fetch).
+//   node viewer/server.mjs            # serves on :9774
+// Reads ../dw-fleet-registry.json fresh on each request. Proxies each site's live
+// og:image as a card thumbnail (so the grid shows LIVE data, not snapshots), and
+// can kick a re-probe.
+import http from 'node:http';
+import fs from 'node:fs';
+import os from 'node:os';
+import path from 'node:path';
+import { spawn } from 'node:child_process';
+
+const DIR = path.dirname(new URL(import.meta.url).pathname);
+const REG = path.join(DIR, '..', 'dw-fleet-registry.json');
+const PORT = process.env.PORT || 9774;
+const heroCache = new Map();   // domain -> {image, at}
+
+function send(res, code, type, body) {
+  res.writeHead(code, { 'Content-Type': type, 'Cache-Control': 'no-store' });
+  res.end(body);
+}
+
+async function liveHero(domain) {
+  const hit = heroCache.get(domain);
+  if (hit) return hit.image;
+  let image = null;
+  try {
+    const ctrl = new AbortController();
+    const t = setTimeout(() => ctrl.abort(), 6000);
+    const r = await fetch('https://' + domain + '/', { signal: ctrl.signal, headers: { 'User-Agent': 'dw-fleet-viewer/1.0' } });
+    clearTimeout(t);
+    const html = (await r.text()).slice(0, 60000);
+    const og = html.match(/<meta[^>]+property=["']og:image["'][^>]+content=["']([^"']+)["']/i)
+            || html.match(/<meta[^>]+content=["']([^"']+)["'][^>]+property=["']og:image["']/i);
+    if (og) image = og[1];
+    else {
+      const img = html.match(/<img[^>]+src=["']([^"']+\.(?:jpg|jpeg|png|webp|avif)[^"']*)["']/i);
+      if (img) image = img[1];
+    }
+    if (image && image.startsWith('/')) image = 'https://' + domain + image;
+  } catch { /* unreachable / timeout */ }
+  heroCache.set(domain, { image, at: Date.now() });
+  return image;
+}
+
+const server = http.createServer(async (req, res) => {
+  const u = new URL(req.url, 'http://localhost');
+  if (u.pathname === '/') return send(res, 200, 'text/html; charset=utf-8', fs.readFileSync(path.join(DIR, 'index.html')));
+  if (u.pathname === '/api/registry') {
+    try { return send(res, 200, 'application/json', fs.readFileSync(REG)); }
+    catch { return send(res, 500, 'application/json', '{"error":"registry not found — run build-registry.mjs"}'); }
+  }
+  if (u.pathname === '/api/hero') {
+    const d = u.searchParams.get('domain') || '';
+    if (!/^[a-z0-9.-]+$/i.test(d)) return send(res, 400, 'application/json', '{"image":null}');
+    return send(res, 200, 'application/json', JSON.stringify({ image: await liveHero(d) }));
+  }
+  if (u.pathname === '/api/reprobe' && req.method === 'POST') {
+    const p = spawn('node', [path.join(DIR, '..', 'probe.mjs')], { cwd: path.join(DIR, '..') });
+    let out = '';
+    p.stderr.on('data', d => out += d); p.stdout.on('data', d => out += d);
+    p.on('close', code => send(res, 200, 'application/json', JSON.stringify({ ok: code === 0, log: out.slice(-2000) })));
+    return;
+  }
+  send(res, 404, 'text/plain', 'not found');
+});
+server.listen(PORT, () => console.log(`DW fleet viewer → http://localhost:${PORT}`));

← e71047d hybrid brand demo: 3 per-site boards themed from real style-  ·  back to Dw Fleet Registry  ·  live-data boards: scrape theme tokens from served CSS + embe 41cdb66 →