{"slug":"hollywood-wallcoverings","total":44,"limit":100,"offset":0,"since":null,"commits":[{"hash":"7cb019b","date":"2026-07-08 13:11:55 -0700","author":"Steve Abrams","subject":"campaign: 8 category pills (2 rows, all black) linking to real DW collections; Vinyl no longer gold; Textured->Natural; +Vegan Leather +Faux Suede(=Ultra+Nova)","body":""},{"hash":"37d1525","date":"2026-07-08 13:05:50 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-08T13:05:49 (1 files) — campaigns/preview-navbar.png","body":""},{"hash":"de80cdb","date":"2026-07-08 12:56:30 -0700","author":"Steve Abrams","subject":"campaign: enlarge featured images by 2/3 (270->450px)","body":""},{"hash":"d56836f","date":"2026-07-08 12:48:41 -0700","author":"Steve Abrams","subject":"campaign: replace 2 discontinued SKUs (Baja, Floating Fibers) w/ live Hilo Highway + Madison's Raked; all 38 links/images verified 200","body":""},{"hash":"c17903c","date":"2026-07-08 12:44:42 -0700","author":"Steve Abrams","subject":"campaign: nav-bar build w/ teal hero + single-row featured images (+50%), all DW links","body":""},{"hash":"24768e5","date":"2026-07-08 12:35:43 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-08T12:35:41 (1 files) — campaigns/hollywood-cc-preview-NEW.png","body":""},{"hash":"feaa924","date":"2026-07-08 12:29:56 -0700","author":"Steve Abrams","subject":"campaign: regenerate rendered preview.png (DW-linked)","body":""},{"hash":"d8f6dc8","date":"2026-07-08 12:21:45 -0700","author":"Steve Abrams","subject":"campaign: per-aesthetic scoped DW search links, drop stale hollywood counts","body":""},{"hash":"f6adc8c","date":"2026-07-08 12:20:02 -0700","author":"Steve Abrams","subject":"campaign: repoint all non-product links to DW search 'Hollywood Wallcoverings' sorted newest","body":""},{"hash":"fd7ebe3","date":"2026-07-08 12:16:01 -0700","author":"Steve Abrams","subject":"campaign: point product/image links to designerwallcoverings.com; 3x2 grid (add Eatonville as 6th)","body":""},{"hash":"721e7ff","date":"2026-07-08 12:05:09 -0700","author":"Steve","subject":"Update CC email hero to Tratori Vinyl (HWC-61040) lifestyle shot","body":""},{"hash":"236c542","date":"2026-07-08 12:04:38 -0700","author":"Steve Abrams","subject":"Set Tratori Vinyl (HWC-61040) as CC campaign hero image","body":""},{"hash":"d4954e6","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":"b36fd93","date":"2026-06-30 16:48:57 -0700","author":"Steve Abrams","subject":"CustomCreator: drop dead wallco.ai origin, serve local cache / wallpapersback","body":""},{"hash":"a36d0d1","date":"2026-06-30 12:02:51 -0700","author":"Steve","subject":"add Hollywood Wallcoverings Constant Contact campaign draft","body":""},{"hash":"8226967","date":"2026-06-21 18:54:44 -0700","author":"Steve Abrams","subject":"customcreator: reject blank/zero/NaN mural dimensions before clamp (was silently becoming a 50x50cm order)","body":""},{"hash":"8f6f5b9","date":"2026-06-21 16:43:06 -0700","author":"Steve","subject":"CustomCreator configurator: graceful gallery fallback for unknown/retired design ids","body":"On /api/product not-found, redirect to /CustomCreator (gallery) instead of a dead 'Could not\nload product'. Enables a single-rule SEO deep-redirect for the wallco.ai retirement (every\n/design/<id> -> configurator?handle=wallco-<id>; non-cataloged ids land cleanly on the gallery)."},{"hash":"fae2b73","date":"2026-06-21 08:59:30 -0700","author":"Steve","subject":"Custom Creator: self-host design images via id-keyed write-through cache (DTD-A)","body":"Removes the runtime dependency on wallco.ai so it can be retired (draft #1).\n- Image route is now /CustomCreator/img/<id>: serves the local cache file if present,\n  else fetches the design's correct wallco source and write-through-caches it.\n- Rebuilt wallco-designs.json: deduped (snapshot had every row twice) + ts-file-only\n  (dropped ~28 by-id designs whose images 404 on wallco itself) -> 5,940 servable designs.\n- 5,939/5,940 images pre-cached locally on Kamatera (2.2GB, gitignored); 1 self-caches.\nDTD verdict A (3/3 Claude+Codex+Qwen). Retirement (301+pm2 stop) stays gated on cache-warm.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"24bd0dd","date":"2026-06-21 06:58:33 -0700","author":"Steve","subject":"Custom Creator gallery: full-catalog search + category filter + pagination","body":"Browse all 11,936 wallco.ai designs (was capped at newest 600). Server-side\nsearch (title/handle/category/style), category dropdown with counts, sort\n(newest/color/style/sku/title) across the whole catalog, and Load-more\npagination (120/page). New /api/categories facet endpoint.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"16691ff","date":"2026-06-20 11:38:48 -0700","author":"Steve","subject":"Custom Creator: re-source to wallco.ai designs ONLY (drop Rebel Walls/Graham & Brown)","body":"The /CustomCreator now serves ONLY wallco.ai original AI designs — the eligible set is\nis_published && !user_removed (== published + seam/settlement-clean, since wallco.ai only\npublishes after settlement_verdict='OK' + seam pass), 11,936 designs. Each sells as a\nmade-to-measure mural at $83.38/m² (server-side priced) via Shopify draft order. Design\nimages are proxied through this origin (/CustomCreator/img/<file>) so no wallco.ai URL is\never exposed. Removed the Rebel Walls Shopify collection + Graham & Brown bespoke assets.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"90eedda","date":"2026-06-20 11:19:43 -0700","author":"Steve","subject":"Add Hollywood-branded Custom Creator at /CustomCreator (made-to-measure murals)","body":"Ports the mural-pdp custom creator into the Hollywood Express app: gallery +\nconfigurator + live-priced Shopify draft-order checkout ($83.38/m², recomputed\nserver-side) + bespoke quote flow. Uses the SHOPIFY_* tokens already in the prod\nprocess env — no new secrets, no nginx change. Upstream vendor names (Rebel Walls,\nGraham & Brown) neutralized to 'Made to Measure' so nothing leaks customer-facing.\nAdds a Custom Creator nav link. Scrubs the philipperomano/wallco heritage:\nwallco-page-theme -> hw-page-theme, package.json description.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"a3a2311","date":"2026-06-03 20:45:15 -0700","author":"Steve","subject":"Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle","body":""},{"hash":"d63b1c1","date":"2026-06-03 14:34:45 -0700","author":"Steve Abrams","subject":"Route product image_url through vendor-neutral image proxy (no CDN vendor names in customer output)","body":""},{"hash":"cc222b0","date":"2026-05-31 18:47:21 -0700","author":"Steve Abrams","subject":"Add root /favicon.{ico,svg} route (static is mounted under /static, so browser /favicon.ico 404'd)","body":""},{"hash":"3193c50","date":"2026-05-31 16:32:33 -0700","author":"Steve Abrams","subject":"Add per-site favicon (kills /favicon.ico 404)","body":""},{"hash":"161125d","date":"2026-05-29 22:19:16 -0700","author":"Steve Abrams","subject":"fix: strip 3rd-party vendor tokens from product slug (redactVendorSlug, house-brand-safe) + dual-key route resolve — closes standalone slug vendor leak","body":""},{"hash":"d87438c","date":"2026-05-29 15:12:00 -0700","author":"Steve Abrams","subject":"feat(theme): add ?theme=N toggle to layout() — mirrors dw-domain-fleet productPage() canonical (commit 34fbe0e). Single block injected after <body> opening, before ns-header-modal-styles. Hidden until ?theme=1|2 or localStorage opt-in.","body":""},{"hash":"222a6d0","date":"2026-05-28 07:26:03 -0700","author":"Steve","subject":"scrub vendor name leaks from products.json source (1 products: title/vendor/tags cleaned per sku-redact denylist)","body":""},{"hash":"3a7da85","date":"2026-05-26 07:39:29 -0700","author":"Steve","subject":"homepage rails: render 6 aesthetic-bucket sections + filter pills","body":"filterAndPaginate now honors ?aesthetic=<bucket>. Homepage shows rail\nsections (8 cards each) when unfiltered, flat grid when any filter is\nactive. Pills strip persistent across both views. data/products.json\noverlaid with PG microsite_products.tags + .aesthetic via _shared/scripts/\nmerge-tags-into-products-json.js (3224/3224 matched).\n\nBucket distribution: architectural 1262 / faux 738 / grasscloth 666 /\nall 316 / vinyl 140 / contemporary 80 / textured 22."},{"hash":"4079a0a","date":"2026-05-26 07:20:44 -0700","author":"Steve Abrams","subject":"rails reordered narrow→broad (grasscloth/faux/architectural/vinyl/contemporary/textured) for balanced bucket distribution","body":""},{"hash":"b04a2c0","date":"2026-05-26 07:18:38 -0700","author":"Steve Abrams","subject":"rails → top-6 actual catalog vocab (textured/architectural/contemporary/vinyl/grasscloth/faux)","body":""},{"hash":"ff197df","date":"2026-05-19 23:54: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":"6c8e945","date":"2026-05-19 22:10:27 -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":"5bc9e56","date":"2026-05-19 11:37:43 -0700","author":"Steve Abrams","subject":"Phase 2: mobile-ready + tap-to-reveal","body":""},{"hash":"11b30f7","date":"2026-05-19 11:07:45 -0700","author":"Steve Abrams","subject":"stage2: wire hollywood-wallcoverings onto shared catalog (hand-tailored)","body":""},{"hash":"26ab45f","date":"2026-05-19 08:01:09 -0700","author":"Steve Abrams","subject":"Add noreferrer to all target=_blank external links","body":"Four blank-target links (DW catalog, Free Sample, Order Free Memo, Shop\non DW) had rel=\"noopener\" but not noreferrer. Now rel=\"noopener\nnoreferrer\" on all.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2befa8b","date":"2026-05-19 08:00:45 -0700","author":"Steve Abrams","subject":"Untrack backup snapshot, broaden .gitignore, add .bak/.pre- 404-guard","body":"server.js.bak.nshdr.1778214775073 was committed despite *.bak in\n.gitignore (ignore doesn't untrack). Removed from index, kept on disk.\n.gitignore now covers *.bak.* and *.pre-* too. Added an Express\nmiddleware that 404s any path containing .bak or .pre- so a stray\nsnapshot can never be served from a static root.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"623f740","date":"2026-05-19 08:00:13 -0700","author":"Steve Abrams","subject":"Server-side grid sort: honor ?sort param across all infinite-scroll pages","body":"Sort was client-side only — reordering only the ~48 cards already in the\nDOM, so newly scrolled pages appended in newest order regardless. Now\nfilterAndPaginate sorts the full filtered list before pagination, the\nselect reloads with ?sort=, /api/page carries it forward, and saved sort\nhydrates from localStorage (one-time redirect) before first render.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"75860b9","date":"2026-05-18 10:18:02 -0700","author":"Steve Abrams","subject":"fix /contact: real phone+email (@hollywoodwallcoverings.com); 'private label' -> 'exclusive collection'","body":""},{"hash":"63e9a10","date":"2026-05-13 08:57:54 -0700","author":"Steve","subject":"snapshot: 1 file(s) changed, +1 new","body":""},{"hash":"b465350","date":"2026-05-11 04:38:53 -0700","author":"steve","subject":"fleet-grid refine: chip_uniform_aspect (.card a.thumb 1/1 -> 1/1.15) (hollywood-wallcoverings)","body":""},{"hash":"9e6a392","date":"2026-05-07 21:33:58 -0700","author":"Steve Abrams","subject":"Add novasuede ns-header to hollywood server-rendered layout","body":"Hollywood's Express layout function gets the same sticky-blur unified\nheader as the static-HTML fleet sites. Templates loaded from\n~/Projects/_prod-mirror/novasuede-templates/ with brand=Hollywood\nWallcoverings, accent=#c9a865 (brass).\n\nSpot check: 7/8 → 8/8 fleet sample sites now show ns-header live.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"84aed2c","date":"2026-05-07 14:50:36 -0700","author":"Steve Abrams","subject":"Disable CF HTML caching — Cache-Control: no-store","body":"Per fleet sweep: origin must send no-store so CF doesn't cache\nedited HTML. /api/* routes unaffected (still cacheable per Express defaults).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"ffcd697","date":"2026-05-06 10:25:40 -0700","author":"Steve Abrams","subject":"initial scaffold (gitify-all 2026-05-06)","body":""}]}