[object Object]

← back to Linenwallpaper

linenwallpaper: tighten linen filter — require linen/flax in title, drop vinyl/grasscloth/novelty (Steve: 'it is not linen')

c3c76d8b245474a7d1b00f4313db725595f3be92 · 2026-08-12 09:33:03 -0700 · steve

Files touched

Diff

commit c3c76d8b245474a7d1b00f4313db725595f3be92
Author: steve <steve@designerwallcoverings.com>
Date:   Wed Aug 12 09:33:03 2026 -0700

    linenwallpaper: tighten linen filter — require linen/flax in title, drop vinyl/grasscloth/novelty (Steve: 'it is not linen')
---
 server.js | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/server.js b/server.js
index 5b32ae7..663a562 100644
--- a/server.js
+++ b/server.js
@@ -85,13 +85,21 @@ function isJunk(p) {
 let PRODUCTS = [];
 let DROPPED = 0;
 
-// graphics-loop pass 12: niche keyword filter — only show products that fit this site's niche
-const NICHE_POS = ["linen","natural","woven","flax"];
-const NICHE_NEG = ["solid","blank","plain"];
+// LINEN VERTICAL niche filter (tightened 2026-08-12 — Steve: "it is not linen").
+// The old rule kept anything whose title OR tags contained linen/natural/woven/flax,
+// which let plain Type II vinyl, grasscloth, and novelties (Route 66 car, WonderWood
+// teak, Pippy's Peacock, green florals) inherit a stray "linen-look"/"natural" tag and
+// show up on a site literally called linenwallpaper.com. New rule: a product only
+// qualifies if the word linen/flax appears in its OWN TITLE — so nothing on screen can
+// contradict its name. This still keeps linen-look "faux linen" patterns (which name
+// themselves "…Faux Linen…"). Grasscloth is a different natural fibre and is excluded
+// even when a colourway is named "Linen Grasscloth".
+const NICHE_NEG = ["solid","blank","plain","grasscloth","grass cloth"];
 function nicheFit(p) {
   const blob = ((p.title || '') + ' ' + (p.tags || []).join(' ')).toLowerCase();
-  if (NICHE_NEG.some(n => blob.includes(n.toLowerCase()))) return false;
-  return NICHE_POS.length === 0 || NICHE_POS.some(k => blob.includes(k.toLowerCase()));
+  if (NICHE_NEG.some(n => blob.includes(n))) return false;
+  const title = (p.title || '').toLowerCase();
+  return /\blinen\b|\bflax\b/.test(title);
 }
 // Niche-filtered slice — recomputed inside the async startup IIFE.
 let PRODUCTS_NICHE = [];

← c565a51 viewer standard: add per-field on/off menu (Fields ▾) to pro  ·  back to Linenwallpaper  ·  add gated IG post script: genuine-linen Sag Harbor post for b99182c →