[object Object]

← back to Dw Pairs Well

auto-save: 2026-07-12T23:21:12 (1 files) — server.js

399cce5e962d35aed2122981047b865c2bca3475 · 2026-07-12 23:21:16 -0700 · Steve Abrams

Files touched

Diff

commit 399cce5e962d35aed2122981047b865c2bca3475
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Jul 12 23:21:16 2026 -0700

    auto-save: 2026-07-12T23:21:12 (1 files) — server.js
---
 server.js | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/server.js b/server.js
index ce8ce94..98f69b9 100644
--- a/server.js
+++ b/server.js
@@ -632,6 +632,17 @@ function bestPatternLabel(row, computed) {
   return row.dw_sku || 'Pattern';
 }
 
+// Sanitize a product TITLE for recommendation lists (/api/pairs, /api/similar),
+// which pass shopify `title` through verbatim. A junk title whose pattern segment
+// is empty ("| DW Bespoke Studios") otherwise renders as a bare-pipe tile. ONLY
+// degenerate titles are rewritten (via the bestPatternLabel fallback → handle /
+// mfr_root / dw_sku); a normal "Name | Vendor" title is returned unchanged.
+function safeTitle(row) {
+  const raw = String(row.title || '').trim();
+  const degenerate = !raw || raw.startsWith('|') || /^[\s|·—–-]+$/.test(raw);
+  return degenerate ? bestPatternLabel(row, '') : row.title;
+}
+
 // Resolve a single product to its group key (used when caller passes handle/dw_sku).
 async function resolveGroupKey({ dw_sku, handle, pattern_id }) {
   if (pattern_id) return pattern_id;
@@ -965,7 +976,7 @@ app.get('/api/similar', async (req, res) => {
         vendor: source.vendor, image_url: source.image_url, palette: paletteWithPaints(sourcePalette)
       },
       similar: top.map(p => ({
-        dw_sku: p.dw_sku, handle: p.handle, title: p.title, vendor: p.vendor,
+        dw_sku: p.dw_sku, handle: p.handle, title: safeTitle(p), vendor: p.vendor,
         image_url: p.image_url, url: `/products/${p.handle}`,
         score: p._score, why: p._why, delta_e: p._dE, palette: paletteWithPaints(p._palette)
       }))
@@ -1063,7 +1074,7 @@ app.get('/api/pairs', async (req, res) => {
       pairs: top.map(p => ({
         dw_sku: p.dw_sku,
         handle: p.handle,
-        title: p.title,
+        title: safeTitle(p),
         vendor: p.vendor,
         image_url: p.image_url,
         url: `/products/${p.handle}`,

← 52301ea CLIP-1: /api/similar?engine=clip — image-embedding nearest-n  ·  back to Dw Pairs Well  ·  auto-save: 2026-07-12T23:51:20 (1 files) — server.js f189739 →