Jutewallpaper
Search the build
-
bc6efe12026-09-23 front-page-steward: ux-primitives bundle (grid) TK-12031 -
714c7a52026-09-23 TK-12031: bump ux-primitives bundle to canonical v1.1.1#7d74cd3b4123 (finish() clearSkel guard) — pilot parity with the 41-site fleet -
7d76a7f2026-09-22 front-page-steward: ux-primitives v1.1.1 — Cody slow-load fix (empty-state retracts on late products; never strands over a populated grid) TK-12031 -
1244f5b2026-09-22 front-page-steward: ux-primitives v1.1.0 lifecycle grid activation (data-ux-grid: safe skeleton auto-clear + zero-detect empty-state) TK-12031 -
2fc4e862026-09-22 front-page-steward: rework ux-primitives to silent bundle (remove demo-strip+fabricated SKU; no unsafe skeleton) TK-12031 -
a7e9db42026-09-22 front-page-steward: wire ux-primitives Bundle-B (toast+copy demo, idempotent) TK-12031 -
63369052026-09-16 TK-11787: restore jutewallpaper site identity (undo retrowalls template flattening from 2026-09-10) -
fe0264d2026-09-15 hero: flash-free R4 (flip after cells paint + clear grid) — yoloforever cycle 2 -
18ccd662026-09-15 hero: remove hero-4grid.js collision, R4 alternating block is sole owner (yoloforever cycle 1) -
a11b7222026-09-14 jutewallpaper: declare helmet + dotenv (undeclared deps would crash prod on npm ci --production) -
07fa1e92026-09-10 Add clean /privacy route (AdSense URL consistency) -
f7297d32026-09-10 auto-data-snapshot: 2026-09-10T11:43:04 (2 data files) — data/products.json package.json -
a4112132026-09-10 Standardize privacy policy to /privacy.html + footer link (AdSense) -
90eab732026-09-10 Add AdSense-compliant privacy policy page + footer link + /privacy route -
eabe55a2026-09-09 TK-11341: add AdSense Auto-Ads loader + ads.txt (revert to remove ads) -
027ca542026-08-12 auto-data-snapshot: 2026-08-12T11:28:02 (1 data files) — package-lock.json -
b6d98582026-08-12 chore: version bump v0.1.1 (session close — niche-filter fix) -
0139e0d2026-08-12 jutewallpaper: pin port 9886 (prod bring-up — was orphaned/colliding on 9911) -
fa31d152026-08-12 jutewallpaper: resync package-lock (dotenv) so npm ci deploys -
54581a92026-08-12 jutewallpaper: tighten niche filter — exclude competing-fiber products (fleet fix, 'it is not {niche}') -
99874302026-08-12 viewer standard: add per-field on/off menu (Fields ▾) to product grid -
492dac52026-08-04 fix: take infinite-scroll .loading indicator out of flow (kills ~0.3-0.4 CLS scroll-jump) -
ac7746c2026-08-04 Wire DW Meta Pixel 1431180262113856 + DW-network ad slot [ads/tracking rollout] -
f59a2c42026-08-01 jutewallpaper: adopt href-to-deeper-data storefront primitives (TK-10093) -
36625952026-07-30 catalog: scope to real on-domain products only -
ba153e72026-07-30 search: scroll results into view on mobile (grid was below the fold → looked like nothing happened) -
fbe09242026-07-29 corner-nav: block javascript:/data: URIs in search preview (URL-scheme allowlist) -
87afb9d2026-07-29 search: /api matcher now covers title+tags+description+type+vendor+sku -
07846f22026-07-29 corner-nav: live as-you-type search with thumbnail previews (title+tags+description) -
d03d8022026-07-06 Square product-card images (aspect-ratio 1/1) -
dbc3ef92026-07-03 corner-nav: move login to its own hamburger in upper-left (panel slides from left) -
3c292a42026-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. -
1b4bfae2026-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) -
8ea58e32026-06-11 jutewallpaper: rails fire again — wire to matcher + per-site railSynonyms mapping curated rail names to real tag vocab -
f9139b92026-06-11 Recompute aesthetic from tags via classifyAesthetic (was degenerate 'all' snapshot) -
faeeb762026-06-09 step2 vendor-leak fix: dual-key /sample resolver (raw + redacted handle_display) + client hrefs use scrubbed slug -
98838272026-06-09 snapshot before step2 handle-leak canary (untracked hero-pool.json) -
f04af0e2026-06-03 Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle -
0a0ef452026-06-03 seo/a11y: add visually-hidden <h1> (site name) for heading semantics — zero visual change -
493720b2026-06-03 a11y: add aria-label to contact/sample form inputs (zero visual; screen-reader association) -
3ed1cdd2026-06-01 admin: add dw-theme-nav 20-theme navigator (upper-right, admin-only) -
738552d2026-06-01 catalog: fill from Shopify (jutewallpaper niche) -
3bf89392026-06-01 fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch -
c68d24b2026-06-01 dw-header: hide ANY pre-existing <header> (not just ns-header); title-case bare-slug names -
dd95b4c2026-06-01 FIX: dw-header was injected inside a doc-comment (never ran); re-inject before the real </body> -
2751d8f2026-06-01 hero: rotate curated room-setting pool (hero-pool.json), guard >=1400px, no swatch blur -
cedf41b2026-06-01 hero/ideas: single big full-bleed hero (remove 2x2 four-square grid + hero-4grid.js/json + inert CSS), collapse Ideas to one rail -
64a05c22026-06-01 disable hero-4grid overlay so the unique high-res room/pattern hero shows full-bleed -
d845a622026-06-01 fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch -
e584aff2026-06-01 homepage: collapse duplicated 'Ideas' rail-eyebrows into one section eyebrow -
b9613c92026-06-01 Revert "Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep)" -
ff9f6182026-06-01 hero: activate self-contained 2x2 hero-4grid (fleet sweep, local) -
4bdc0aa2026-06-01 Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep) -
ce6497e2026-06-01 pilot: unique high-res niche hero (Mandalay Sisal 2400px) replacing shared image -
49e6d3b2026-06-01 pilot: header rebuild (hamburgers UL: nav + admin-tools / name centered) + Loewe accent #9B7B4F (was Bottega green drift); disable upper-right corner-nav -
8caa5f02026-06-01 add noopener,noreferrer to sister-site constellation window.open popup (FB target=_blank <a> already carried rel) -
c6b56a22026-06-01 /api/facets now drill-down counts over the active filtered set via shared filterProducts() (was counting whole niche catalog regardless of q/aesthetic/vendor; /api/products reuses helper) + 301 redirect legacy /*.html -> clean URLs (before express.static) + 404-guard for stray .bak/.pre-*/.orig backup files -
489d7152026-05-30 remove leaked backup file from public/ and fix .gitignore to cover *.bak-* pattern -
934b57b2026-05-29 feat(fleet): theme1/theme2 query-param-gated toggle on catalog page -
6a0e7182026-05-28 scrub vendor name leaks from products.json source (18 products: title/vendor/tags cleaned per sku-redact denylist) -
71048be2026-05-26 frontend: cleanSku() strips vendor names from displayed sku (.ven/list/detail) + defer renderRailSections call (fix ReferenceError) — click-through verified -
e6cdbab2026-05-26 sku-redact: wire shared vendor-id display scrubber -
3f8097c2026-05-26 Revert "rails: tag-aware via shared rail-match helper + editorial LABELS (rescue flat grid)" -
f8940a52026-05-26 rails: tag-aware via shared rail-match helper + editorial LABELS (rescue flat grid) -
82d5cac2026-05-26 rails: editorial labels for firing aesthetic buckets -
0a689342026-05-26 homepage: add retrowalls-canonical rail-sections (id=rails + renderRailSections) -
4e2dc092026-05-25 hydrate sort from localStorage pre-grid-load + noreferrer on Facebook target=_blank -
9191fe72026-05-25 wire api-vendor-redact middleware + scrub p.vendor from rail-card render -
2c844cb2026-05-25 retag aesthetic from PG: 59 rows updated -
c63a7222026-05-20 add: pre-stage Meta Pixel snippet (placeholder; flip via _dw-batch set-fb-pixel.sh) -
9a05e522026-05-20 fix: /about → history.html alias (was 404) -
c282a5c2026-05-19 make server.js self-contained — gate _shared/admin-catalog behind MICROSITE_ADMIN_ENABLED env flag (kamatera deploy unblock) -
7264fa12026-05-19 Phase 2b: harden .card .pat against long-token title clipping (overflow-wrap) -
503ce092026-05-19 fix: null-guard dead #theme-toggle reference (clean console + immediate grid render) -
5ae88cc2026-05-19 Phase 2: mobile-ready + tap-to-reveal -
1e3fab42026-05-19 stage2: wire microsite catalog + admin CRUD + grid/list view -
c5901ed2026-05-18 fix: add /about and clean-URL routes so dead nav link resolves to content pages -
9f560c12026-05-18 untrack stale .bak/.pre-* snapshot files and ignore the patterns -
f03c5202026-05-18 fix: /api/facets total reports niche-filtered count not pre-niche count -
1216c562026-05-18 fix: product grid sort select now actually passes sort to /api/products -
9abd8c02026-05-14 hero-4grid: relocate json from data/ to public/ for Express static -
4ed6b232026-05-14 4-grid hero: drop-in script + crop CSS + initial 4 newest products -
00c26b92026-05-14 favicon: Mag-7-inspired SVG glyph -
4d202da2026-05-13 fix env wiring — add __dirname-anchored dotenv + dotenv dep so ADMIN_PASS / GEORGE_AUTH actually load -
0880ccd2026-05-13 corner-nav: title-case the brand name even when .ns-name source is lowercase -
6d7c29e2026-05-13 corner-nav: title-case brand display (e.g. corkwallcovering → Cork Wallcovering) -
0bff1c82026-05-13 corner-nav: fix injection — script tag was landing inside HTML comment, now anchored to real </body> -
cbb61a42026-05-13 embed Big Red customer chat (lower-left, retail mode, vendor-redacted) -
e179e942026-05-13 chip-click → product details modal; vendor redacted in card overlay -
c56301b2026-05-13 add universal corner-nav.js (UR 4-icon: bag/account/search/menu) -
9bac1292026-05-13 remove stray contact modal markup that was rendering inline on the page -
ae446c92026-05-13 header: remove duplicate <header> with dwmOpen-contact (was overlapping ns-header) + add display:none default to .ns-modal so How-can-we-help only opens on click. Restores canonical logo-UL + hamburger-UR layout per MEMORY rule. -
c445f0f2026-05-13 brand: replace remaining fake brand globally → 'jutewallpaper' across head/meta/wordmark/footer — enforces MEMORY brand-stem rule -
276d4c62026-05-11 fleet-grid refine: chip_uniform_aspect (jutewallpaper) -
cec07902026-05-11 snapshot before fleet-grid refine -
5fb13632026-05-10 sort-skill UI: add Light→Dark / Dark→Light / Color Wheel options -
ca315692026-05-10 sort-skill canonical: add light-dark/dark-light/wheel + helpers -
820ae6d2026-05-07 graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags -
f4aa2672026-05-07 graphic-loop pass 12: niche keyword filter (no off-niche products like 'solid' on patterned sites) -
2db34992026-05-07 graphic-loop pass 11: add Ideas rails (New this week + Curated picks) above main grid -
6f6c7232026-05-07 graphic-loop pass 10: center-mark to top + readable text-shadow + tighter letter-spacing (no mix-blend-mode) -
178ed842026-05-07 graphic-loop pass 9: real site name + 20-image hero rotation + 2400px hero res -
2d882252026-05-07 graphic-loop pass 8: theme-aware font Libre Baskerville (panel-approved comprehensive 16-bucket assignment) -
8951fa32026-05-06 graphic-loop pass 5: serif hero typography (Cormorant Garamond) + nav legibility (qwen3 unanimous) -
932218a2026-05-06 graphic-loop pass 2: fix .corner-mark contrast + soften hero overlay (qwen3:14b consensus across fleet) -
3638f962026-05-06 initial scaffold (gitify-all 2026-05-06)
Authors
- Steve95
- steve5
- front-page-steward4
- auto-commit-fleet2
Agents used
Skills used
- /products7
- /claude6
- /code6
- /facets4
- /privacy3
- /vendor3
- /sample2
- /tags2
- /body2
- /index2
- /list2
- /sliders2
- /about2
- /sort1
- /density1
- /colliding1
- /off1
- /tracking1
- /data1
- /handle1
- /a11y1
- /ideas1
- /json1
- /pattern1
- /aesthetic1
- /theme21
- /detail1
- /rail-match1
- /heavy1
- /dyed1
Creative ideas + design notes
714c7a5 · 2026-09-23 · TK-12031: bump ux-primitives bundle to canonical v1.1.1#7d74cd3b4123 (finish() clearSkel guard) — pilot parity with the 41-site fleet
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KDmDMpwuKtwpXZnhec7bTP
1244f5b · 2026-09-22 · front-page-steward: ux-primitives v1.1.0 lifecycle grid activation (data-ux-grid: safe skeleton auto-clear + zero-detect empty-state) TK-12031
Real-activation neg-control proven both engines: skeleton appears-then-auto-clears, products render, sort re-render 0 ghost skeletons, true-zero empty-state only, no new bundle errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bjud9yhkmyLh365yZodCdn
2fc4e86 · 2026-09-22 · front-page-steward: rework ux-primitives to silent bundle (remove demo-strip+fabricated SKU; no unsafe skeleton) TK-12031
Negative-control proven: bundle introduces no new errors, grid/sort/density intact. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bjud9yhkmyLh365yZodCdn
a7e9db4 · 2026-09-22 · front-page-steward: wire ux-primitives Bundle-B (toast+copy demo, idempotent) TK-12031
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bjud9yhkmyLh365yZodCdn
fe0264d · 2026-09-15 · hero: flash-free R4 (flip after cells paint + clear grid) — yoloforever cycle 2
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UxvvaJ7p6VRZ4RzKDaBXqK
18ccd66 · 2026-09-15 · hero: remove hero-4grid.js collision, R4 alternating block is sole owner (yoloforever cycle 1)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UxvvaJ7p6VRZ4RzKDaBXqK
a11b722 · 2026-09-14 · jutewallpaper: declare helmet + dotenv (undeclared deps would crash prod on npm ci --production)
server.js hard-requires helmet but package.json declared only express; a clean npm ci --production prunes to express-only and the app crash-loops (MODULE_NOT_FOUND helmet, 502) — same latent bug that took linenwallpaper down. Declare both so a clean install is safe. Local only; not deployed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
489d715 · 2026-05-30 · remove leaked backup file from public/ and fix .gitignore to cover *.bak-* pattern
public/index.html.bak-20260526152130 was being served by express.static — removed. Added *.bak-* and *.orig patterns to .gitignore (existing *.bak.* missed hyphen-dated backups). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
934b57b · 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.
f8940a5 · 2026-05-26 · rails: tag-aware via shared rail-match helper + editorial LABELS (rescue flat grid)
- Wired buildRails/railFacets from ../_shared/rail-match.js into /api/sliders + /api/facets - Replaced aspirational aesthetic-only rails (fine/heavy/dyed/metallic/blended) with 6 tag-matched buckets: grasscloth, sisal, beige, woven, natural texture, textured (54–82% hit rates) - Added editorial LABELS for all 6 new keys in public/index.html - Result: 6 rails fire (was 0), each capped at 12 items Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0a68934 · 2026-05-26 · homepage: add retrowalls-canonical rail-sections (id=rails + renderRailSections)
Fleet rails sweep A3 — adds the canonical DW rail-sections pattern from
retrowalls (per LEDGER 2026-05-26 correction note). Renders rails from
/api/sliders ABOVE the flat grid on the unfiltered '/' home view; hides
itself when state.q or state.facet !== 'all'. Clicking 'View all -> on a
rail title calls state.facet=aes + resetGrid + scrollIntoView('#shop')
which is the canonical jumpToFacet behavior. Patch is 3 pieces:
(1) <div id='rails' style='display:none'></div> before <div id='grid'>
(2) .rail-section/.rail-head/.rail-all/.grid.rail-grid CSS
(3) async renderRailSections() fn + startup call right after loadGridPage().
Coexists cleanly with the existing 2-rail Ideas block above (which renders
'New this week' + 'Curated picks' from /api/products and survives in any
filter state).
4e2dc09 · 2026-05-25 · hydrate sort from localStorage pre-grid-load + noreferrer on Facebook target=_blank
- move sort restore into the pre-load view-hydration IIFE so the initial /api/products fetch fires with the user's saved sort instead of 'newest' (was racing with the post-DOM sort-select wire-up at line 1049) - add noreferrer to the Facebook footer link (tab-nabbing + referer-leak defense; pairs with existing rel=noopener)
9191fe7 · 2026-05-25 · wire api-vendor-redact middleware + scrub p.vendor from rail-card render
- mount _shared/api-vendor-redact before /api/* routes so /api/facets stops emitting vendors map and /api/products stops accepting ?vendor= filter - replace p.vendor literal in hydrateIdeas rail-card with 'Designer Wallcoverings' to match the rest of the storefront (defense-in-depth alongside the middleware)
2c844cb · 2026-05-25 · retag aesthetic from PG: 59 rows updated
before: all=72 after: all=13, fine=2, natural=57 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>
File tree
- .gitignore
- _universal-auth.js
- _universal-contact.js
- data/products.json
- ecosystem.config.cjs
- package-lock.json
- package.json
- public/ads.txt
- public/care.html
- public/corner-nav.js
- public/drill.js
- public/dw-header.js
- public/dw-theme-nav.js
- public/favicon.svg
- public/hero-bg.jpg
- public/hero-pool.json
- public/history.html
- public/index.html
- public/privacy.html
- public/sku-redact.js
- public/sourcing.html
- public/trade.html
- public/ux-primitives.bundle.css
- public/ux-primitives.bundle.js
- public/vocabulary.html
- server.js
- site.config.json