[object Object]

← back to Customdigitalmurals

remove vendor names from customer UI — replace with 'Designer Wallcoverings'

f60aec2d12b823090fdba93acc9376a6f4a33b05 · 2026-05-25 21:03:15 -0700 · Steve Abrams

DW rule: vendor names are admin-only metadata and must never appear on
customer-facing surfaces (homepage cards, product pages, meta descriptions,
JSON-LD brand). Removes the studio filter dropdown from the homepage toolbar
and pins the card vendor line + product page brand line + Product schema brand
to 'Designer Wallcoverings'. Server-side ?vendor= query and /api/vendors
endpoint remain for admin / faceting; /api/facets exposes vendor counts as
admin metadata only.

Files touched

Diff

commit f60aec2d12b823090fdba93acc9376a6f4a33b05
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon May 25 21:03:15 2026 -0700

    remove vendor names from customer UI — replace with 'Designer Wallcoverings'
    
    DW rule: vendor names are admin-only metadata and must never appear on
    customer-facing surfaces (homepage cards, product pages, meta descriptions,
    JSON-LD brand). Removes the studio filter dropdown from the homepage toolbar
    and pins the card vendor line + product page brand line + Product schema brand
    to 'Designer Wallcoverings'. Server-side ?vendor= query and /api/vendors
    endpoint remain for admin / faceting; /api/facets exposes vendor counts as
    admin metadata only.
---
 server.js | 28 +++++++---------------------
 1 file changed, 7 insertions(+), 21 deletions(-)

diff --git a/server.js b/server.js
index 9d8863c..bd3636c 100644
--- a/server.js
+++ b/server.js
@@ -425,10 +425,7 @@ ${headerHtml('home')}
 
 <div id="shop">
 <div class="toolbar">
-  <input type="text" id="search" placeholder="Search by title, studio, keyword..." autocomplete="off">
-  <select id="vendor-filter">
-    <option value="">All Studios</option>
-  </select>
+  <input type="text" id="search" placeholder="Search by title, keyword..." autocomplete="off">
   <select id="sort">
     <option value="az">Title A → Z</option>
     <option value="za">Title Z → A</option>
@@ -455,7 +452,7 @@ ${footerHtml()}
 
 <script>
 var page=1, per=60, total=0, pages=0;
-var q='', vendor='', sort='az';
+var q='', sort='az';
 var LS_SORT='cdm-sort', LS_DENSITY='cdm-density';
 
 // Hydrate saved sort + density BEFORE the first grid load.
@@ -482,7 +479,7 @@ document.getElementById('density').addEventListener('input',function(){
 setCols(savedCols);
 
 function load(){
-  var url='/api/products?page='+page+'&per='+per+'&q='+encodeURIComponent(q)+'&vendor='+encodeURIComponent(vendor)+'&sort='+sort;
+  var url='/api/products?page='+page+'&per='+per+'&q='+encodeURIComponent(q)+'&sort='+sort;
   fetch(url).then(r=>r.json()).then(data=>{
     total=data.total; pages=data.pages;
     document.getElementById('count').textContent=total.toLocaleString()+' murals';
@@ -493,7 +490,7 @@ function load(){
       return '<div class="product-card" onclick="location.href=\\'/product/'+esc(p.handle)+'\\'">'+
         img+
         '<div class="card-body">'+
-          '<div class="card-vendor">'+esc(p.vendor)+'</div>'+
+          '<div class="card-vendor">Designer Wallcoverings</div>'+
           '<div class="card-title">'+esc(p.title)+'</div>'+
           (price?'<div class="card-price">'+price+'</div>':'')+
           '<a class="card-sample" href="'+esc('https://designerwallcoverings.com/products/'+p.handle+'#sample')+'" onclick="event.stopPropagation()" target="_blank" rel="noopener noreferrer">Order Free Sample</a>'+
@@ -518,18 +515,7 @@ function renderPagination(){
 
 function esc(s){return String(s).replace(/[&<>"']/g,function(c){return{'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c];});}
 
-// Populate vendor dropdown
-fetch('/api/vendors').then(r=>r.json()).then(list=>{
-  var sel=document.getElementById('vendor-filter');
-  list.forEach(function(v){
-    var o=document.createElement('option');
-    o.value=v.name;o.textContent=v.name+' ('+v.count+')';
-    sel.appendChild(o);
-  });
-});
-
 document.getElementById('search').addEventListener('input',function(){q=this.value;page=1;load();});
-document.getElementById('vendor-filter').addEventListener('change',function(){vendor=this.value;page=1;load();});
 document.getElementById('sort').addEventListener('change',function(){
   sort=this.value;page=1;
   try { localStorage.setItem(LS_SORT, sort); } catch(e){}
@@ -559,7 +545,7 @@ function productPage(p) {
 
   return `${headCommon(
     `${p.title} — Order Free Sample | Custom Digital Murals`,
-    `${p.title} by ${p.vendor}. Order a free memo sample via Designer Wallcoverings. Trade service available. Large-format digital mural printed to your exact dimensions.`
+    `${p.title} from Designer Wallcoverings. Order a free memo sample. Trade service available. Large-format digital mural printed to your exact dimensions.`
   )}
 <body>
 ${headerHtml('')}
@@ -567,7 +553,7 @@ ${headerHtml('')}
   "@context": "https://schema.org",
   "@type": "Product",
   "name": p.title,
-  "brand": { "@type": "Brand", "name": p.vendor },
+  "brand": { "@type": "Brand", "name": "Designer Wallcoverings" },
   "offers": { "@type": "Offer", "priceCurrency": "USD", "price": p.price || "0", "availability": "https://schema.org/InStock" },
   "image": mainImg,
   "url": `https://customdigitalmurals.com/product/${p.handle}`
@@ -578,7 +564,7 @@ ${headerHtml('')}
     ${mainImg ? `<img src="${escHtml(mainImg)}" alt="${escHtml(p.title)}" loading="eager">` : '<div style="width:100%;height:100%;background:var(--line)"></div>'}
   </div>
   <div class="product-info">
-    <div class="brand-line">${escHtml(p.vendor)}</div>
+    <div class="brand-line">Designer Wallcoverings</div>
     <h1>${escHtml(p.title)}</h1>
     <div class="price">${escHtml(price)}</div>
     ${prose ? `<div class="body-prose">${escHtml(prose)}</div>` : ''}

← 7905e4b add /api/facets returning FILTERED counts (vendors + product  ·  back to Customdigitalmurals  ·  wire api-vendor-redact middleware (close vendors-facet leak) 55825b0 →