{"slug":"madagascarwallpaper","total":75,"limit":100,"offset":0,"since":null,"commits":[{"hash":"f3e82a8","date":"2026-07-06 17:57:07 -0700","author":"Steve Abrams","subject":"Square product-card images (aspect-ratio 1/1)","body":""},{"hash":"006b9f1","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":"491029f","date":"2026-06-19 16:33:20 -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":"82b9cc2","date":"2026-06-18 09:04:27 -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":"556f8d5","date":"2026-06-11 09:30:19 -0700","author":"Steve Abrams","subject":"Recompute aesthetic from tags via classifyAesthetic (was degenerate 'all' snapshot)","body":""},{"hash":"1893c57","date":"2026-06-09 13:47:35 -0700","author":"Steve","subject":"step2 vendor-leak fix: dual-key /sample resolver + handle_display hrefs","body":""},{"hash":"128100a","date":"2026-06-09 13:47:21 -0700","author":"Steve","subject":"snapshot before step2 codemod","body":""},{"hash":"afb0abc","date":"2026-06-03 20:45:20 -0700","author":"Steve","subject":"Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle","body":""},{"hash":"f1c330e","date":"2026-06-03 20:27:44 -0700","author":"Steve Abrams","subject":"seo/a11y: add visually-hidden <h1> (site name) for heading semantics — zero visual change","body":""},{"hash":"4ff5ad5","date":"2026-06-03 14:19:40 -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":"9e0d434","date":"2026-06-01 16:38:40 -0700","author":"Steve Abrams","subject":"admin: add dw-theme-nav 20-theme navigator (upper-right, admin-only)","body":""},{"hash":"3ebd718","date":"2026-06-01 16:01:29 -0700","author":"Steve Abrams","subject":"catalog: fill from Shopify (madagascarwallpaper niche)","body":""},{"hash":"4d55486","date":"2026-06-01 15:57:58 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch","body":""},{"hash":"f916264","date":"2026-06-01 15:47:45 -0700","author":"Steve Abrams","subject":"dw-header: hide ANY pre-existing <header> (not just ns-header); title-case bare-slug names","body":""},{"hash":"5be3296","date":"2026-06-01 15:44:20 -0700","author":"Steve Abrams","subject":"FIX: dw-header was injected inside a doc-comment (never ran); re-inject before the real </body>","body":""},{"hash":"525a0fe","date":"2026-06-01 15:21:08 -0700","author":"Steve","subject":"hero: rotate curated room-setting pool (hero-pool.json), guard >=1400px, no swatch blur","body":""},{"hash":"d9758f9","date":"2026-06-01 15:11:36 -0700","author":"Steve Abrams","subject":"header name → domain name 'Madagascar Wallpaper' (remove odd brand name)","body":""},{"hash":"9872317","date":"2026-06-01 15:00:40 -0700","author":"Steve Abrams","subject":"hero: huge 2520px clean hero from dw_unified (graphic-designer vetted; no header/text/watermark)","body":""},{"hash":"59a0791","date":"2026-06-01 14:38:47 -0700","author":"Steve Abrams","subject":"hero: clean vetted replacement","body":""},{"hash":"a61063c","date":"2026-06-01 14:16:29 -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":"67b2f4e","date":"2026-06-01 14:10:01 -0700","author":"Steve Abrams","subject":"disable hero-4grid overlay so the unique high-res room/pattern hero shows full-bleed","body":""},{"hash":"e439da4","date":"2026-06-01 14:04:12 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local branch","body":""},{"hash":"ea366fe","date":"2026-06-01 13:59:21 -0700","author":"Steve","subject":"homepage: collapse duplicated 'Ideas' rail-eyebrows into one section eyebrow","body":""},{"hash":"692b572","date":"2026-06-01 13:56:37 -0700","author":"Steve Abrams","subject":"Unique hero image (backsync from prod, fleet hero dedup 2026-06-01)","body":""},{"hash":"8d31592","date":"2026-06-01 13:48:42 -0700","author":"Steve Abrams","subject":"Re-add Big Red embed (revert conflicted; re-injected)","body":""},{"hash":"e4f99aa","date":"2026-06-01 13:41:36 -0700","author":"Steve Abrams","subject":"fleet rebuild: dw-header (hamburgers UL + centered name) + unique high-res hero + accent — local pilot branch","body":""},{"hash":"fdd5c1b","date":"2026-06-01 13:36:34 -0700","author":"Steve","subject":"hero: activate self-contained 2x2 hero-4grid (fleet sweep, local)","body":""},{"hash":"d6d533c","date":"2026-06-01 13:32:49 -0700","author":"Steve Abrams","subject":"Remove Big Red widget — never UX-worked, collided with Help pill (fleet sweep)","body":""},{"hash":"c25c1f6","date":"2026-05-29 13:20:43 -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":"1fa618a","date":"2026-05-28 07:26:07 -0700","author":"Steve","subject":"scrub vendor name leaks from products.json source (47 products: title/vendor/tags cleaned per sku-redact denylist)","body":""},{"hash":"bf98fc1","date":"2026-05-26 15:16:02 -0700","author":"Steve Abrams","subject":"sku-redact: wire shared vendor-id display scrubber","body":""},{"hash":"fa917e4","date":"2026-05-26 09:59:53 -0700","author":"Steve","subject":"rails: editorial labels for firing aesthetic buckets","body":""},{"hash":"e7c5218","date":"2026-05-26 08:17:45 -0700","author":"Steve Abrams","subject":"homepage: add retrowalls-canonical rail-sections (id=rails + renderRailSections)","body":"Fleet rails sweep A3 — adds the canonical DW rail-sections pattern from\nretrowalls (per LEDGER 2026-05-26 correction note). Renders rails from\n/api/sliders ABOVE the flat grid on the unfiltered '/' home view; hides\nitself when state.q or state.facet !== 'all'. Clicking 'View all -> on a\nrail title calls state.facet=aes + resetGrid + scrollIntoView('#shop')\nwhich is the canonical jumpToFacet behavior. Patch is 3 pieces:\n  (1) <div id='rails' style='display:none'></div> before <div id='grid'>\n  (2) .rail-section/.rail-head/.rail-all/.grid.rail-grid CSS\n  (3) async renderRailSections() fn + startup call right after loadGridPage().\nCoexists cleanly with the existing 2-rail Ideas block above (which renders\n'New this week' + 'Curated picks' from /api/products and survives in any\nfilter state)."},{"hash":"84375b9","date":"2026-05-26 08:11:00 -0700","author":"Steve Abrams","subject":"site.config rails: align with actual catalog buckets (texture/botanical/palm)","body":"Fleet rails sweep — config rails referenced raffia/grasscloth/sisal/natural/woven/handloom\nbut products.json only buckets into texture(28) botanical(15) palm(2). /api/sliders was\nreturning rails:[]. Now matches reality."},{"hash":"f6da5c6","date":"2026-05-25 21:17:43 -0700","author":"Steve","subject":"pre-paint hydration for density slider — set --cols from localStorage in head IIFE (no flash)","body":""},{"hash":"7955e28","date":"2026-05-25 21:17:05 -0700","author":"Steve","subject":"remove p.vendor render on rail cards — replace with 'Designer Wallcoverings' brand","body":""},{"hash":"a8b0e7f","date":"2026-05-25 21:16:51 -0700","author":"Steve","subject":"/api/facets now honors q/aesthetic/vendor filters — total reflects filtered list","body":""},{"hash":"6bb55e3","date":"2026-05-25 21:16:34 -0700","author":"Steve","subject":"wire api-vendor-redact middleware as first app.use — strips vendor field + vendors facet from /api/*","body":""},{"hash":"c45bd1a","date":"2026-05-25 20:37:37 -0700","author":"Steve Abrams","subject":"retag aesthetic from PG: 45 rows updated","body":"before: all=52\nafter:  all=7, botanical=15, palm=2, texture=28\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":"94ac13d","date":"2026-05-20 00:27:40 -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":"909dcb4","date":"2026-05-19 23:52:31 -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":"58e1211","date":"2026-05-19 12:14:37 -0700","author":"Steve Abrams","subject":"Phase 2b: harden .card .pat against long-token title clipping (overflow-wrap)","body":""},{"hash":"1af89bc","date":"2026-05-19 11:40:02 -0700","author":"Steve Abrams","subject":"fix: null-guard dead #theme-toggle reference (clean console + immediate grid render)","body":""},{"hash":"4cf152c","date":"2026-05-19 11:28:32 -0700","author":"Steve Abrams","subject":"Phase 2: mobile-ready + tap-to-reveal","body":""},{"hash":"9a88000","date":"2026-05-19 10:09:42 -0700","author":"Steve Abrams","subject":"stage2: wire microsite catalog + admin CRUD + grid/list view","body":""},{"hash":"690771d","date":"2026-05-19 08:06:07 -0700","author":"Steve","subject":"nav: remove dead /about and /vocabulary links","body":"Neither about.html nor vocabulary.html exists, so those nav links 404.\nStripped them from the care/history/sourcing/trade footer nav. The\nindex.html nav/footer /about links were replaced with real clean-URL\ntargets (/history, /care, /trade) in the prior commit.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"dd75db7","date":"2026-05-19 08:05:58 -0700","author":"Steve","subject":"index: wire sort select to API, hydrate saved sort before first load","body":"The sort <select> persisted to localStorage but state.sort was never\nsent in the /api/products query, and the wire-up that read the saved\nvalue ran AFTER the initial loadGridPage(). Now state.sort is hydrated\nfrom localStorage at state-init time (before the first fetch), the\nselect reflects it, and loadGridPage() passes sort= to the server.\nAlso add rel=\"noopener noreferrer\" to the Facebook external link.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"e17fe8c","date":"2026-05-19 08:05:49 -0700","author":"Steve","subject":"server: fix facets total, add .bak 404-guard, clean-URL static routes","body":"- /api/facets total now counts PRODUCTS_NICHE (the filtered list actually\n  served), not the raw PRODUCTS array.\n- Middleware 404-guards any .bak/.pre-/.orig path so snapshot files never\n  serve from the static root.\n- express.static gets extensions:['html'] so extension-less nav links\n  (/care, /history, /trade, /sourcing) resolve instead of 404ing.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"b844bf1","date":"2026-05-19 08:05:41 -0700","author":"Steve","subject":"chore: untrack .bak/.pre- snapshots, broaden .gitignore","body":"Removes 19 committed backup/snapshot files from version control and\nextends .gitignore to cover *.bak.*, *.pre-*, *.orig patterns.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2751861","date":"2026-05-14 08:54:20 -0700","author":"Steve","subject":"hero-4grid: relocate json from data/ to public/ for Express static","body":""},{"hash":"354e276","date":"2026-05-14 08:48:22 -0700","author":"Steve","subject":"4-grid hero: drop-in script + crop CSS + initial 4 newest products","body":""},{"hash":"d81ae8a","date":"2026-05-14 08:34:59 -0700","author":"Steve","subject":"favicon: Mag-7-inspired SVG glyph","body":""},{"hash":"2f4d544","date":"2026-05-13 17:50:04 -0700","author":"Steve","subject":"fix env wiring — anchor dotenv to __dirname so .env loads even when pm2 cwd is wrong","body":""},{"hash":"c87cd87","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":"023002c","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":"f3f2efa","date":"2026-05-13 17:40:51 -0700","author":"Steve Abrams","subject":"corner-nav: fix injection — script tag was landing inside HTML comment, now anchored to real </body>","body":""},{"hash":"ad4f7b7","date":"2026-05-13 14:00:55 -0700","author":"Steve Abrams","subject":"embed Big Red customer chat (lower-left, retail mode, vendor-redacted)","body":""},{"hash":"bac7d8e","date":"2026-05-13 14:00:00 -0700","author":"Steve Abrams","subject":"chip-click → product details modal; vendor redacted in card overlay","body":""},{"hash":"8f67380","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":"eafbabc","date":"2026-05-13 12:13:23 -0700","author":"Steve Abrams","subject":"remove stray contact modal markup that was rendering inline on the page","body":""},{"hash":"9cc8265","date":"2026-05-13 07:22:44 -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":"ea9c1ce","date":"2026-05-13 07:15:14 -0700","author":"Steve","subject":"brand: replace remaining fake brand globally → 'madagascarwallpaper' across head/meta/wordmark/footer — enforces MEMORY brand-stem rule","body":""},{"hash":"490d14d","date":"2026-05-13 06:02:32 -0700","author":"Steve Abrams","subject":"brand: <title> uses domain stem 'madagascarwallpaper' (was 'West Village Maison') — enforces MEMORY brand-stem rule","body":""},{"hash":"15d3cad","date":"2026-05-11 04:39:35 -0700","author":"steve","subject":"fleet-grid refine: chip_uniform_aspect (#ideas .rail-card img 1 -> 1/1.15) (madagascarwallpaper)","body":""},{"hash":"cea27b0","date":"2026-05-10 12:43:43 -0700","author":"Steve","subject":"sort-skill UI: add Light→Dark / Dark→Light / Color Wheel options","body":""},{"hash":"f62efc4","date":"2026-05-10 10:33:33 -0700","author":"Steve","subject":"sort-skill canonical: add light-dark/dark-light/wheel + helpers","body":""},{"hash":"ce3175d","date":"2026-05-07 17:55:31 -0700","author":"Steve","subject":"graphic-loop pass 13: real footer brand + Facebook link + OG/Twitter meta tags","body":""},{"hash":"be4dd34","date":"2026-05-07 13:19:46 -0700","author":"Steve","subject":"graphic-loop pass 12: niche keyword filter (no off-niche products like 'solid' on patterned sites)","body":""},{"hash":"cb3d7ec","date":"2026-05-07 12:43:30 -0700","author":"Steve","subject":"graphic-loop pass 11: add Ideas rails (New this week + Curated picks) above main grid","body":""},{"hash":"6b8f2c9","date":"2026-05-07 09:26:34 -0700","author":"Steve","subject":"graphic-loop pass 10: center-mark to top + readable text-shadow + tighter letter-spacing (no mix-blend-mode)","body":""},{"hash":"96bf95f","date":"2026-05-07 09:13:12 -0700","author":"Steve","subject":"graphic-loop pass 9: real site name + 20-image hero rotation + 2400px hero res","body":""},{"hash":"a19bbc0","date":"2026-05-07 08:44:40 -0700","author":"Steve","subject":"graphic-loop pass 8 fix: divergent template — swap heading font to Libre Baskerville","body":""},{"hash":"1d9ae6b","date":"2026-05-07 08:41:52 -0700","author":"Steve","subject":"graphic-loop pass 8: theme-aware font Libre Baskerville (panel-approved comprehensive 16-bucket assignment)","body":""},{"hash":"5f1c7e4","date":"2026-05-06 19:59:58 -0700","author":"Steve","subject":"graphic-loop pass 2: fix .corner-mark contrast + soften hero overlay (qwen3:14b consensus across fleet)","body":""},{"hash":"c6cb2f7","date":"2026-05-06 10:25:41 -0700","author":"Steve Abrams","subject":"initial scaffold (gitify-all 2026-05-06)","body":""}]}