9ddbf642026-06-03Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle
8aa85812026-06-03philipperomano SEO: add canonical + Open Graph + Twitter card + listing h1 (DTD verdict B)
6f1ad722026-05-31gitignore: add full backup-file pattern set (*.bak-*, *.pre-*, *.orig, *.save, *~, *.old, copy-of-*)
5895c842026-05-30fix: /p/:handle uses ENRICHED (junk-filtered) not raw DATA; /health reports post-filter count; add noreferrer to all target=_blank links
84c48402026-05-29feat(theme): add ?theme=N toggle to layout() — mirrors dw-domain-fleet productPage() canonical (commit 34fbe0e). Single block injected after <body> opening. Hidden until ?theme=1|2 or localStorage opt-in. Shares 'wallco-page-theme' key for cross-site continuity.
cf044692026-05-28scrub vendor name leaks from products.json source (176 products: title/vendor/tags cleaned per sku-redact denylist)
fe6a21f2026-05-25naturals: add /naturals route + nav link + inclusive classifier
8fdcf2f2026-05-21header.top flex + .contact CSS from kamatera (hunk 4)
Commits with substantial prose (≥120 chars) — the rationale behind each move.
8dbe850 · 2026-09-08 · TK-11304: PDP shows bold 'Type II Commercial Wallcovering' label + per-yard unit (render unit_of_measure, no single-roll hardcode)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDeaFL4eeREBZX79tc4cnr
983ba4d · 2026-06-23 · Replace pagination with infinite scrolling (IntersectionObserver)
- Remove pagination nav controls (prev/next/page numbers)
- Add scroll sentinel at grid bottom
- Load next page on scroll via fetch when user approaches sentinel
- Preserve sort + density slider functionality
- localStorage tracks current page for continuous browsing
Complies with standing requirement: all product grids must use infinite scrolling.
8aa8581 · 2026-06-03 · philipperomano SEO: add canonical + Open Graph + Twitter card + listing h1 (DTD verdict B)
Storefront had ZERO canonical/og/twitter and no h1 on the listing page.
Extended layout() with canonical/ogImage/ogTitle/ogDesc params injecting:
canonical, og:type/site_name/title/description/url/image, twitter:card.
Listing route: canonical = path + cat/type only (DTD-B, drops volatile
sort/page/q to consolidate faceted duplicates), og:image = first product;
added an sr-only h1. Detail route: per-product canonical /p/<handle> +
og:image (detail already had a visible h1). Added .sr-only utility CSS.
Verified on a free port: homepage + faceted + detail all correct, grid/sort/
density intact, JS unaffected. Local — needs deploy.
fe6a21f · 2026-05-25 · naturals: add /naturals route + nav link + inclusive classifier
Catches all 1,894 natural-fiber wallcoverings — both real fiber (grasscloth /
cork / linen / silk / jute / sisal / abaca / raffia / seagrass / bamboo) AND
Type II commercial vinyls with natural-look textures (linen-look / cork-look /
grasscloth-look / etc.).
Per Steve's directive 2026-05-24 — "most Type II vinyl textures work". The
classifier is intentionally inclusive: any product whose product_type contains
'natural' OR whose title/handle matches the NATURALS_RE regex (which includes
all the fiber names PLUS texture-suggestion words like 'fiber', 'woven',
'paperweave', 'cane', 'rattan', 'reed', 'sandstone') lands in /naturals.
Changes:
- ENRICHED rows now carry _isNatural boolean (computed on boot, ~1ms total)
- NEW NATURALS_COUNT constant, printed in boot log
- NEW /naturals route — 302-redirects to /?cat=naturals
- Index route now reads ?cat= alongside ?type=, filters ENRICHED (not raw DATA)
- Nav: 'Naturals (1,894)' link with count, between 'All' and the product-type list
- layout() takes a cat= param so the active highlight is correct
Boot results — junk-filter keeps 5,913 of 8,227 (drops 2,314), naturals
enriched count = 1,894 (32% of post-filter catalog).
File tree
12 files tracked. Click any to browse the source at HEAD.