← 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{'&':'&','<':'<','>':'>','"':'"',"'":'''}[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 →