← back to Wallco Ai
strip Scenic/Studio sub-brand from customer-facing surfaces (proposal killed 2026-05-28 via DTD)
aed2aa0b924c7e4b219df643ea99b2fc9e1090f8 · 2026-05-28 13:43:38 -0700 · Steve
four surgical edits to server.js:
1. nav: drop /scenic and /studio entries (keep /designer-studio - separate tool)
2. routes: /scenic and /studio now 301-redirect to /designs
3. /designs page: strip Hospitality (Aman/Auberge/Four Seasons) chip block
4. productLine() neutralized to return null - kills grid-card chip, PDP chip,
?line=/?hospitality=/?studio_pack= filters, Studio trade-pricing branch
dead code (renderSubBrandLanding, hospitalityFit, studioPack, pitchScenic/Studio
text) kept for git history but no longer reachable. mural-scenic and
cactus-pine-scenic category SLUGS untouched - they're standalone product lines now.
Files touched
Diff
commit aed2aa0b924c7e4b219df643ea99b2fc9e1090f8
Author: Steve <steve@designerwallcoverings.com>
Date: Thu May 28 13:43:38 2026 -0700
strip Scenic/Studio sub-brand from customer-facing surfaces (proposal killed 2026-05-28 via DTD)
four surgical edits to server.js:
1. nav: drop /scenic and /studio entries (keep /designer-studio - separate tool)
2. routes: /scenic and /studio now 301-redirect to /designs
3. /designs page: strip Hospitality (Aman/Auberge/Four Seasons) chip block
4. productLine() neutralized to return null - kills grid-card chip, PDP chip,
?line=/?hospitality=/?studio_pack= filters, Studio trade-pricing branch
dead code (renderSubBrandLanding, hospitalityFit, studioPack, pitchScenic/Studio
text) kept for git history but no longer reachable. mural-scenic and
cactus-pine-scenic category SLUGS untouched - they're standalone product lines now.
---
server.js | 59 +++++++++++++++++++++++------------------------------------
1 file changed, 23 insertions(+), 36 deletions(-)
diff --git a/server.js b/server.js
index 4026c05..2a93d44 100644
--- a/server.js
+++ b/server.js
@@ -4523,8 +4523,8 @@ function htmlHeader(active) {
['/murals', 'Murals'],
['/samples', 'Samples'],
['/basket', 'Basket'],
- ['/scenic', 'Scenic'],
- ['/studio', 'Studio'],
+ // 2026-05-28 — Scenic/Studio sub-brand proposal killed via DTD. Nav entries
+ // removed; /scenic and /studio routes now redirect to /designs.
['/designer-studio', 'Designer Studio'],
['/play', 'Play'],
['/generator', 'Generator'],
@@ -5568,8 +5568,11 @@ function renderSubBrandLanding(req, res, line) {
res.type('html').send(body);
}
-app.get('/scenic', (req, res) => renderSubBrandLanding(req, res, 'Scenic'));
-app.get('/studio', (req, res) => renderSubBrandLanding(req, res, 'Studio'));
+// 2026-05-28 — Scenic/Studio sub-brand killed via DTD. The renderSubBrandLanding
+// function above is now dead code (kept for git history, not called). Old URLs
+// 301 to /designs so any inbound bookmark/index links don't 404.
+app.get('/scenic', (req, res) => res.redirect(301, '/designs'));
+app.get('/studio', (req, res) => res.redirect(301, '/designs'));
app.get('/designs', (req, res) => {
// 2026-05-20 Steve directive: NO hard server gate. Allow 1 page browsing,
@@ -6207,26 +6210,10 @@ ${(req.query.source === 'all') ? `
<!-- 2026-05-20 Steve directive — Color + Style scrub sliders stripped. -->
${''}
- <!-- Hospitality style-pack chips — only render when ?line=Scenic.
- Lets trade designers slice the 90+ photoreal scenics into 3 brand-fit
- packs (Aman / Auberge / Four Seasons). Chips link to the same /designs
- page with an extra ?hospitality= filter. -->
- ${lineQ.toLowerCase() === 'scenic' ? (() => {
- const hospQActive = String(req.query.hospitality || '').toLowerCase().replace(/-/g, ' ');
- const baseQs = ['line=Scenic'];
- if (cat) baseQs.push('cat=' + encodeURIComponent(cat));
- if (motifQ) baseQs.push('motif=' + encodeURIComponent(motifQ));
- if (hueQ) baseQs.push('hue=' + encodeURIComponent(hueQ));
- // Render "All / Aman / Auberge / Four Seasons" chips with on-state when
- // the active query matches.
- const all = `<a href="/designs?${baseQs.join('&')}" class="hosp-chip${!hospQActive ? ' is-on' : ''}" style="font:11px var(--sans);padding:5px 11px;border:1px solid ${!hospQActive ? 'var(--accent)' : 'var(--line)'};background:${!hospQActive ? 'var(--accent)' : 'transparent'};color:${!hospQActive ? 'var(--bg)' : 'var(--ink-soft)'};border-radius:999px;text-decoration:none">All Scenic</a>`;
- const packs = ['Aman', 'Auberge', 'Four Seasons'].map(name => {
- const on = hospQActive === name.toLowerCase();
- const href = '/designs?' + baseQs.concat('hospitality=' + encodeURIComponent(name)).join('&');
- return `<a href="${href}" class="hosp-chip${on ? ' is-on' : ''}" style="font:11px var(--sans);padding:5px 11px;border:1px solid ${on ? 'var(--accent)' : 'var(--line)'};background:${on ? 'var(--accent)' : 'transparent'};color:${on ? 'var(--bg)' : 'var(--ink-soft)'};border-radius:999px;text-decoration:none">${name}</a>`;
- }).join('');
- return '<div class="hosp-swatches" style="display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 4px;align-items:center"><span style="font:11px var(--sans);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint);margin-right:6px">Hospitality</span>' + all + packs + '</div>';
- })() : ''}
+ <!-- 2026-05-28 — Hospitality style-pack chips (Aman/Auberge/Four Seasons)
+ removed alongside Scenic/Studio sub-brand kill via DTD. Block was only
+ rendered when ?line=Scenic in URL, now always empty. -->
+ ${''}
<!-- Color-wheel hue swatches -->
<div class="hue-swatches" style="display:flex;flex-wrap:wrap;gap:6px;margin:18px 0 4px;align-items:center">
@@ -18046,18 +18033,18 @@ function categoryDisplay(category) {
return slug.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
}
-// Product-line classifier — Steve directive 2026-05-21. Maps a design's
-// category to its sub-brand: 'Scenic' (photoreal hospitality murals) or
-// 'Studio' (flat hand-painted-silk luxury hand-painted scenic register). Designs
-// outside these two categories return null and render with no line chip.
-// Source of truth is the product_line column in PG; this helper is the
-// in-memory mirror used by the JSON-file-backed DESIGNS array.
-function productLine(d) {
- if (!d) return null;
- if (d.product_line) return d.product_line;
- const c = String(d.category || '');
- if (c === 'cactus-11ft-mural' || c === 'tree-mural') return 'Scenic';
- if (c === 'cactus-pine-scenic') return 'Studio';
+// Product-line classifier — NEUTRALIZED 2026-05-28 (DTD verdict killed the
+// Scenic+Studio sub-brand proposal — see project_wallco_scenic_studio_subbrand).
+// Always returns null. Downstream effects:
+// - grid-card + PDP sub-brand chips disappear (early-return in their renderers)
+// - ?line=Scenic / ?line=Studio query filter produces empty result set
+// - hospitalityFit() and studioPack() short-circuit to null
+// - data-product-line attr on .detail-spec-panel renders empty so the Studio
+// trade-pricing branch (isStudio) on the calculator never fires
+// The mural-scenic / cactus-pine-scenic / cactus-11ft-mural / tree-mural / monterey-mural
+// categories KEEP their slugs and category-page rendering — they're standalone
+// product lines now, just not branded "Scenic" or "Studio".
+function productLine(_d) {
return null;
}
← 7e34229 luxe-curator: add canonical .when chip + flow created_at thr
·
back to Wallco Ai
·
wallco.ai: finish Scenic+Studio sub-brand strip — kill orpha 87fa2ac →