[object Object]

← back to Dw Yolo Loop

Landing: all line labels config-driven (card label, books heading, footer, gate, PDP crumbs/spec/share/story/JSON-LD) — fixes Thibaut showing 'Artmura'

eee1f4d7d6736dbc6a5a25196bc4988f251a8f40 · 2026-06-12 12:42:32 -0700 · Steve Abrams

Files touched

Diff

commit eee1f4d7d6736dbc6a5a25196bc4988f251a8f40
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Jun 12 12:42:32 2026 -0700

    Landing: all line labels config-driven (card label, books heading, footer, gate, PDP crumbs/spec/share/story/JSON-LD) — fixes Thibaut showing 'Artmura'
---
 artmura-site/public/index.html   | 33 +++++++++++++++++++--------------
 artmura-site/public/product.html | 24 ++++++++++++++----------
 2 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/artmura-site/public/index.html b/artmura-site/public/index.html
index ef47e22..0ff7da7 100644
--- a/artmura-site/public/index.html
+++ b/artmura-site/public/index.html
@@ -3,13 +3,12 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Artmura Wallcoverings | Designer Wallcoverings</title>
-<meta name="description" content="The Artmura collection at Designer Wallcoverings — architectural, hand-finished Italian non-woven wallcoverings. 161 designs across Opera & La Scala Milano, sold by the yard, to the trade.">
+<title>Designer Wallcoverings</title>
+<meta name="description" content="A curated collection at Designer Wallcoverings — to the trade.">
 <meta property="og:type" content="website">
-<meta property="og:title" content="Artmura Wallcoverings | Designer Wallcoverings">
-<meta property="og:description" content="The Artmura collection, curated by Designer Wallcoverings.">
+<meta property="og:title" content="Designer Wallcoverings">
+<meta property="og:description" content="A curated collection at Designer Wallcoverings.">
 <meta name="theme-color" content="#f6f2ec">
-<link rel="canonical" href="https://www.designerwallcoverings.com/collections/artmura">
 <link rel="preconnect" href="https://fonts.googleapis.com">
 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 <link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
@@ -24,7 +23,7 @@
 <header class="hero" id="hero">
   <div class="hero-inner">
     <div class="hero-eyebrow" id="heroEyebrow">A Designer Wallcoverings Collection</div>
-    <h1 id="heroH1">Artmura</h1>
+    <h1 id="heroH1">&nbsp;</h1>
     <div class="sub" id="heroSub">Architectural surfaces, hand-finished — curated by Designer Wallcoverings.</div>
     <div class="hero-kicker" id="heroKicker">Made in Italy · Non-Woven Wallcoverings</div>
   </div>
@@ -33,8 +32,8 @@
 
 <!-- COLLECTIONS -->
 <section class="books" id="collections">
-  <div class="eyebrow">The Books</div>
-  <h2>Opera &amp; La Scala Milano</h2>
+  <div class="eyebrow" id="booksEyebrow">The Collection</div>
+  <h2 id="booksHeading">Designer Wallcoverings</h2>
   <div class="chips" id="chips"></div>
 </section>
 
@@ -77,10 +76,10 @@
     <div>
       <a class="wm" href="https://www.designerwallcoverings.com">Designer Wallcoverings</a>
       <div style="margin-top:8px">Designer Wallcoverings &amp; Fabrics · To the Trade</div>
-      <div style="margin-top:4px;opacity:.8">The Artmura Collection — one of 200+ lines we carry.</div>
+      <div id="footLine" style="margin-top:4px;opacity:.8">One of 200+ lines we carry.</div>
       <div class="share" id="shareCollection" style="margin-top:18px"></div>
     </div>
-    <div class="gate">Architectural Italian non-woven wallcoverings, sold by the yard at Designer Wallcoverings. Order a sample before specifying. <a href="https://www.designerwallcoverings.com/collections/artmura" style="color:var(--gold)">Shop the Artmura collection →</a></div>
+    <div class="gate" id="footGate">Sold by the yard at Designer Wallcoverings. Order a sample before specifying. <a id="footGateLink" href="https://www.designerwallcoverings.com" style="color:var(--gold)">Shop the collection →</a></div>
   </div>
 </footer>
 
@@ -88,8 +87,8 @@
 
 <script>
 const $=s=>document.querySelector(s), grid=$('#grid');
-let ALL=[], view=[], activeBook=null, activeColor=null, activeSeries=null, FACETS=null;
-const LS={sort:'artmura.sort', dens:'artmura.density'};
+let ALL=[], view=[], activeBook=null, activeColor=null, activeSeries=null, FACETS=null, LINE='';
+const LS={sort:'dwline.sort', dens:'dwline.density'};
 const BUCKET_HEX={white:'#efeae0',grey:'#9e978c',black:'#2a2722',red:'#a23b2e',orange:'#c8763a',brown:'#7b5a3c',gold:'#b8923f',green:'#5d7150',teal:'#3f8a86',blue:'#5a7494',purple:'#7a5f86',pink:'#bb8aa0'};
 
 const heroBg = url => `linear-gradient(0deg,rgba(0,0,0,0),rgba(0,0,0,0)),url("${url}")`;
@@ -146,7 +145,7 @@ function render(){
         <div class="ser">${p.series||''}</div>
         <div class="nm">${p.color||p.title}</div>
         <div class="meta">
-          <span class="col">${p.hex?`<span class="dot" style="background:${p.hex}"></span>`:''}${p.book||'Artmura'}</span>
+          <span class="col">${p.hex?`<span class="dot" style="background:${p.hex}"></span>`:''}${p.book||LINE}</span>
           <span class="pr view">View →</span>
         </div>
       </div>
@@ -195,8 +194,14 @@ function applyConfig(cfg){
   if(cfg.tagline) $('#heroSub').textContent=cfg.tagline;
   if(cfg.kicker)  $('#heroKicker').textContent=cfg.kicker;
   if(cfg.title)   document.title=cfg.title;
+  if(cfg.metaDescription){ const m=document.querySelector('meta[name=description]'); if(m)m.content=cfg.metaDescription; }
+  if(cfg.collectionUrl){ let c=document.querySelector('link[rel=canonical]'); if(!c){c=document.createElement('link');c.rel='canonical';document.head.appendChild(c);} c.href=cfg.collectionUrl; }
+  LINE = cfg.line || LINE;
+  if(cfg.booksHeading){ const bh=$('#booksHeading'); if(bh)bh.textContent=cfg.booksHeading; }
   if(cfg.collectionUrl){ const sb=$('#shopbar'); if(sb)sb.href=cfg.collectionUrl; }
-  renderShare(cfg.collectionUrl||cfg.storeBase, (cfg.title||'Artmura at Designer Wallcoverings'));
+  const fl=$('#footLine'); if(fl) fl.textContent=`The ${LINE} Collection — one of 200+ lines we carry.`;
+  const fg=$('#footGateLink'); if(fg){ fg.textContent=`Shop the ${LINE} collection →`; if(cfg.collectionUrl)fg.href=cfg.collectionUrl; }
+  renderShare(cfg.collectionUrl||cfg.storeBase, (cfg.title||`${LINE} at Designer Wallcoverings`));
 }
 
 // social share cluster — shares the real DW collection page
diff --git a/artmura-site/public/product.html b/artmura-site/public/product.html
index 85f702a..3c3a705 100644
--- a/artmura-site/public/product.html
+++ b/artmura-site/public/product.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Artmura Wallcovering | Designer Wallcoverings</title>
+<title>Designer Wallcoverings</title>
 <link rel="preconnect" href="https://fonts.googleapis.com">
 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 <link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
@@ -20,7 +20,7 @@
 
 <main class="pdp" id="pdp"><div class="crumbs">Loading…</div></main>
 
-<a class="shopbar" href="https://www.designerwallcoverings.com/collections/artmura" target="_blank" rel="noopener">Shop the full Artmura collection at <b>Designer Wallcoverings</b> →</a>
+<a class="shopbar" href="https://www.designerwallcoverings.com" target="_blank" rel="noopener">Shop the collection at <b>Designer Wallcoverings</b> →</a>
 
 <script>
 const handle=location.pathname.split('/').pop();
@@ -29,27 +29,31 @@ const esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"
 function specRow(k,v){return v?`<div class="row"><span class="k">${k}</span><span class="v">${esc(v)}</span></div>`:'';}
 
 (async()=>{
-  const r=await fetch('/api/product/'+handle);
+  const [cfg,r]=await Promise.all([fetch('/api/config').then(x=>x.json()).catch(()=>({})), fetch('/api/product/'+handle)]);
+  const LINE = cfg.line || cfg.vendor || 'Designer Wallcoverings';
+  const COLL = cfg.collectionUrl || cfg.storeBase || 'https://www.designerwallcoverings.com';
+  document.querySelector('.corner.ul').setAttribute('href', cfg.houseUrl || 'https://www.designerwallcoverings.com');
+  const sbar=document.querySelector('.shopbar'); if(sbar){ sbar.href=COLL; sbar.innerHTML=`Shop the full ${LINE} collection at <b>Designer Wallcoverings</b> →`; }
   if(!r.ok){document.getElementById('pdp').innerHTML='<div class="crumbs"><a href="/">← Back</a></div><h1 style="font-family:var(--serif)">Not found</h1>';return;}
   const p=await r.json();
-  document.title=`${p.color||p.title} · Artmura | Designer Wallcoverings`;
+  document.title=`${p.color||p.title} · ${LINE} | Designer Wallcoverings`;
   const imgs=p.images.length?p.images:[p.swatch].filter(Boolean);
   const main=imgs[0];
 
   document.getElementById('pdp').innerHTML=`
-    <div class="crumbs"><a href="https://www.designerwallcoverings.com">Designer Wallcoverings</a> &nbsp;/&nbsp; <a href="/">Artmura</a> &nbsp;/&nbsp; <a href="/#catalog">${esc(p.series)}</a> &nbsp;/&nbsp; ${esc(p.color||p.title)}</div>
+    <div class="crumbs"><a href="https://www.designerwallcoverings.com">Designer Wallcoverings</a> &nbsp;/&nbsp; <a href="/">${esc(LINE)}</a> &nbsp;/&nbsp; <a href="/#catalog">${esc(p.series)}</a> &nbsp;/&nbsp; ${esc(p.color||p.title)}</div>
     <div class="pdp-top">
       <div class="gallery">
         <div class="main" id="main" style="background-image:url('${main}')"></div>
         ${imgs.length>1?`<div class="thumbs">${imgs.map((s,i)=>`<div class="t ${i===0?'on':''}" data-s="${s}" style="background-image:url('${s}')"></div>`).join('')}</div>`:''}
       </div>
       <div class="rail">
-        <div class="ser">${esc(p.series)} · ${esc(p.book||'Artmura')}</div>
+        <div class="ser">${esc(p.series)} · ${esc(p.book||LINE)}</div>
         <h1>${esc(p.color||p.title)}</h1>
         <div class="colr">${esc(p.sku)} · ${esc(p.substrate||'Non-Woven')}</div>
         <a class="cta" href="${esc(p.store_url)}" target="_blank" rel="noopener">View &amp; price on Designer Wallcoverings →</a>
         <a class="cta ghost" href="${esc(p.store_url)}" target="_blank" rel="noopener">Order a sample</a>
-        <div class="share" id="share" data-url="${esc(p.store_url)}" data-title="${esc((p.color||p.title)+' · Artmura | Designer Wallcoverings')}" data-img="${esc(main)}"></div>
+        <div class="share" id="share" data-url="${esc(p.store_url)}" data-title="${esc((p.color||p.title)+' · '+LINE+' | Designer Wallcoverings')}" data-img="${esc(main)}"></div>
         <div class="spec">
           ${specRow('Item code',p.sku)}
           ${specRow('Grade',p.grade)}
@@ -63,7 +67,7 @@ function specRow(k,v){return v?`<div class="row"><span class="k">${k}</span><spa
       </div>
     </div>
     <div class="story">
-      <div><h3>The story</h3><div>${p.body_html||'<p>'+esc(p.title)+' by Artmura.</p>'}</div></div>
+      <div><h3>The story</h3><div>${p.body_html||'<p>'+esc(p.title)+' by '+esc(LINE)+'.</p>'}</div></div>
       <div><h3>Specifications</h3><p>${esc(p.width||'')} · ${esc(p.substrate||'Non-Woven')} · ${esc(p.grade||'Residential')} grade · ${esc(p.coverage||'')} · ${esc(p.origin||'Made in Italy')}.</p></div>
       <div><h3>Care &amp; install</h3><p>Paste-the-wall non-woven · spongeable · lead-time ${esc(p.lead_time||'3–4 weeks')}. Order a sample before specifying.</p></div>
     </div>
@@ -74,8 +78,8 @@ function specRow(k,v){return v?`<div class="row"><span class="k">${k}</span><spa
 
   // JSON-LD Product schema
   // No price in JSON-LD — pricing lives on the canonical DW product page (offers → its URL)
-  const ld={ "@context":"https://schema.org","@type":"Product",name:p.title+" by Artmura",sku:p.sku,
-    brand:{"@type":"Brand",name:"Artmura"},category:"Wallcoverings",image:imgs,
+  const ld={ "@context":"https://schema.org","@type":"Product",name:p.title+" by "+LINE,sku:p.sku,
+    brand:{"@type":"Brand",name:LINE},category:"Wallcoverings",image:imgs,
     description:(p.body_html||'').replace(/<[^>]+>/g,'').slice(0,300),
     offers:{"@type":"Offer",availability:"https://schema.org/InStock",url:p.store_url}};
   const s=document.createElement('script');s.type='application/ld+json';s.textContent=JSON.stringify(ld);document.head.appendChild(s);

← c8841df Thibaut color-extract script + color filter enabled (38/38 c  ·  back to Dw Yolo Loop  ·  Fix broken Trade nav link: /pages/trade-program (404) → /pag bcd2924 →