Creative ideas + design notes
Commits with substantial prose (≥120 chars) — the rationale behind each move.
e7dffed · 2026-05-30 · fix: add /api/health alias so fleet-standard health probe returns 200
The route was registered as /health only; /api/health returned 404.
Added /api/health as a second handler pointing at the same response
to align with the DW fleet convention used by all sister sites.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0aa321f · 2026-05-26 · homepage rails: 6 aesthetic rail sections + pills strip
Adds /api/sliders endpoint, aesthetic filter on /api/products, aesthetic
counts on /api/facets. homePage() now renders 4 rail sections (green/
botanical/commercial/blue, 8 cards each, View all →) above the shop +
horizontal pill strip wired to setAesthetic(). Click any pill or 'View all'
re-renders the grid filtered by that aesthetic and scrolls to #shop.
Pattern from hollywood-wallcoverings 3a7da85 + blockprintedwallpaper.
Bucket distribution: green 1638 / botanical 1537 / commercial 422 / blue
24 / white 20 / architectural 14 (all 6 rails fire, all >= 4 items).
f60aec2 · 2026-05-25 · remove vendor names from customer UI — replace with 'Designer Wallcoverings'
DW rule: vendor names are admin-only metadata and must never appear on
customer-facing surfaces (homepage cards, product pages, meta descriptions,
JSON-LD brand). Removes the studio filter dropdown from the homepage toolbar
and pins the card vendor line + product page brand line + Product schema brand
to 'Designer Wallcoverings'. Server-side ?vendor= query and /api/vendors
endpoint remain for admin / faceting; /api/facets exposes vendor counts as
admin metadata only.
7905e4b · 2026-05-25 · add /api/facets returning FILTERED counts (vendors + product_types); honors q + vendor query params
Replaces the all-counts behavior with FILTERED counts so chip-style facet UIs
reflect what selecting each option will actually return. Legacy /api/vendors
kept for back-compat. Vendor names remain admin-only metadata — must not be
rendered on customer-facing UI.
27a4699 · 2026-05-25 · retag aesthetic from PG: 3663 rows updated
before: <null>=3663
after: all=8, architectural=14, blue=24, botanical=1537, commercial=422, green=1638, white=20
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>
58bcf6a · 2026-05-19 · guard against serving .bak/.pre- snapshot files; widen .gitignore to match
Adds a tiny middleware ahead of express.static that returns the 404 page for
any URL path containing *.bak, *.bak.*, or .pre-* segments — so a backup file
accidentally dropped into public/ can never leak to the open web. Widens
.gitignore to keep those snapshot files out of the repo in the first place.
No bak/pre files are currently tracked; this is preventative.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
58420cb · 2026-05-19 · add noreferrer to every target=_blank external link
Four off-site links (DW footer, card sample CTA, product-page sample CTA,
product-page DW deep-link) had rel="noopener" but not noreferrer. Tabnabbing
protection without referrer leak prevention is half a fix; upgrade all four
to rel="noopener noreferrer" so the destination can't see the source URL on
the way in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
48db475 · 2026-05-19 · sort + density persist to localStorage; hydrate before first grid load
Standing rule: every product grid must persist sort + density selections to
localStorage and rehydrate the saved value before the first grid load. The
storefront had the controls but neither persisted; refresh always reset to
A-Z + density 4. Wires LS_SORT='cdm-sort' + LS_DENSITY='cdm-density' (matches
the existing cdm-theme key style), validates saved values against the rendered
options before applying, and updates the slider DOM value pre-mount so the
first paint matches the user's last choice.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>