{"slug":"designerlookbooks","total":10,"limit":100,"offset":0,"since":null,"commits":[{"hash":"81dde46","date":"2026-06-23 09:35:27 -0700","author":"Claude","subject":"Replace pagination with infinite scrolling","body":"- Remove prev/next pagination nav (2 occurrences)\n- Add scroll sentinel at bottom\n- Load next lookbook page dynamically on scroll\n- Append articles incrementally to grid\n\nComplies with infinite scrolling requirement."},{"hash":"57f08bb","date":"2026-06-03 20:44:32 -0700","author":"Steve","subject":"Scrub residual vendor names from products.json (title/vendor/tags); preserve sku/handle","body":""},{"hash":"a809a85","date":"2026-05-31 18:47:21 -0700","author":"Steve","subject":"Add root /favicon.{ico,svg} route (static is mounted under /static, so browser /favicon.ico 404'd)","body":""},{"hash":"16c8591","date":"2026-05-31 16:32:28 -0700","author":"Steve","subject":"Add per-site favicon (kills /favicon.ico 404)","body":""},{"hash":"8ff736e","date":"2026-05-28 07:25:52 -0700","author":"Steve","subject":"scrub vendor name leaks from products.json source (176 products: title/vendor/tags cleaned per sku-redact denylist)","body":""},{"hash":"2764ec6","date":"2026-05-19 15:20:47 -0700","author":"Steve Abrams","subject":"404-guard snapshot/backup paths and broaden .gitignore","body":"DW fleet standing rule — .bak / .bak.* / .pre-* / .orig must never serve\nfrom the static root. public/ is currently empty so no exposure today,\nbut the middleware locks the door before anything accidentally lands\nthere. .gitignore now also blocks committing those snapshot extensions.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2a95466","date":"2026-05-19 15:20:04 -0700","author":"Steve Abrams","subject":"persist sort + density to localStorage on lookbook and search pages","body":"Standing rule: every product grid must have sort + density controls\nwhose value persists across reloads, and the saved value must hydrate\nBEFORE the first grid render. The lookbook + search pages already had\nsort + density UI, but only density was persisted; sort was never\nwritten to localStorage and never restored. Fix:\n\n- Sort onchange handler now writes dl-sort to localStorage before reload.\n- New hydration IIFE on both pages: when URL has no sort param and a\n  saved sort exists (and it isn't the server default 'newest'), redirect\n  once via location.replace so the server can re-sort the grid in the\n  user's chosen order. Density still hydrates inline.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"8a72dd2","date":"2026-05-19 15:18:39 -0700","author":"Steve Abrams","subject":"add noreferrer to all target=_blank external links","body":"Footer Shop on DW + cluster grid + product detail + search grid all now\ncarry rel=\"noopener noreferrer\". Standing-rule mechanical fix.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2b2d6c7","date":"2026-05-13 13:21:16 -0700","author":"Steve","subject":"polish pass — sharper hero copy + Editor's Letter editorial section","body":"- hero: lead with mood-shopping vs SKU-shopping framing, accent color on the\n  punchline so the magazine cover reads at a glance instead of being a\n  generic 'visual lookbooks' line.\n- editor's letter section between the cover and the cluster spread —\n  two-paragraph editorial intro with byline, drop-cap, Cormorant Garamond\n  body. Establishes voice and gives the home page a distinctive content\n  beat the rest of the DW fleet doesn't have.\n- footer was already correct (info@, 15442 Ventura, 888-373-4564, 2026,\n  G-SDQQKBE3GY GA verified on live).\n\nDeployed to Kamatera pm2 designerlookbooks (port 9923); anchor checks +\nHTTP 200 verified."},{"hash":"b699470","date":"2026-05-10 02:49:20 -0700","author":"Steve","subject":"initial scaffold + GA gtag (8 aesthetic clusters, magazine layout)","body":""}]}