{"slug":"saloonwallpaper","total":65,"limit":100,"offset":0,"since":null,"commits":[{"hash":"a3801d7","date":"2026-07-06 17:57:08 -0700","author":"Steve Abrams","subject":"Square product-card images (aspect-ratio 1/1)","body":""},{"hash":"7b7a17a","date":"2026-07-03 09:57:40 -0700","author":"Steve Abrams","subject":"corner-nav: move login to its own hamburger in upper-left (panel slides from left)","body":""},{"hash":"45c27e4","date":"2026-06-19 16:33:21 -0700","author":"Steve","subject":"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.","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"6b60307","date":"2026-06-18 09:04:29 -0700","author":"Steve Abrams","subject":"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)","body":""},{"hash":"d379027","date":"2026-06-11 09:25:11 -0700","author":"Steve Abrams","subject":"saloonwallpaper: rails fire again — wire sliders + grid filter to aesthetic-OR-tags matcher (prod-safe try-require + inline fallback)","body":""},{"hash":"6ada536","date":"2026-06-09 13:47:38 -0700","author":"Steve","subject":"step2 vendor-leak fix: dual-key /sample resolver + handle_display hrefs","body":""},{"hash":"4790e8f","date":"2026-06-09 13:47:38 -0700","author":"Steve","subject":"snapshot before step2 codemod","body":""},{"hash":"e38e353","date":"2026-06-03 21:36:17 -0700","author":"Steve Abrams","subject":"seo: add og:image + twitter card (social-share preview) — zero visual","body":""},{"hash":"525ac9d","date":"2026-06-03 20:45:47 -0700","author":"Steve","subject":"Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle","body":""},{"hash":"ba9e60e","date":"2026-06-03 20:27:46 -0700","author":"Steve Abrams","subject":"seo/a11y: add visually-hidden <h1> (site name) for heading semantics — zero visual change","body":""},{"hash":"ab4f2f3","date":"2026-06-03 14:19:43 -0700","author":"Steve Abrams","subject":"a11y: add aria-label to contact/sample form inputs (zero visual; screen-reader association)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"07345b4","date":"2026-06-01 16:38:43 -0700","author":"Steve Abrams","subject":"admin: add dw-theme-nav 20-theme navigator (upper-right, admin-only)","body":""},{"hash":"eda0111","date":"2026-06-01 15:58:09 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch","body":""},{"hash":"0e4a255","date":"2026-06-01 15:47:48 -0700","author":"Steve Abrams","subject":"dw-header: hide ANY pre-existing <header> (not just ns-header); title-case bare-slug names","body":""},{"hash":"39be4d8","date":"2026-06-01 15:44:22 -0700","author":"Steve Abrams","subject":"FIX: dw-header was injected inside a doc-comment (never ran); re-inject before the real </body>","body":""},{"hash":"b737bcd","date":"2026-06-01 15:11:38 -0700","author":"Steve Abrams","subject":"header name → domain name 'Saloon Wallpaper' (remove odd brand name)","body":""},{"hash":"94058b9","date":"2026-06-01 14:16:32 -0700","author":"Steve Abrams","subject":"hero/ideas: single big full-bleed hero (remove 2x2 four-square grid + hero-4grid.js/json + inert CSS), collapse Ideas to one rail","body":""},{"hash":"21b12b9","date":"2026-06-01 14:05:49 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch","body":""},{"hash":"c802927","date":"2026-06-01 14:04:24 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch","body":""},{"hash":"f22a01d","date":"2026-06-01 13:56:43 -0700","author":"Steve Abrams","subject":"Unique hero image (backsync from prod, fleet hero dedup 2026-06-01)","body":""},{"hash":"37b7e2b","date":"2026-06-01 13:48:44 -0700","author":"Steve Abrams","subject":"Re-add Big Red embed (revert conflicted; re-injected)","body":""},{"hash":"c49b834","date":"2026-06-01 13:42:13 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local pilot branch","body":""},{"hash":"2335b90","date":"2026-06-01 13:33:10 -0700","author":"Steve Abrams","subject":"Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep)","body":""},{"hash":"0f72e6d","date":"2026-06-01 07:48:30 -0700","author":"Steve","subject":"clean-URL: 301 redirect legacy /(care|history|sourcing|trade).html + /index.html -> clean URLs (mounted before express.static; was serving both forms = duplicate content)","body":""},{"hash":"19b87d4","date":"2026-06-01 07:48:13 -0700","author":"Steve","subject":"facets: drill-down counts via shared filterProducts() — each dimension counted over the OTHER active facets so selecting one aesthetic no longer zeros the rest; total=fully-filtered. /api/products reuses same filter","body":""},{"hash":"c87ade6","date":"2026-05-30 21:26:37 -0700","author":"Steve Abrams","subject":"fix: remove public bak leak, patch 404-guard regex for .bak-* pattern, add *.bak-* to .gitignore","body":"- Deleted public/index.html.bak-20260526152130 (was served as HTTP 200)\n- 404-guard regex /\\.(bak)(\\.|$)/ did not match .bak-TIMESTAMP filenames; added [-] to alternation\n- .gitignore missing *.bak-* glob — added alongside existing *.bak and *.bak.* entries\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"732647c","date":"2026-05-29 13:20:44 -0700","author":"Steve Abrams","subject":"feat(fleet): theme1/theme2 query-param-gated toggle on catalog page","body":"Default: theme1, toggle hidden. Opt-in via ?theme=2 or localStorage\n('wallco-page-theme' key shared across the fleet). Same gate pattern\nas dw-domain-fleet productPage."},{"hash":"9e70f59","date":"2026-05-28 07:26:21 -0700","author":"Steve","subject":"scrub vendor name leaks from products.json source (225 products: title/vendor/tags cleaned per sku-redact denylist)","body":""},{"hash":"074b3d0","date":"2026-05-26 15:25:19 -0700","author":"Steve","subject":"frontend: cleanSku() strips vendor names from displayed sku (.ven/list/detail) + defer renderRailSections call (fix ReferenceError) — click-through verified","body":""},{"hash":"f0f6705","date":"2026-05-26 15:16:05 -0700","author":"Steve Abrams","subject":"sku-redact: wire shared vendor-id display scrubber","body":""},{"hash":"49135a7","date":"2026-05-26 09:50:33 -0700","author":"Steve Abrams","subject":"saloonwallpaper: editorial rail/facet labels — saloon-flavored (Pressed & Embossed, Victorian & Ornate, Smoke & Slate, Ivory & Cream) over real buckets","body":""},{"hash":"40c21ef","date":"2026-05-26 09:43:22 -0700","author":"Steve Abrams","subject":"saloonwallpaper: commit config-rails fix — aspirational victorian/damask (0 hydrate) → real buckets (6 rails fire)","body":""},{"hash":"f1e7ec9","date":"2026-05-26 08:12:07 -0700","author":"Steve Abrams","subject":"rails: wire /api/sliders into horizontal scroll-snap rail sections [fixed]","body":""},{"hash":"05f7a57","date":"2026-05-25 21:29:51 -0700","author":"Steve","subject":"fix: /api/facets total + counts now reflect filtered list (q, aesthetic, vendor)","body":""},{"hash":"76cd491","date":"2026-05-25 21:29:31 -0700","author":"Steve","subject":"wire api-vendor-redact middleware as first app.use (strips vendor + vendors facet from /api/* JSON)","body":""},{"hash":"21b04c1","date":"2026-05-25 20:37:38 -0700","author":"Steve Abrams","subject":"retag aesthetic from PG: 595 rows updated","body":"before: all=600\nafter:  all=5, beige=36, contemporary=59, gray=6, textured=446, traditional=27, white=21\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":"c25d6af","date":"2026-05-20 00:27:42 -0700","author":"Steve","subject":"add: pre-stage Meta Pixel snippet (placeholder; flip via _dw-batch set-fb-pixel.sh)","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"d81865b","date":"2026-05-20 00:18:17 -0700","author":"Steve Abrams","subject":"fix: /about → history.html alias (was 404)","body":""},{"hash":"d9d363c","date":"2026-05-19 23:52:33 -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":"8f182c7","date":"2026-05-19 11:44:11 -0700","author":"steve","subject":"Phase 2b: fix mobile text clipping","body":""},{"hash":"f8383d5","date":"2026-05-19 11:40:03 -0700","author":"Steve Abrams","subject":"fix: null-guard dead #theme-toggle reference (clean console + immediate grid render)","body":""},{"hash":"07bef59","date":"2026-05-19 11:15:15 -0700","author":"Steve Abrams","subject":"Phase 2: mobile-ready controls bar + tap-to-reveal cards (1st tap reveals, 2nd opens)","body":""},{"hash":"6cdb67b","date":"2026-05-19 09:51:31 -0700","author":"Steve Abrams","subject":"add grid/list view toggle + sortable list columns (Pattern/SKU/Aesthetic/Price, both directions)","body":""},{"hash":"7984bcf","date":"2026-05-19 09:09:54 -0700","author":"Steve Abrams","subject":"wire catalog from dw_unified — admin CRUD module + PG read-path; fix /api/sliders to use site rails","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"f6da570","date":"2026-05-19 08:01:17 -0700","author":"Steve Abrams","subject":"Add noopener,noreferrer to window.open external nav link","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2e072c9","date":"2026-05-19 08:00:43 -0700","author":"Steve Abrams","subject":"Add clean-URL routes for /about /history /care /sourcing /trade","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"79dfea8","date":"2026-05-19 08:00:13 -0700","author":"Steve Abrams","subject":"Untrack editor snapshot files; broaden .gitignore + add static 404-guard for .bak/.pre paths","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"15c89fd","date":"2026-05-19 07:59:36 -0700","author":"Steve Abrams","subject":"Wire sort param to product grid API; hydrate saved sort before first load","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"e7cea48","date":"2026-05-14 08:54:16 -0700","author":"Steve","subject":"hero-4grid: relocate json from data/ to public/ for Express static","body":""},{"hash":"b9ca97c","date":"2026-05-14 08:48:15 -0700","author":"Steve","subject":"4-grid hero: drop-in script + crop CSS + initial 4 newest products","body":""},{"hash":"fb5eb7b","date":"2026-05-14 08:34:58 -0700","author":"Steve","subject":"favicon: Mag-7-inspired SVG glyph","body":""},{"hash":"b83b47d","date":"2026-05-13 17:50:05 -0700","author":"Steve","subject":"fix env wiring — anchor dotenv to __dirname so .env loads even when pm2 cwd is wrong","body":""},{"hash":"dad0959","date":"2026-05-13 17:42:56 -0700","author":"Steve Abrams","subject":"corner-nav: title-case the brand name even when .ns-name source is lowercase","body":""},{"hash":"00b85c0","date":"2026-05-13 17:41:31 -0700","author":"Steve Abrams","subject":"corner-nav: title-case brand display (e.g. corkwallcovering → Cork Wallcovering)","body":""},{"hash":"69e8a4d","date":"2026-05-13 17:40:53 -0700","author":"Steve Abrams","subject":"corner-nav: fix injection — script tag was landing inside HTML comment, now anchored to real </body>","body":""},{"hash":"0c08112","date":"2026-05-13 14:00:57 -0700","author":"Steve Abrams","subject":"embed Big Red customer chat (lower-left, retail mode, vendor-redacted)","body":""},{"hash":"9cb985d","date":"2026-05-13 14:00:01 -0700","author":"Steve Abrams","subject":"chip-click → product details modal; vendor redacted in card overlay","body":""},{"hash":"33b36c4","date":"2026-05-13 12:32:45 -0700","author":"Steve Abrams","subject":"add universal corner-nav.js (UR 4-icon: bag/account/search/menu)","body":""},{"hash":"a6e2f01","date":"2026-05-13 12:13:24 -0700","author":"Steve Abrams","subject":"remove stray contact modal markup that was rendering inline on the page","body":""},{"hash":"e1fbd87","date":"2026-05-13 07:22:49 -0700","author":"Steve","subject":"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.","body":""},{"hash":"dbbc291","date":"2026-05-13 07:15:17 -0700","author":"Steve","subject":"brand: replace remaining fake brand globally → 'saloonwallpaper' across head/meta/wordmark/footer — enforces MEMORY brand-stem rule","body":""},{"hash":"524d0e2","date":"2026-05-11 04:06:46 -0700","author":"Steve","subject":"snapshot before fleet-grid refine tick 7","body":""},{"hash":"7a58b53","date":"2026-05-10 12:43:56 -0700","author":"Steve","subject":"sort-skill UI: add Light→Dark / Dark→Light / Color Wheel options","body":""},{"hash":"99c06cf","date":"2026-05-10 10:41:56 -0700","author":"Steve","subject":"sort-skill canonical: add light-dark/dark-light/wheel + helpers","body":""},{"hash":"c420cef","date":"2026-05-06 10:25:46 -0700","author":"Steve Abrams","subject":"initial scaffold (gitify-all 2026-05-06)","body":""}]}