{"slug":"reno-visualizer","total":13,"limit":100,"offset":0,"since":null,"commits":[{"hash":"572601b","date":"2026-07-16 08:50:08 -0700","author":"Steve","subject":"shopify: refresh catalog — keep sample-only as 'by request'","body":""},{"hash":"915041e","date":"2026-07-16 08:48:25 -0700","author":"steve@designerwallcoverings.com","subject":"Handle new catalog fields: buyable, sample_only, price_display, product_url","body":"- server.js loadProducts(): pass through price_display (pre-formatted string),\n  buyable (bool), sample_only (bool), product_url (live DW product page);\n  derive price_display fallback if absent so no null ever reaches the client\n- index.html pattern grid: show price via price_display (never fmtPrice/NaN);\n  sample-only badge uses sample_only field; append \"/roll\" only for buyable\n- Step 3 selected-pattern info + Step 4 shop preview: same price_display fix;\n  product_url used for \"View on Designer Wallcoverings\" links throughout\n\nNo $null / $NaN possible: price_display is always a non-empty string from the\ncatalog (e.g. \"Roll price on request\" for the 83 sample-only products, \"$94.42\"\nfor the 167 buyable products).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"258fcf0","date":"2026-07-16 08:13:07 -0700","author":"Steve","subject":"shopify: refresh catalog — real roll prices, no $4.25 sample-only leak","body":""},{"hash":"e870f08","date":"2026-07-16 08:12:11 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-16T08:12:03 (1 files) — data/shopify-catalog.json","body":""},{"hash":"6520d1c","date":"2026-07-16 07:51:19 -0700","author":"Steve","subject":"security: bind server to 127.0.0.1 so the tunnel/proxy basic-auth gate can't be bypassed on the LAN","body":""},{"hash":"87ca83c","date":"2026-07-16 07:42:03 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-16T07:41:55 (1 files) — data/leads.json","body":""},{"hash":"e416e7d","date":"2026-07-16 07:36:42 -0700","author":"Steve Abrams","subject":"Step 4: admin.html — show Shopify product link on lead cards","body":"Lead cards now show a \"View on DW →\" link when pattern_shopify_url\nis present on the lead. Existing date+time (created_at) chip unchanged.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"3035e40","date":"2026-07-16 07:36:36 -0700","author":"Steve Abrams","subject":"Step 3: index.html — real Shopify images + product deep-links, no checkout","body":"- Pattern grid uses real CDN images from shopify-catalog (image field)\n- initShopStep: shows \"View on Designer Wallcoverings →\" link using\n  shopify_url = https://www.designerwallcoverings.com/products/<handle>\n  opens in new tab rel=\"noopener noreferrer\", no cart/checkout\n- Lead success screen: CTA button links to product page after capture\n- submitLead: sends pattern_handle + pattern_shopify_url in lead body\n- Nav note: \"Links to the live Designer Wallcoverings product page.\"\n- Sort + density controls unchanged and persisted to localStorage\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"f3bc6c5","date":"2026-07-16 07:36:25 -0700","author":"Steve Abrams","subject":"Step 2: server.js — load products from shopify-catalog.json","body":"loadProducts() now reads shopify-catalog.json first (real images,\ntitles, vendors, prices, handles). Builds shopify_url from\ncheckout_domain + handle for every product. Falls back to legacy\nproducts.json if catalog missing. Lead body now persists\npattern_handle, pattern_shopify_url, name, interest fields.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"631dcaf","date":"2026-07-16 07:36:18 -0700","author":"Steve Abrams","subject":"Step 1: add real Shopify catalog (200 products, read-only static)","body":"Copies shopify-catalog.json from the accelerator data dir.\nFields: handle, image, title, vendor, type, price, variant_id, sku.\nNo token in repo — static snapshot only.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"50ae83a","date":"2026-07-15 17:02:28 -0700","author":"Steve","subject":"data: seed test lead from verification run","body":""},{"hash":"12f92ba","date":"2026-07-15 17:02:18 -0700","author":"Steve","subject":"reno-visualizer: full 4-step wall visualizer prototype","body":"- 4-step flow: room source → pattern picker → canvas render → shop the look email capture\n- 15 real patterns pulled from dw_unified (Brewster + Arte) with live CDN images\n- 4 stock room SVGs (living room, bedroom, dining room, home office) drawn in SVG $0-local\n- Client-side canvas composite render: tile pattern image, mask to wall zone, blend modes,\n  perspective shadow gradient; user can draw custom wall zone via drag\n- /api/render seam endpoint: prototype returns metadata; real engine (ComfyUI/Replicate) swaps in\n- /api/lead POST → data/leads.json; /api/rooms; /api/upload-room (base64 JSON upload)\n- /admin: lead cards with created date+time (toLocaleString, full ISO in title=), sort + density\n- Sort + density slider (localStorage-persisted) on pattern grid\n- Optional BASIC_AUTH + ADMIN_AUTH gating via env vars"},{"hash":"05cf165","date":"2026-07-15 16:53:46 -0700","author":"Steve","subject":"initial scaffold (reno-visualizer) via web-dev accelerator","body":""}]}