← back to Dw Yolo Loop
Thibaut snapshot: 1903 products built + cleaned (-SAMPLE suffix), store_url prefers live handle
2f4b8ae0d9c4b832f71332265757e11bfe2c7ca4 · 2026-06-12 12:15:27 -0700 · Steve Abrams
- lines/thibaut.json (1903) + thibaut-handles.json; 0 vendor URLs leaked
- stripped -SAMPLE from 1031 sample-dominant mfr_skus (cosmetic Item code)
- build-line.js + server.js hardened for the same
- local smoke: house=DW, line=Thibaut, collection wired, 0 prices, 0 vendor refs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Files touched
M artmura-site/build-line.jsM artmura-site/server.js
Diff
commit 2f4b8ae0d9c4b832f71332265757e11bfe2c7ca4
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Fri Jun 12 12:15:27 2026 -0700
Thibaut snapshot: 1903 products built + cleaned (-SAMPLE suffix), store_url prefers live handle
- lines/thibaut.json (1903) + thibaut-handles.json; 0 vendor URLs leaked
- stripped -SAMPLE from 1031 sample-dominant mfr_skus (cosmetic Item code)
- build-line.js + server.js hardened for the same
- local smoke: house=DW, line=Thibaut, collection wired, 0 prices, 0 vendor refs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
artmura-site/build-line.js | 2 +-
artmura-site/server.js | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/artmura-site/build-line.js b/artmura-site/build-line.js
index 808c06d..f7896c6 100644
--- a/artmura-site/build-line.js
+++ b/artmura-site/build-line.js
@@ -71,7 +71,7 @@ async function metafields(pid) {
// main = highest-priced non-sample variant (never read the $4.25 sample as the price — see $4.25 policy)
const nonSample = p.variants.filter(v => !isSample(v));
const yard = nonSample.sort((a, b) => parseFloat(b.price) - parseFloat(a.price))[0] || p.variants[0];
- const sku = (yard.sku || '').trim();
+ const sku = (yard.sku || '').trim().replace(/-sample$/i, ''); // sample-only products: drop the -SAMPLE suffix
const tags = (p.tags || '').split(',').map(s => s.trim()).filter(Boolean);
const baseTitle = p.title.replace(/\s*\|\s*[^|]+$/, '').replace(/\s+Wallcovering$/i, '');
if (sku) handles[sku.toUpperCase()] = p.handle;
diff --git a/artmura-site/server.js b/artmura-site/server.js
index 0090b23..8a32001 100644
--- a/artmura-site/server.js
+++ b/artmura-site/server.js
@@ -41,7 +41,8 @@ function load() {
CATALOG = d.products.map(r => {
const imgs = localImages(r);
const c = colors[r.mfr_sku] || {};
- const liveHandle = handles[(r.mfr_sku || '').toUpperCase()] || null;
+ // build-line lines carry the live DW handle directly; Artmura maps newwall-sku → DW handle
+ const liveHandle = handles[(r.mfr_sku || '').toUpperCase()] || r.handle || null;
return {
store_url: liveHandle ? `${CFG.storeBase}/products/${liveHandle}` : CFG.storeBase,
hex: c.hex || null, hue: c.hue ?? null, color_bucket: c.bucket || null,
← 584bf8a Vendor-landing template: generalize to any DW line + dw-vend
·
back to Dw Yolo Loop
·
clickthrough: data-agnostic count + optional book/color chec 9ab487d →