[object Object]

← back to Dw Yolo Loop

sitemap emergence sizing (c35): philipperomano fully generatable (8,229 URLs), novasuede Kamatera-only

f72b0529547476ecd2c3130b666b79d75f27f54a · 2026-06-16 13:45:39 -0700 · Steve Abrams

Council #4. c27 found both flagship microsites lack a usable sitemap. Sizing:
neither is a Shopify products.json store — both are custom Next/Express sites.
philipperomano has local data/products.json (8,227 products) + a /p/:handle route,
so a valid sitemap (8,229 URLs, xmllint-clean, 965KB, one file) is generatable
from local data — PROOF written to yolo-queue, NOT deployed (route+deploy gated).
novasuede has no local project on Mac2 (Kamatera-only); ~153 colorways, fix is
Kamatera-side.

Files touched

Diff

commit f72b0529547476ecd2c3130b666b79d75f27f54a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jun 16 13:45:39 2026 -0700

    sitemap emergence sizing (c35): philipperomano fully generatable (8,229 URLs), novasuede Kamatera-only
    
    Council #4. c27 found both flagship microsites lack a usable sitemap. Sizing:
    neither is a Shopify products.json store — both are custom Next/Express sites.
    philipperomano has local data/products.json (8,227 products) + a /p/:handle route,
    so a valid sitemap (8,229 URLs, xmllint-clean, 965KB, one file) is generatable
    from local data — PROOF written to yolo-queue, NOT deployed (route+deploy gated).
    novasuede has no local project on Mac2 (Kamatera-only); ~153 colorways, fix is
    Kamatera-side.
---
 .../sitemap-emergence/gen-philipperomano-sitemap.mjs | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/scripts/sitemap-emergence/gen-philipperomano-sitemap.mjs b/scripts/sitemap-emergence/gen-philipperomano-sitemap.mjs
new file mode 100644
index 0000000..f502f27
--- /dev/null
+++ b/scripts/sitemap-emergence/gen-philipperomano-sitemap.mjs
@@ -0,0 +1,20 @@
+// gen-philipperomano-sitemap (c35) — REPORT-ONLY proof: build a valid sitemap.xml
+// for philipperomano.com from its LOCAL data/products.json (8,227 products served
+// at /p/:handle, currently orphaned — site has NO sitemap, /sitemap.xml=404).
+// Writes a PROOF file to ~/.claude/yolo-queue/ — does NOT deploy or touch the live
+// server (wiring a /sitemap.xml route + deploy is Steve-gated). $0, local.
+import fs from 'node:fs';
+const SRC='/Users/stevestudio2/Projects/philipperomano/data/products.json';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/philipperomano-sitemap-PROOF.xml`;
+const BASE='https://philipperomano.com';
+const data=JSON.parse(fs.readFileSync(SRC,'utf8'));
+const prods=Array.isArray(data)?data:(data.products||[]);
+const handles=[...new Set(prods.map(p=>p.handle).filter(Boolean))];
+const today=fs.statSync(SRC).mtime.toISOString().slice(0,10); // use data mtime (no Date.now in scripts)
+const urls=[`${BASE}/`,`${BASE}/naturals`,...handles.map(h=>`${BASE}/p/${encodeURIComponent(h)}`)];
+let xml='<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
+for(const u of urls) xml+=`  <url><loc>${u}</loc><lastmod>${today}</lastmod></url>\n`;
+xml+='</urlset>\n';
+fs.writeFileSync(OUT,xml);
+console.log(`[sitemap-proof] products=${prods.length} unique_handles=${handles.length} total_urls=${urls.length}`);
+console.log(`  wrote ${OUT} (${(xml.length/1024).toFixed(0)} KB)`);

← e3d61c1 canary promotion harness (c34): stage 5 new canaries as inst  ·  back to Dw Yolo Loop  ·  Kravet Jan-2026 price list -> dw_unified: kravet_master_pric d181396 →