{"slug":"glassbeadedwallpaper","total":34,"limit":100,"offset":0,"since":null,"commits":[{"hash":"2bb2a6e","date":"2026-09-23 09:13:03 -0700","author":"front-page-steward","subject":"front-page-steward: ux-primitives bundle (silent) TK-12031","body":""},{"hash":"2b5b589","date":"2026-09-22 16:44:56 -0700","author":"front-page-steward","subject":"revert ux-primitives auto-apply — coordinator gates fan-out (TK-12031)","body":""},{"hash":"367fa0c","date":"2026-09-22 15:45:28 -0700","author":"front-page-steward","subject":"front-page-steward: ux-primitives bundle (silent) TK-12031","body":""},{"hash":"87ae36c","date":"2026-09-22 15:43:48 -0700","author":"Steve","subject":"Revert \"front-page-steward: ux-primitives bundle (silent) TK-12031\"","body":"This reverts commit d377eb1c2ebff88120100b14447ab1ebc69761f9."},{"hash":"d377eb1","date":"2026-09-22 15:43:45 -0700","author":"front-page-steward","subject":"front-page-steward: ux-primitives bundle (silent) TK-12031","body":""},{"hash":"7ea3133","date":"2026-09-22 15:34:41 -0700","author":"Steve","subject":"Revert \"front-page-steward: ux-primitives bundle (silent) TK-12031\"","body":"This reverts commit 6dbe383bda9a253aeb746088f6f1a369e3ddeb2d."},{"hash":"6dbe383","date":"2026-09-22 15:34:10 -0700","author":"front-page-steward","subject":"front-page-steward: ux-primitives bundle (silent) TK-12031","body":""},{"hash":"5a9051b","date":"2026-09-10 11:56:24 -0700","author":"Steve Abrams","subject":"Add clean /privacy route/rewrite (AdSense)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"0674703","date":"2026-09-10 11:20:49 -0700","author":"Steve Abrams","subject":"Add privacy footer link (AdSense discoverability)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"392fff8","date":"2026-09-10 11:04:45 -0700","author":"Steve Abrams","subject":"Standardize privacy policy to /privacy.html + footer link (AdSense)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"22e7389","date":"2026-09-09 16:02:07 -0700","author":"Steve","subject":"TK-11341: add AdSense Auto-Ads loader + ads.txt (revert to remove ads)","body":""},{"hash":"9c78951","date":"2026-08-12 08:33:41 -0700","author":"Steve","subject":"viewer standard: add Grid/List toggle + per-field on/off menu (Fields) to product grid","body":""},{"hash":"fada257","date":"2026-08-04 11:44:42 -0700","author":"Steve","subject":"SEO: rel=nofollow sponsored on designerwallcoverings.com links (independent ranking) [fleet-seo]","body":""},{"hash":"69bb4f2","date":"2026-08-04 11:27:36 -0700","author":"Steve","subject":"Wire DW Meta Pixel 1431180262113856 + DW-network ad slot [ads/tracking rollout]","body":""},{"hash":"33c05ec","date":"2026-07-29 09:58:11 -0700","author":"Steve","subject":"corner-nav: block javascript:/data: URIs in search preview (URL-scheme allowlist)","body":""},{"hash":"2d6c0ad","date":"2026-07-29 09:42:41 -0700","author":"Steve","subject":"corner-nav: live as-you-type search with thumbnail previews (title+tags+description)","body":""},{"hash":"8d84b1d","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":"5f55c0b","date":"2026-06-17 09:47:04 -0700","author":"Steve Abrams","subject":"leak fix: 404-guard raw catalog json (glass-bead-products.json still served 721 products w/ supplier names) + git-rm the artifact; page uses scrubbed /api/products","body":""},{"hash":"450412b","date":"2026-06-12 09:19:45 -0700","author":"Steve","subject":"code-health: untrack 1.4MB backup json + 404-guard backup/scratch files in static server","body":""},{"hash":"732dc8a","date":"2026-06-01 16:18:32 -0700","author":"Steve","subject":"vendor-redact: scrub DW vendor names from /api/products (raw-http server uses redact() inline; was leaking)","body":""},{"hash":"51d9d40","date":"2026-06-01 14:03:45 -0700","author":"Steve","subject":"fix(hero): replace 404 glass-bead-hero.jpg + glass-bead-logo.png with real high-res BDL_1867 glass-bead texture (hero bg 2000px, og 1200x630 crop, logo 400x400)","body":""},{"hash":"a5f7d52","date":"2026-05-30 23:56:34 -0700","author":"Steve","subject":"gitignore: add backup/orig/old file patterns to prevent source leaks","body":"Added *.bak-*, *.backup.json, *.orig, *.save, *.old patterns.\nglass-bead-products.backup.json (1.3MB Shopify data) is tracked and served\nfrom __dirname root — needs manual rm + git rm to fully remediate.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"c1d4d44","date":"2026-05-27 16:34:56 -0700","author":"Steve","subject":"glass: make sort+density controls functional","body":"Two bugs: (1) controls-wiring IIFE ran before #productsGrid was declared so\nthe density slider + sort listener never bound; (2) even if bound, the sort\nchange handler was a /* TODO: re-sort live */ no-op. Fixes: added a generic\nsortProducts(list,mode) (Newest/Color/Style/SKU/Title) + window.applySort()\nthat re-renders from the top, deferred the wiring to DOMContentLoaded, and\nmade loadProducts honor the saved sort (default Newest) instead of always\nsorting by color on load. Both controls remain localStorage-persisted."},{"hash":"19eb646","date":"2026-05-26 09:45:04 -0700","author":"Steve","subject":"redact vendor names from customer-facing /api (close fleet leak)","body":""},{"hash":"fea16fb","date":"2026-05-20 00:27:39 -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":"00e2378","date":"2026-05-19 22:10:26 -0700","author":"Steve Abrams","subject":"add missing .ns-modal CSS — modal HTML existed but had no styles","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"f4bc87c","date":"2026-05-19 22:10:26 -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":"52d382e","date":"2026-05-18 20:36:06 -0700","author":"Steve","subject":"Harden static file server against path traversal and malformed URLs","body":""},{"hash":"11aa7e9","date":"2026-05-18 20:35:28 -0700","author":"Steve","subject":"Add rel=noopener noreferrer to external target=_blank links","body":""},{"hash":"fbd15ae","date":"2026-05-11 02:19:56 -0700","author":"Steve Abrams","subject":"snapshot before fleet-grid refine tick 4","body":""},{"hash":"2f653bf","date":"2026-05-10 08:55:47 -0700","author":"Steve","subject":"apply R1+R2+R4 hero standing rules — strip Maison Lustre, lowercase serif wordmark below photo, add data-hero-mode huge default + four-square hydration","body":""},{"hash":"6e696de","date":"2026-05-08 07:35:22 -0700","author":"Steve","subject":"Hamburger always visible on right — propagated from novasuede a815690","body":"Standing rule (~/.claude/skills/dw-site-build/SKILL.md): hamburger ALWAYS\nvisible on the right, inline nav collapses to drop-panel at all widths.\nSame edit as novasuede + silkwallcoverings.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"afbb31a","date":"2026-05-07 22:58:50 -0700","author":"Steve","subject":"Server-side brand-scrub on /api/products (PG read)","body":"The PG glass_bead_products table still has 'Designer Wallcoverings' in\nvendor/imageAlt/description fields from the original Shopify import.\nAdding a brandScrub() pass on read replaces these with 'Maison Lustre'\nwithout touching the DB. Also flipped /api/products Cache-Control from\nmax-age=60 to no-store so updates propagate immediately past Cloudflare.\n\nBrowserbase render verify: 8 DW leaks → 0.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2c23fa0","date":"2026-05-07 20:38:38 -0700","author":"Steve","subject":"initial scaffold + ns-header + Atelier rebrand + sort/density/search controls","body":"47/47 fleet QA (100%) milestone state.\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n"}]}