Retrowalls
Search the build
-
7d3dbeb2026-07-06 Square product-card images (aspect-ratio 1/1) -
6502ef12026-07-03 corner-nav: move login to its own hamburger in upper-left (panel slides from left) -
b9d8b892026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew) -
1cf0d0e2026-06-19 Mount new-arrivals promo strip (Tier B): require ../_shared/_universal-promo-banner before express.static — text-only rotating 'New · <product> →' banner from /api/products?sort=newest. Local only; deploy gated. -
70a042d2026-06-18 fix: safeImg allow same-origin /img/ proxy urls (vendor-neutral image proxy 2026-06-03) — product cards were falling back to hero-bg (images all wrong) -
cc8f3a42026-06-11 retrowalls: rails fire again — wire sliders + grid filter to aesthetic-OR-tags matcher (prod-safe try-require + inline fallback) -
7d4425e2026-06-09 step2 vendor-leak fix: dual-key /sample resolver + handle_display hrefs -
b05db522026-06-03 seo: add robots.txt + sitemap.xml (was 404 — crawl gap) -
1a1317d2026-06-03 Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle -
edbec612026-06-03 a11y: add aria-label to contact/sample form inputs (zero visual; screen-reader association) -
286f53e2026-06-01 admin: add dw-theme-nav 20-theme navigator (upper-right, admin-only) -
4c2a8612026-06-01 hero: rotate curated room-setting pool (hero-pool.json), guard >=1400px, no swatch blur -
58219f92026-06-01 homepage: retire redundant corner-nav.js (ns-header hamburger is the live nav) -
f9719842026-06-01 homepage: collapse duplicated 'Ideas' rail-eyebrows into one section eyebrow -
20fcec52026-06-01 Unique hero image (backsync from prod, fleet hero dedup 2026-06-01) -
b877cdb2026-06-01 Revert "Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep)" -
1f440032026-06-01 hero: activate self-contained 2x2 hero-4grid (fleet sweep, local) -
92b10d42026-06-01 Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep) -
216a4562026-06-01 /api/facets honors q+aesthetic+vendor filters via shared filterProducts() — counts + total reflect filtered set, not unfiltered catalog -
4e776b92026-06-01 noopener,noreferrer on sister-site map window.open(_blank) -
e76c4442026-05-30 fix: block .bak-TIMESTAMP backup files from being served + add *.bak-* to .gitignore -
8d0ed492026-05-29 feat(fleet): theme1/theme2 query-param-gated toggle on catalog page -
0e8b6202026-05-28 scrub vendor name leaks from products.json source (344 products: title/vendor/tags cleaned per sku-redact denylist) -
ca212d42026-05-26 frontend: cleanSku() strips vendor names from displayed sku (.ven/list/detail) + defer renderRailSections call (fix ReferenceError) — click-through verified -
cc7338e2026-05-26 sku-redact: wire shared vendor-id display scrubber -
644afec2026-05-26 rails: editorial labels for firing aesthetic buckets -
20496232026-05-26 rails: wire /api/sliders into horizontal scroll-snap rail sections [fixed] -
15614c62026-05-25 pre-hydrate density --cols CSS var before first paint — eliminates 6→saved flash on reload -
f0968232026-05-25 redact p.vendor on Ideas rail — replace with 'Designer Wallcoverings' brand string -
b3bdcce2026-05-25 wire api-vendor-redact middleware as first app.use() — strips vendor field + vendors facet from /api/* responses -
21a9a162026-05-25 pull-from-shopify: use shared classifier with rails primary, local aestheticOf as fallback -
30b2add2026-05-25 retag aesthetic from PG: 573 rows updated -
caa78e62026-05-20 add: pre-stage Meta Pixel snippet (placeholder; flip via _dw-batch set-fb-pixel.sh) -
b4cd5732026-05-19 make server.js self-contained — gate _shared/admin-catalog behind MICROSITE_ADMIN_ENABLED env flag (kamatera deploy unblock) -
a2f77f52026-05-19 sort: hydrate saved sort from localStorage before first grid load + send to /api/products -
d3b1cfc2026-05-19 fix(grid): hydrate saved sort BEFORE first /api/products call -
daad56e2026-05-19 chore(gitignore): cover *.bak.* and *.pre-* snapshot patterns -
cd1cf672026-05-19 chore(repo): untrack editor snapshots and broaden gitignore for *.bak.* / *.pre-* -
f88113a2026-05-19 fix(security): 404-guard for .bak/.pre-* editor snapshots in static root -
f7826742026-05-19 fix(api): /api/facets total counts the served niche list, not raw catalog -
c0aa94c2026-05-19 Phase 2b: harden .card .pat against long-token title clipping (overflow-wrap) -
41252b22026-05-19 Phase 2: mobile-ready + tap-to-reveal -
b5739032026-05-19 stage2: wire microsite catalog + admin CRUD + grid/list view -
56791792026-05-14 hero-4grid: relocate json from data/ to public/ for Express static -
5774b972026-05-14 4-grid hero: drop-in script + crop CSS + initial 4 newest products -
616e31a2026-05-14 favicon: Mag-7-inspired SVG glyph -
9cd36b62026-05-13 fix env wiring — anchor dotenv to __dirname so .env loads even when pm2 cwd is wrong -
9cabf1d2026-05-13 corner-nav: title-case the brand name even when .ns-name source is lowercase -
cb97b372026-05-13 corner-nav: title-case brand display (e.g. corkwallcovering → Cork Wallcovering) -
4a26fe62026-05-13 corner-nav: fix injection — script tag was landing inside HTML comment, now anchored to real </body> -
bd98dca2026-05-13 fix: contact modal CSS+HTML (was rendering inline as raw emoji/links) -
430d9142026-05-13 embed Big Red customer chat (lower-left, retail mode, vendor-redacted) -
c279abf2026-05-13 chip-click → product details modal; vendor redacted in card overlay -
fd830032026-05-13 add universal corner-nav.js (UR 4-icon: bag/account/search/menu) -
c856c162026-05-13 remove stray contact modal markup that was rendering inline on the page -
e35ced92026-05-11 fleet-grid refine: chip_uniform_aspect (retrowalls) -
0f4396b2026-05-11 snapshot before fleet-grid refine tick 7 -
45992162026-05-10 sort-skill UI: add Light→Dark / Dark→Light / Color Wheel options -
17996f82026-05-10 sort-skill canonical: add light-dark/dark-light/wheel + helpers -
76c1d312026-05-10 apply R1+R2+R4 hero standing rules — strip Studio Castel, lowercase serif wordmark below photo, add data-hero-mode huge default + four-square hydration -
1ad12852026-05-07 Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags) -
4cdc2f82026-05-07 graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags -
a99d6b62026-05-07 graphic-loop pass 12: niche keyword filter (no off-niche products like 'solid' on patterned sites) -
26fd8af2026-05-07 graphic-loop pass 11: add Ideas rails (New this week + Curated picks) above main grid -
a49889a2026-05-07 fix: stale res.json fragment causing SyntaxError -
0397efd2026-05-07 graphic-loop pass 10: center-mark to top + readable text-shadow + tighter letter-spacing (no mix-blend-mode) -
a461ff22026-05-07 graphic-loop pass 9: real site name + 20-image hero rotation + 2400px hero res -
b1f1b622026-05-06 graphic-loop pass 5: serif hero typography (Cormorant Garamond) + nav legibility (qwen3 unanimous) -
a5659872026-05-06 graphic-loop pass 2: fix .corner-mark contrast + soften hero overlay (qwen3:14b consensus across fleet) -
57d4abb2026-05-06 initial scaffold (gitify-all 2026-05-06)
Authors
- Steve70
Agents used
Skills used
- /products5
- /tags3
- /index3
- /sample2
- /vendor2
- /facets2
- /list2
- /npm1
- /npx1
- /homebrew1
- /handle1
- /theme21
- /detail1
- /sliders1
- /admin-catalog1
- /vendors1
- /body1
- /links1
- /account1
- /search1
- /menu1
- /dark-light1
- /wheel1
Creative ideas + design notes
58219f9 · 2026-06-01 · homepage: retire redundant corner-nav.js (ns-header hamburger is the live nav)
Brings retrowalls in line with the other 47 sister sites: the static .ns-header + nsToggleNav() hamburger is the working nav, so the legacy corner-nav.js overlay is redundant. Eyebrow fix already committed prior.
e76c444 · 2026-05-30 · fix: block .bak-TIMESTAMP backup files from being served + add *.bak-* to .gitignore
public/index.html.bak-20260526152130 was accessible via HTTP (200) because the bak-guard regex only matched .bak followed by a dot or EOL, not .bak-*. Updated regex to /\.bak(?:[\.\-]|$)/ to cover all three variants (.bak, .bak., .bak-). Removed the leaked file and added *.bak-* to .gitignore. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8d0ed49 · 2026-05-29 · feat(fleet): theme1/theme2 query-param-gated toggle on catalog page
Default: theme1, toggle hidden. Opt-in via ?theme=2 or localStorage
('wallco-page-theme' key shared across the fleet). Same gate pattern
as dw-domain-fleet productPage.
30b2add · 2026-05-25 · retag aesthetic from PG: 573 rows updated
before: all=600 after: abstract=3, all=27, damask=130, deco=31, geometric=401, global=7, vintage=1 Backfills correct multi-bucket aesthetic tagging from dw_unified.microsite_products (DTD verdict B, 2026-05-25 fleet retag run). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a2f77f5 · 2026-05-19 · sort: hydrate saved sort from localStorage before first grid load + send to /api/products
Completes the sort wire-up — change listener was already attached but state.sort was never restored on load and never sent as a query param, so the saved selection had no effect on first render. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d3b1cfc · 2026-05-19 · fix(grid): hydrate saved sort BEFORE first /api/products call
Two bugs combined to make the saved sort effectively write-only: 1. loadGridPage() didn't pass state.sort to the server, so the API always defaulted to 'newest' regardless of the slider state. 2. The sort-select wire-up that reads localStorage and assigns state.sort runs AFTER loadGridPage(), so even if the API had read state.sort it would have seen the default 'newest'. Fix: hydrate state.sort from localStorage in the early state-init block (alongside view), and include state.sort in the /api/products query string. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cd1cf67 · 2026-05-19 · chore(repo): untrack editor snapshots and broaden gitignore for *.bak.* / *.pre-*
Removes 22 tracked snapshot files (server.js.bak.*, public/index.html.bak.*, public/index.html.pre-*, data/products.json.bak.*) from the index and adds *.bak.* + *.pre-* patterns so future on-disk snapshots stay local. Pairs with the .bak/.pre- HTTP 404-guard in server.js. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
f88113a · 2026-05-19 · fix(security): 404-guard for .bak/.pre-* editor snapshots in static root
Stray *.bak/*.bak.*/*.pre-* files under public/ should never be reachable via HTTP. Adds an Express middleware that returns 404 for any path matching those snapshot patterns, so the public static mount can't accidentally leak prior revisions of index.html or other pages. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
f782674 · 2026-05-19 · fix(api): /api/facets total counts the served niche list, not raw catalog
Previously total reflected pre-niche-filter PRODUCTS.length while the aesthetics/vendors histograms were computed from PRODUCTS_NICHE; clients saw a "total" that didn't match the sum of facet counts. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1ad1285 · 2026-05-07 · Scrub Designer Wallcoverings from products.json (vendor/imageAlt/tags)
Replaced literal 'Designer Wallcoverings' (vendor field, imageAlt suffix, and tag arrays) with site brand_name. The static HTML was already clean, but Browserbase rendered-page check found these JS-injected strings. Now: 0 DW leaks rendered. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
File tree
- .gitignore
- _universal-auth.js
- _universal-contact.js
- data/products.json
- data/users.json
- package-lock.json
- package.json
- public/about.html
- public/care.html
- public/corner-nav.js
- public/dw-theme-nav.js
- public/favicon.svg
- public/hero-4grid.js
- public/hero-4grid.json
- public/hero-bg.jpg
- public/history.html
- public/index.html
- public/robots.txt
- public/sitemap.xml
- public/sku-redact.js
- public/sourcing.html
- public/trade.html
- public/vocabulary.html
- scripts/pull-from-shopify.js
- server.js
- site.config.json