[object Object]

← back to Quadrille House Site

auto-save: 2026-06-23T16:53:06 (5 files) — public/index.html public/product.html public/styles.css scripts/build-house.js scripts/finalize.pid

82db62bfa27abb425b4dc0a1d09eebc8de9aec59 · 2026-06-23 16:53:08 -0700 · Steve Abrams

Files touched

Diff

commit 82db62bfa27abb425b4dc0a1d09eebc8de9aec59
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jun 23 16:53:08 2026 -0700

    auto-save: 2026-06-23T16:53:06 (5 files) — public/index.html public/product.html public/styles.css scripts/build-house.js scripts/finalize.pid
---
 public/index.html      | 2 +-
 public/product.html    | 9 ++++++++-
 public/styles.css      | 4 ++++
 scripts/build-house.js | 3 ++-
 scripts/finalize.pid   | 1 +
 5 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/public/index.html b/public/index.html
index 95d6373..59f591e 100644
--- a/public/index.html
+++ b/public/index.html
@@ -163,7 +163,7 @@ function render(){
         <div class="nm">${p.display_name||p.color||p.title}</div>
         <div class="meta">
           <span class="col">${p.hex?`<span class="dot" style="background:${p.hex}"></span>`:''}${p.brand}</span>
-          <span class="pr view">${p.cta_mode==='live'?'View →':'Request →'}</span>
+          <span class="pr view">${p.cta_mode==='live'?'View →':p.cta_mode==='sample'?('Sample $'+Number(p.sample_price||4.25).toFixed(2)+' →'):'Request →'}</span>
         </div>
       </div>
     </div>`).join('');
diff --git a/public/product.html b/public/product.html
index e253514..697399b 100644
--- a/public/product.html
+++ b/public/product.html
@@ -63,11 +63,17 @@ let PROD=null, CFG=null;
   const main=imgs[0];
 
   const isLive = p.cta_mode==='live' && p.store_url;
+  const isSample = p.cta_mode==='sample';
+  const samplePrice = (p.sample_price!=null) ? Number(p.sample_price).toFixed(2) : '4.25';
   const ctaMain = isLive
     ? `<a class="cta" href="${esc(p.store_url)}" target="_blank" rel="noopener">View &amp; order on Designer Wallcoverings →</a>`
+    : isSample
+    ? `<div class="price-sample">Sample — $${samplePrice}</div><button class="cta" id="reqBtn" type="button">Order a sample — $${samplePrice} →</button>`
     : `<button class="cta" id="reqBtn" type="button">Request memo sample &amp; quote →</button>`;
   const ctaGhost = isLive
     ? `<a class="cta ghost" href="${esc(p.store_url)}" target="_blank" rel="noopener">Order a sample</a>`
+    : isSample
+    ? `<div class="trade-note">To the trade · hand-screened to order · sample ships before you specify</div>`
     : `<div class="trade-note">To the trade · hand-screened to order</div>`;
 
   document.getElementById('pdp').innerHTML=`
@@ -101,7 +107,7 @@ let PROD=null, CFG=null;
     <div class="story">
       <div><h3>The pattern</h3><div>${p.body_html||'<p>'+esc(p.title)+' — a hand-screened design from '+esc(BRAND)+', part of the Quadrille house.</p>'}</div></div>
       <div><h3>Specifications</h3><p>${[p.composition,p.width&&('Width '+p.width),p.repeat&&('Repeat '+p.repeat),p.match_type].filter(Boolean).map(esc).join(' · ')||'Hand-screened to order.'}</p></div>
-      <div><h3>${isLive?'Order':'To the trade'}</h3><p>${isLive?'Available now at Designer Wallcoverings — order a sample before specifying.':'Hand-screened to order. Request a memo sample and trade quote — pricing is provided to the trade, not shown publicly.'}</p></div>
+      <div><h3>${isLive?'Order':isSample?'Order a sample':'To the trade'}</h3><p>${isLive?'Available now at Designer Wallcoverings — order a sample before specifying.':isSample?('Order a '+esc(BRAND)+' sample for $'+samplePrice+' to see the colorway and hand in person. Hand-screened to order; full pricing is provided to the trade.'):'Hand-screened to order. Request a memo sample and trade quote — pricing is provided to the trade, not shown publicly.'}</p></div>
     </div>
     <section class="pairs" id="pairs" hidden>
       <h3>Pairs well with</h3>
@@ -113,6 +119,7 @@ let PROD=null, CFG=null;
     brand:{"@type":"Brand",name:BRAND},category:p.product_type||'Wallcoverings',image:imgs,
     description:(p.body_html||p.title||'').replace(/<[^>]+>/g,'').slice(0,300)};
   if(isLive) ld.offers={"@type":"Offer",availability:"https://schema.org/InStock",url:p.store_url};
+  else if(isSample) ld.offers={"@type":"Offer",availability:"https://schema.org/InStock",price:samplePrice,priceCurrency:"USD",url:location.href,itemCondition:"https://schema.org/NewCondition",name:"Sample"};
   const s=document.createElement('script');s.type='application/ld+json';s.textContent=JSON.stringify(ld);document.head.appendChild(s);
 
   // canonical → live PDP for China Seas (complements, never competes); held items self-canonical
diff --git a/public/styles.css b/public/styles.css
index 26a7a24..6172fab 100644
--- a/public/styles.css
+++ b/public/styles.css
@@ -273,3 +273,7 @@ body[data-line="fallingstar"] .books h2::after{content:"";display:block;width:72
 .qdone{text-align:center;padding:18px 0}
 .qdone p{font-size:15px;line-height:1.7;color:var(--ink);margin:0 0 18px}
 @media(max-width:520px){.qrow{grid-template-columns:1fr}}
+
+/* $4.25 sample price display (net-new held lines, sold as samples) */
+.price-sample{font-family:Georgia,serif;font-size:1.35rem;color:var(--gold);margin:.2rem 0 .6rem;letter-spacing:.01em}
+.price-sample::before{content:"";display:inline-block;width:18px;height:1px;background:var(--gold);vertical-align:middle;margin-right:.5rem;opacity:.6}
diff --git a/scripts/build-house.js b/scripts/build-house.js
index 48d9bd8..822a16b 100644
--- a/scripts/build-house.js
+++ b/scripts/build-house.js
@@ -101,7 +101,8 @@ async function loadNetNew() {
     const handle = (r.mfr_sku || `${r.brand}-${i}`).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '');
     return {
       brand: r.brand,
-      cta_mode: 'quote',                 // HELD net-new: no cost → memo-sample / quote
+      cta_mode: 'sample',                // net-new: sell a $4.25 sample variant (no roll price — no cost)
+      sample_price: 4.25,                // flat sample price (China Seas model), cost-independent
       handle,
       sku: r.mfr_sku,
       series: r.pattern_name || null,    // pattern = the series/filter
diff --git a/scripts/finalize.pid b/scripts/finalize.pid
new file mode 100644
index 0000000..b52b7c2
--- /dev/null
+++ b/scripts/finalize.pid
@@ -0,0 +1 @@
+5704

← 0bdd1ef Auto-finalize: rebuild house.json snapshot + restart :9943 w  ·  back to Quadrille House Site  ·  Net-new lines sell as $4.25 samples (cta_mode=sample) — no w 0b3976e →