{"slug":"carmelwallpapers","total":33,"limit":100,"offset":0,"since":null,"commits":[{"hash":"d62e7c2","date":"2026-07-03 09:57:41 -0700","author":"Steve Abrams","subject":"corner-nav: move login to its own hamburger in upper-left (panel slides from left)","body":""},{"hash":"3eac6d7","date":"2026-06-21 18:53:08 -0700","author":"Steve Abrams","subject":"auto-save: 2026-06-21T18:53:00 (1 files) — public/hero-pool.json","body":""},{"hash":"0501866","date":"2026-06-21 17:04:14 -0700","author":"Steve","subject":"deploy: scaffold .deploy.conf for banner deploy","body":""},{"hash":"2be9c4b","date":"2026-06-21 16:48:55 -0700","author":"Steve","subject":"banner: wire universal promo-banner require above express.static (officer-approved; deploy gated)","body":""},{"hash":"69a8d92","date":"2026-06-11 09:32:12 -0700","author":"Steve Abrams","subject":"carmelwallpapers: rails fire again — wire sliders + grid filter to aesthetic-OR-tags matcher (hand edit; site uses hardcoded RAIL_ORDER scaffold)","body":""},{"hash":"9753035","date":"2026-06-04 08:06:22 -0700","author":"Steve","subject":"seo: add per-page canonical + Open Graph + Twitter card (HTML_HEAD threads canonical+ogImage; index collapses facets to type per DTD-B, detail uses redacted product slug)","body":""},{"hash":"06b4f59","date":"2026-06-03 20:44:27 -0700","author":"Steve","subject":"Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle","body":""},{"hash":"fd64d51","date":"2026-06-03 14:34:22 -0700","author":"Steve Abrams","subject":"Wire vendor-neutral image-proxy into carmel storefront (no vendor filenames in customer output)","body":""},{"hash":"e802dce","date":"2026-06-01 14:11:47 -0700","author":"Steve Abrams","subject":"Unique clean image hero (fleet hero dedup 2026-06-01)","body":""},{"hash":"afaefa4","date":"2026-05-31 21:01:47 -0700","author":"Steve Abrams","subject":"render: route buy CTA + View Full Product + card sample link through /buy/:slug (kill vendor-handle DOM leak; mirrors fleet a85eb02)","body":""},{"hash":"b8d3c3a","date":"2026-05-31 16:32:26 -0700","author":"Steve Abrams","subject":"Add per-site favicon (kills /favicon.ico 404)","body":""},{"hash":"13144ed","date":"2026-05-30 21:39:58 -0700","author":"Steve","subject":"scrub residual 3rd-party vendor names from products.json source (per sku-redact denylist; sku/handle + DW house brands preserved)","body":""},{"hash":"f922bba","date":"2026-05-30 09:51:31 -0700","author":"Steve Abrams","subject":"fix: strip bare '-arte' (Arte International abbrev) from product slugs + sort denylist longest-first so 'arte international' strips before 'arte' (no 'international' residue). Closes residual leak from 2026-05-30 verify sweep.","body":""},{"hash":"24afde4","date":"2026-05-29 22:19:58 -0700","author":"Steve Abrams","subject":"fix: strip vendor tokens from product slug (redactVendorSlug) + dual-key route resolve — closes standalone slug vendor leak","body":""},{"hash":"607c2d8","date":"2026-05-28 07:25:46 -0700","author":"Steve","subject":"scrub vendor name leaks from products.json source (568 products: title/vendor/tags cleaned per sku-redact denylist)","body":""},{"hash":"f338d34","date":"2026-05-26 07:41:11 -0700","author":"Steve","subject":"wire api-vendor-redact middleware (close vendor leak in /api/products)","body":""},{"hash":"ff4542f","date":"2026-05-25 20:53:23 -0700","author":"Steve","subject":"fix: drop dead 'Raffia' nav links — 0 products tagged raffia, was a 404-equivalent","body":"Header and footer linked /?type=raffia but the catalog has zero raffia products\n(rails listed it; data never matched). Header swaps in /?type=natural (136 items);\nfooter simply drops raffia. Facet chips were already filtering on count so they\nwere correct.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"fafb001","date":"2026-05-25 20:52:56 -0700","author":"Steve","subject":"fix: scrub p.vendor leaks from customer-facing UI (use \"Designer Wallcoverings\")","body":"Replaces dynamic vendor renders on product detail card, grid card, rail card,\nmeta description, and schema.org brand with the literal \"Designer Wallcoverings\".\nDrops the now-meaningless \"Vendor A→Z\" sort option from the dropdown and clears\nthe value from any existing localStorage to avoid stale state. Standing rule\nper global CLAUDE.md: DW vendor names NEVER in customer-facing UI.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"0b699bc","date":"2026-05-25 20:46:12 -0700","author":"Steve Abrams","subject":"pull-from-shopify: use shared classifier with rails primary, local aestheticOf as fallback","body":""},{"hash":"c78d2c2","date":"2026-05-25 20:37:35 -0700","author":"Steve Abrams","subject":"retag aesthetic from PG: 833 rows updated","body":"before: botanical=333, coastal=195, grasscloth=813, linen=393, natural=309, raffia=139\nafter:  all=656, botanical=339, coastal=76, grasscloth=792, linen=183, natural=136\n\nBackfills correct multi-bucket aesthetic tagging from dw_unified.microsite_products\n(DTD verdict B, 2026-05-25 fleet retag run).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"5e16aae","date":"2026-05-21 20:06:11 -0700","author":"Steve Abrams","subject":"make server.js self-contained — gate _shared/admin-catalog behind MICROSITE_ADMIN_ENABLED env flag (kamatera deploy unblock)","body":""},{"hash":"88aa54b","date":"2026-05-19 22:10:24 -0700","author":"Steve Abrams","subject":"add ns-contact modal (CSS + HTML + JS) — info@carmelwallpapers.com","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"799a8ba","date":"2026-05-19 22:10:24 -0700","author":"Steve Abrams","subject":"add corner-nav.js — universal top-right nav per _shared/corner-nav.js","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"76119fc","date":"2026-05-19 11:21:46 -0700","author":"Steve Abrams","subject":"Phase 2: mobile-ready + tap-to-reveal","body":""},{"hash":"ccc83e1","date":"2026-05-19 11:07:18 -0700","author":"Steve Abrams","subject":"stage2: wire carmelwallpapers onto shared catalog (hand-tailored)","body":""},{"hash":"5958e2e","date":"2026-05-19 08:01:20 -0700","author":"Steve Abrams","subject":"fix: wire vendor sort handler, add SKU option, drop dead Price options","body":"Product data has no price field so Price sort was a no-op; SKU sort\nfalls back to handle. Vendor option existed in the select but had no\nserver-side sort handler.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"20aecc2","date":"2026-05-19 08:00:41 -0700","author":"Steve Abrams","subject":"fix: add noreferrer to external target=_blank links","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"78e1c9d","date":"2026-05-19 08:00:26 -0700","author":"Steve Abrams","subject":"fix: 404-guard so .bak/.pre- snapshot paths never serve from static root","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"d43943c","date":"2026-05-19 08:00:12 -0700","author":"Steve Abrams","subject":"chore: untrack server.js.pre-sort-skill snapshot, broaden .gitignore","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"1797e17","date":"2026-05-13 08:57:46 -0700","author":"Steve","subject":"snapshot: 2 file(s) changed, +2 new","body":""},{"hash":"ade7d84","date":"2026-05-11 04:38:21 -0700","author":"steve","subject":"fleet-grid refine: all-pass (chip-ratio canonical reference site) (carmelwallpapers)","body":""},{"hash":"2c1963a","date":"2026-05-10 10:19:56 -0700","author":"Steve","subject":"sort-skill canonical: add light-dark/dark-light/wheel + helpers","body":""},{"hash":"4684956","date":"2026-05-07 15:01:28 -0700","author":"Steve Abrams","subject":"initial scaffold: carmelwallpapers.com DW microsite, 2182 coastal products","body":""}]}