Linenwallpaper
Search the build
-
16d72c32026-09-23 front-page-steward: ux-primitives bundle (grid) TK-12031 -
73ca0a22026-09-23 TK-12031: bump ux-primitives bundle to canonical v1.1.1#7d74cd3b4123 (finish() clearSkel guard) — pilot parity with the 41-site fleet -
6d57cb02026-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 -
f16cc5c2026-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 -
5a964462026-09-22 front-page-steward: rework ux-primitives to silent bundle (remove demo-strip+fabricated SKU; no unsafe skeleton) TK-12031 -
790ea3f2026-09-22 front-page-steward: wire ux-primitives Bundle-B (toast+copy demo, idempotent) TK-12031 -
42e393d2026-09-16 TK-11787: restore linenwallpaper site identity (undo retrowalls template flattening from 2026-09-10) -
6ef38dc2026-09-15 hero: flash-free R4 (flip after cells paint + clear grid) — yoloforever cycle 2 -
941bcff2026-09-15 hero: remove hero-4grid.js collision, R4 alternating block is sole owner (yoloforever cycle 1) -
ac1a5922026-09-14 linenwallpaper: declare helmet + dotenv (undeclared deps crashed prod on npm ci) -
d268e5a2026-09-14 linenwallpaper: fix IG embed showing the wrong account (@retrowalls -> @linenwallpaper) -
ec8a2432026-09-10 Add clean /privacy route (AdSense URL consistency) -
488272f2026-09-10 Standardize privacy policy to /privacy.html + footer link (AdSense) -
7d6a8962026-09-10 Add AdSense-compliant privacy policy page + footer link + /privacy route -
cb4c6d72026-09-09 Add Instagram embed of latest live posts to homepage (TK-11322) -
48552842026-09-09 TK-11341: add AdSense Auto-Ads loader + ads.txt (revert to remove ads) -
53963f72026-08-24 auto-data-snapshot: 2026-08-24T04:13:07 (1 data files) — server.js.ldrbak.1787569812 -
b9efced2026-08-24 Add p.visible!==false guard to product load filter (cluster5 resid) -
36b9a492026-08-22 auto-data-snapshot: 2026-08-22T11:19:22 (1 data files) — data/products.json -
ea0eb7a2026-08-12 auto-data-snapshot: 2026-08-12T10:57:24 (1 data files) — package-lock.json -
589d0fb2026-08-12 chore: version bump v0.1.1 (session close — niche-filter fix) -
b99182c2026-08-12 add gated IG post script: genuine-linen Sag Harbor post for @linenwallpaper -
c3c76d82026-08-12 linenwallpaper: tighten linen filter — require linen/flax in title, drop vinyl/grasscloth/novelty (Steve: 'it is not linen') -
c565a512026-08-12 viewer standard: add per-field on/off menu (Fields ▾) to product grid -
fb89df32026-08-08 corner-nav: install fleet-ready two-hamburger accordion nav (manifest-driven, brand palette, clean-URL aware) (TK-10318) -
2aa6b1b2026-08-04 Revert AdSense: DW sister sites stay ad-free (Steve policy 2026-08-04) -
121ad352026-08-04 AdSense pilot: loader in head + ads.txt (ca-pub-5278231299883833) — not yet deployed -
0e275022026-08-04 fix: take infinite-scroll .loading indicator out of flow (kills ~0.3-0.4 CLS scroll-jump) -
21fbdd82026-08-04 Wire DW Meta Pixel 1431180262113856 + DW-network ad slot [ads/tracking rollout] -
186388a2026-08-03 GA4: propagate site gtag to untagged pages (fleet coverage) -
474d1822026-08-01 Reapply "linenwallpaper: adopt href-to-deeper-data storefront primitives (TK-10093)" -
9609e462026-08-01 Revert "linenwallpaper: adopt href-to-deeper-data storefront primitives (TK-10093)" -
a70c3c62026-08-01 linenwallpaper: adopt href-to-deeper-data storefront primitives (TK-10093) -
9b4140f2026-07-30 search: scroll results into view on mobile (grid was below the fold → looked like nothing happened) -
2d0d5742026-07-29 corner-nav: block javascript:/data: URIs in search preview (URL-scheme allowlist) -
80c2e222026-07-29 search: /api matcher now covers title+tags+description+type+vendor+sku -
c6077a62026-07-29 corner-nav: live as-you-type search with thumbnail previews (title+tags+description) -
bf73c4e2026-07-06 Square product-card images (aspect-ratio 1/1) -
06536ba2026-07-03 corner-nav: move login to its own hamburger in upper-left (panel slides from left) -
7eb0e7f2026-06-23 Update grid density slider to desktop-only (3-12 columns) -
b2229932026-06-22 auto-save: 2026-06-22T21:48:03 (1 files) — public/index.html -
20149d62026-06-22 fix: improve sort dropdown positioning with overflow handling -
2e988432026-06-22 fix: prevent sort dropdown cutoff on left edge -
769b4832026-06-22 feat: add pill-style sort control styling to match grid slider -
9e649c52026-06-22 fix: improve grid density slider CSS to prevent overlap with sort controls -
b4da2f92026-06-22 enhance: smart product name hiding on 6-column grids -
2914d002026-06-22 upgrade: mobile-optimized grid density slider with touch buttons -
b9d5fe02026-06-22 feat: add grid density slider (DW standard) — adjustable columns 2–6, persistent localStorage -
1f0e5ee2026-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. -
f7a60cb2026-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) -
c5c2b322026-06-11 linenwallpaper: rails fire again — wire sliders + grid filter to aesthetic-OR-tags matcher (prod-safe try-require + inline fallback) -
8fad5a52026-06-09 step2 vendor-leak fix: dual-key /sample resolver + handle_display hrefs -
bf0eeda2026-06-09 snapshot before step2 codemod -
beae4ee2026-06-03 Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle -
1e9e65b2026-06-03 a11y: add aria-label to contact/sample form inputs (zero visual; screen-reader association) -
bae076f2026-06-01 admin: add dw-theme-nav 20-theme navigator (upper-right, admin-only) -
a2a54142026-06-01 fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch -
e89c1242026-06-01 dw-header: hide ANY pre-existing <header> (not just ns-header); title-case bare-slug names -
55c35a82026-06-01 FIX: dw-header was injected inside a doc-comment (never ran); re-inject before the real </body> -
89a87292026-06-01 hero: rotate curated room-setting pool (hero-pool.json), guard >=1400px, no swatch blur -
decc7432026-06-01 header name → domain name 'linenwallpaper' (remove odd brand name) -
1c3f8472026-06-01 hero: huge 2520px clean hero from dw_unified (graphic-designer vetted; no header/text/watermark) -
59e31912026-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 -
eea55af2026-06-01 disable hero-4grid overlay so the unique high-res room/pattern hero shows full-bleed -
6c5b25e2026-06-01 fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch -
c82faec2026-06-01 homepage: collapse duplicated 'Ideas' rail-eyebrows into one section eyebrow -
4aa7da02026-06-01 Unique hero image (backsync from prod, fleet hero dedup 2026-06-01) -
170ef242026-06-01 Re-add Big Red embed (revert conflicted; re-injected) -
3a95f832026-06-01 fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local pilot branch -
832ff372026-06-01 hero: activate self-contained 2x2 hero-4grid (fleet sweep, local) -
afad9482026-06-01 Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep) -
b3f17552026-06-01 301 redirect legacy /(history|vocabulary|sourcing|care|trade|index).html -> clean URLs before express.static -
a31c9342026-06-01 /api/facets drill-down: count each dimension over the active filtered set (q/aesthetic/vendor) via shared filterProducts(); /api/products reuses helper -
8c441a92026-06-01 noopener,noreferrer on sister-site window.open popup -
63a40652026-05-30 fix: remove served .bak file, patch 404 guard regex, add *.bak-* to .gitignore -
4bf50322026-05-29 feat(fleet): theme1/theme2 query-param-gated toggle on catalog page -
55612632026-05-28 scrub vendor name leaks from products.json source (54 products: title/vendor/tags cleaned per sku-redact denylist) -
6e644342026-05-26 frontend: cleanSku() strips vendor names from displayed sku (.ven/list/detail) + defer renderRailSections call (fix ReferenceError) — click-through verified -
b01c3cb2026-05-26 sku-redact: wire shared vendor-id display scrubber -
a0b03442026-05-26 linenwallpaper: editorial rail/facet labels — linen-flavored display map (Linen Weaves, Modern Linen, Classic Linen, Natural Flax) over real aesthetic buckets; behavior unchanged -
228f6372026-05-26 linenwallpaper: commit config-rails fix — aspirational weave/fine/bouclé (0 hydrate) → real aesthetic buckets textured/contemporary/beige/traditional (4 rails fire) -
48365f92026-05-26 homepage: add retrowalls-canonical rail-sections (id=rails + renderRailSections) -
822b5f32026-05-25 remove p.vendor render from Ideas rail card — replace with Designer Wallcoverings (customer-facing redaction) -
ded12ab2026-05-25 add clean-URL routes for nav links — /history /vocabulary /sourcing /care /trade -
e13d7612026-05-25 add 404-guard for .bak/.pre-* files — defense-in-depth against accidental serve -
bda38a42026-05-25 fix /api/facets total — reflect filtered (niche) list count, not raw PRODUCTS -
5ac690b2026-05-25 wire api-vendor-redact middleware FIRST in app.use chain — strips vendor field + vendors facet + ?vendor= from all /api/* responses -
fb65b1e2026-05-25 retag aesthetic from PG: 230 rows updated -
11b7cad2026-05-20 add: pre-stage Meta Pixel snippet (placeholder; flip via _dw-batch set-fb-pixel.sh) -
7caf54e2026-05-20 fix: /about → history.html alias (was 404) -
ae2afdd2026-05-19 make server.js self-contained — gate _shared/admin-catalog behind MICROSITE_ADMIN_ENABLED env flag (kamatera deploy unblock) -
dd434eb2026-05-19 wire state.sort into loadGridPage /api/products URL (fleet sort fanout) -
782a1de2026-05-19 Phase 2b: harden .card .pat against long-token title clipping (overflow-wrap) -
c8fd59e2026-05-19 Phase 2: mobile-ready + tap-to-reveal -
ef567402026-05-19 stage2: wire microsite catalog + admin CRUD + grid/list view -
6b04d012026-05-18 Untrack 19 stale backup files from git and broaden .gitignore to catch .bak.* and .pre-* (they were served publicly from public/) -
290b0772026-05-18 Remove dead pass-12 leftovers from server.js (unused PRODUCTS_ORIG, pointless global, stale comment) -
5ac29df2026-05-14 hero-4grid: relocate json from data/ to public/ for Express static -
b27fd572026-05-14 4-grid hero: drop-in script + crop CSS + initial 4 newest products -
1d0045a2026-05-14 favicon: Mag-7-inspired SVG glyph -
ae19bc22026-05-13 fix env wiring — add __dirname-anchored dotenv + dotenv dep so ADMIN_PASS / GEORGE_AUTH actually load -
53935932026-05-13 corner-nav: title-case the brand name even when .ns-name source is lowercase -
17ec3672026-05-13 corner-nav: title-case brand display (e.g. corkwallcovering → Cork Wallcovering) -
2b565d02026-05-13 corner-nav: fix injection — script tag was landing inside HTML comment, now anchored to real </body> -
9a288402026-05-13 fix: contact modal CSS+HTML (was rendering inline as raw emoji/links) -
1bac6c52026-05-13 embed Big Red customer chat (lower-left, retail mode, vendor-redacted) -
4e217dc2026-05-13 chip-click → product details modal; vendor redacted in card overlay -
a1af5802026-05-13 add universal corner-nav.js (UR 4-icon: bag/account/search/menu) -
c47d6412026-05-13 remove stray contact modal markup that was rendering inline on the page -
1ccc8182026-05-13 snapshot: 1 file(s) changed, +1 new -
6bac45f2026-05-11 fleet-grid refine: chip_uniform_aspect (linenwallpaper) -
5d525ef2026-05-11 snapshot before fleet-grid refine -
a483e2a2026-05-10 sort-skill UI: add Light→Dark / Dark→Light / Color Wheel options -
f16a1d42026-05-10 sort-skill canonical: add light-dark/dark-light/wheel + helpers -
b8279702026-05-10 apply R1+R2+R4 hero standing rules — strip Loma Studio, lowercase serif wordmark below photo, add data-hero-mode huge default + four-square hydration -
6b7d7bb2026-05-07 graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags -
9a42e592026-05-07 graphic-loop pass 12: niche keyword filter (no off-niche products like 'solid' on patterned sites) -
d4ec01a2026-05-07 graphic-loop pass 11: add Ideas rails (New this week + Curated picks) above main grid -
9ed2b532026-05-07 graphic-loop pass 10: center-mark to top + readable text-shadow + tighter letter-spacing (no mix-blend-mode) -
c331bdd2026-05-07 graphic-loop pass 9: real site name + 20-image hero rotation + 2400px hero res -
6d596d22026-05-07 graphic-loop pass 8 fix: divergent template — swap heading font to Libre Baskerville -
1ecfc662026-05-07 graphic-loop pass 8: theme-aware font Libre Baskerville (panel-approved comprehensive 16-bucket assignment) -
93f743a2026-05-06 graphic-loop pass 2: fix .corner-mark contrast + soften hero overlay (qwen3:14b consensus across fleet) -
0e19d742026-05-06 Rebrand: LINEN WALLPAPER → Loma Studio (Loewe template) -
e257a682026-05-06 initial scaffold (gitify-all 2026-05-06)
Authors
- Steve114
- front-page-steward4
- steve4
- auto-commit-fleet3
Agents used
Skills used
- /claude8
- /code8
- /products5
- /privacy3
- /vendor3
- /index2
- /sample2
- /tags2
- /body2
- /facets2
- /list2
- /sort1
- /density1
- /flax1
- /grasscloth1
- /novelty1
- /off1
- /tracking1
- /data1
- /handle1
- /text1
- /watermark1
- /ideas1
- /json1
- /pattern1
- /aesthetic1
- /theme21
- /detail1
- /facet1
- /fine1
Creative ideas + design notes
73ca0a2 · 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
f16cc5c · 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
5a96446 · 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
790ea3f · 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
6ef38dc · 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
941bcff · 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
ac1a592 · 2026-09-14 · linenwallpaper: declare helmet + dotenv (undeclared deps crashed prod on npm ci)
server.js hard-requires helmet (line 7) and uses dotenv (line 5), but package.json declared only express. The site survived on a stale node_modules; the moment a deploy ran `npm ci --production` it pruned to express-only and the app crash-looped (MODULE_NOT_FOUND 'helmet', 502). Add both to dependencies so npm ci installs them. Local boot verified. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X7mfnaSD5EB3DGZcaamU8A
d268e5a · 2026-09-14 · linenwallpaper: fix IG embed showing the wrong account (@retrowalls -> @linenwallpaper)
The homepage IG-EMBED block carried @retrowalls' handle and 3 retrowalls permalinks. Regenerated from ig-embed-data.json via inject-ig-embed.mjs --apply, correcting it to @linenwallpaper's own handle + 3 real posts. Local only; not yet deployed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X7mfnaSD5EB3DGZcaamU8A
7eb0e7f · 2026-06-23 · Update grid density slider to desktop-only (3-12 columns)
- Hidden entirely on mobile (< 769px) - Desktop only: full 3-12 column slider - Smart name hiding: product titles hide at 6+ columns - localStorage persistence of user preference Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2e98843 · 2026-06-22 · fix: prevent sort dropdown cutoff on left edge
- Add position: relative and z-index: 100 - Add min-width: 120px for adequate button sizing - Add overflow: visible to prevent parent clipping - Fixes dropdown menu visibility when sort control is near left side of page
63a4065 · 2026-05-30 · fix: remove served .bak file, patch 404 guard regex, add *.bak-* to .gitignore
public/index.html.bak-20260526152130 was being served by express.static (HTTP 200) because the 404-guard regex only blocked .bak followed by . or EOL, not .bak-TIMESTAMP suffixes. Removed the file, fixed the guard to match .bak- patterns, and added *.bak-* to .gitignore so timestamped backups can never slip in again. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4bf5032 · 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.
48365f9 · 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).
fb65b1e · 2026-05-25 · retag aesthetic from PG: 230 rows updated
before: all=236 after: all=6, beige=13, contemporary=9, textured=198, traditional=10 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>
0e19d74 · 2026-05-06 · Rebrand: LINEN WALLPAPER → Loma Studio (Loewe template)
First proof-of-concept of the per-site brand-identity rollout from the dw-fashion-templates skill. Linen had 94% product overlap with cork — worst duplicate-content offender. New brand identity makes it visually + textually distinct from any sister site. Changes: - Title/meta/JSON-LD: 'LINEN WALLPAPER' → 'Loma Studio' - Tagline: 'Quiet texture' → 'Soft as linen. Made slowly.' - Palette: dark gold theme → soft cream/sienna (Loewe tokens) - Headline font: Playfair Display → Cormorant Garamond - Removed: cross-network 'DW Universe' link, mini-constellation viewer, 'designer wallcoverings family vertical' footer text, parentOrganization schema. Steve's directive: no DW visible except About Us. - Footer text rewritten as standalone Loma Studio voice - Verified live: 7 'Loma Studio' mentions, 0 legacy DW touchpoints
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-accordion.js
- public/corner-nav.js
- public/corner-nav.manifest.json
- 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
- scripts/post-linen-ig.js
- server.js
- server.js.ldrbak.1787569812
- site.config.json