[object Object]

← back to Hollywood Import

Add stage-names-alt.mjs generator (name-scrub + alt-tag staging)

540f7eaec751ae0df69029fc116be75ed180d6bc · 2026-06-17 12:15:14 -0700 · SteveStudio2

Files touched

Diff

commit 540f7eaec751ae0df69029fc116be75ed180d6bc
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed Jun 17 12:15:14 2026 -0700

    Add stage-names-alt.mjs generator (name-scrub + alt-tag staging)
---
 stage-names-alt.mjs | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/stage-names-alt.mjs b/stage-names-alt.mjs
new file mode 100644
index 0000000..0cefc7c
--- /dev/null
+++ b/stage-names-alt.mjs
@@ -0,0 +1,30 @@
+// Stage private-label name-scrub + alt-tag generation for the Hollywood (Momentum) catalog.
+// READ-ONLY: reads vc_hw_names.tsv (export of vendor_catalog hollywood: id,dw_sku,mfr_sku,
+// pattern_name,color_name,slug) and writes stage-names-alt.tsv for Steve's review. No DB writes.
+// Decisions: CA-place naming scheme (keep existing proper names; only scrub vendor suffix),
+// colors keep Momentum names, alt = "<clean name> wallcovering in <color> — Hollywood Wallcoverings".
+import fs from 'node:fs';
+const rows = fs.readFileSync(new URL('vc_hw_names.tsv', import.meta.url), 'utf8').trim().split('\n').map(l => l.split('\t'));
+
+// Drop trailing vendor suffix after "|", strip Momentum/Versa, collapse whitespace.
+function cleanName(s) {
+  if (!s) return '';
+  let n = s.split('|')[0];
+  n = n.replace(/\b(momentum(\s+textiles( and walls)?)?|versa(’s)?(\s+designed\s+surfaces)?)\b/gi, '');
+  return n.replace(/\s{2,}/g, ' ').replace(/\s+,/g, ',').trim();
+}
+
+const out = []; let suffixScrub = 0, missingColor = 0, leak = 0;
+for (const [id, dw, mfr, name, color, slug] of rows) {
+  const clean = cleanName(name);
+  if (name !== clean && /\|/.test(name)) suffixScrub++;
+  if (!color) missingColor++;
+  const alt = color
+    ? `${clean} wallcovering in ${color} — Hollywood Wallcoverings`
+    : `${clean} wallcovering — Hollywood Wallcoverings`;
+  if (/momentum|versa/i.test(alt)) leak++;
+  out.push([id, dw, mfr, name, clean, color, name !== clean ? 'name_scrubbed' : '', color ? '' : 'MISSING_COLOR', alt].join('\t'));
+}
+fs.writeFileSync(new URL('stage-names-alt.tsv', import.meta.url),
+  'id\tdw_sku\tmfr_sku\told_name\tclean_name\tcolor\tname_flag\tcolor_flag\tproposed_alt\n' + out.join('\n'));
+console.log('staged', out.length, '| name scrub', suffixScrub, '| missing color', missingColor, '| alt leaks', leak);

← a13162a Momentum (Hollywood) authed crawler + Group-1 price staging  ·  back to Hollywood Import  ·  Push Group-1 retail prices to 62 live Shopify products 5dd0e74 →