{"slug":"sample-box","total":13,"limit":100,"offset":0,"since":null,"commits":[{"hash":"cecac17","date":"2026-07-16 08:50:08 -0700","author":"Steve","subject":"shopify: refresh catalog — keep sample-only as 'by request'","body":""},{"hash":"a52379f","date":"2026-07-16 08:48:40 -0700","author":"steve@designerwallcoverings.com","subject":"Use price_display for swatch grid; surface sample_only badge; no $null rendering","body":""},{"hash":"69305b2","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":"d56008b","date":"2026-07-16 08:12:04 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-16T08:12:03 (1 files) — data/shopify-catalog.json","body":""},{"hash":"c774227","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":"dea3d5d","date":"2026-07-16 07:41:25 -0700","author":"Steve","subject":"shopify: numeric sample variant id for working cart permalink","body":""},{"hash":"f61682e","date":"2026-07-16 07:37:54 -0700","author":"Steve Abrams","subject":"step 5: orders.json — test order from verification run","body":"One test order written during temp-server verification (SB-MRNM49RM,\nSHOPIFY_HOSTED, permalink confirmed correct).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"adc179c","date":"2026-07-16 07:37:45 -0700","author":"Steve Abrams","subject":"step 4: admin.html — show Shopify checkout link on order cards","body":"Each order card with a shopify_permalink now shows a 🔗 Shopify checkout\nlink (opens in new tab). Admin date+time chip (🕓 + full ISO in title=)\nand sort+density rules preserved.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"936c9a8","date":"2026-07-16 07:37:35 -0700","author":"Steve Abrams","subject":"step 3: index.html — real Shopify catalog swatch grid + Shopify-hosted checkout","body":"- Swatch grid now loads from /api/shopify-products (200 real products:\n  title, vendor, image, price) with search box, sort (6 options), and\n  density slider (2-6 cols) — all persisted to localStorage.\n- \"Skip — Browse All\" button bypasses vibe picker.\n- Stripe payment stub removed entirely; replaced with:\n  - TEST-MODE banner explaining Bogus Gateway + PayPal toggle note\n  - \"Proceed to Secure Shopify Checkout\" green CTA button\n  - On click: local order captured first (POST /api/orders), then\n    window.location → https://www.designerwallcoverings.com/cart/<variant>:<qty>\n- Confirmation panel shows local order ID + fallback Shopify link in case\n  auto-redirect is blocked.\n- House rules preserved: sort+density persist to localStorage, vibe filter\n  still works for legacy local products.json vibes.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"931b363","date":"2026-07-16 07:37:18 -0700","author":"Steve Abrams","subject":"step 2: server.js — add Shopify catalog endpoints, Shopify-hosted order capture","body":"New endpoints (read-only, no token):\n- GET /api/catalog-meta  → checkout_domain + sample_variant_id\n- GET /api/shopify-products?sort=&q=  → 200 real products from shopify-catalog.json\n\nPOST /api/orders now records payment_method=SHOPIFY_HOSTED,\npayment_status=pending_shopify, and shopify_permalink=\nhttps://www.designerwallcoverings.com/cart/<sample_variant_id>:<qty>\n\nStripe TEST_STUB references removed from order flow.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"5e7cf3b","date":"2026-07-16 07:37:09 -0700","author":"Steve Abrams","subject":"step 1: copy real Shopify catalog (200 products, checkout_domain, sample_variant_id)","body":"data/shopify-catalog.json pulled read-only from the live DW store.\nNo token stored in the app — static file only.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"ac3f15d","date":"2026-07-15 17:02:13 -0700","author":"Steve","subject":"sample-box v1: vibe-picker funnel + swatch grid + TEST checkout + admin dashboard","body":"- 6-vibe picker (Modern/Traditional/Floral/Grasscloth/Bold Color/Geometric)\n- /api/products filtered by vibe with server-side sort + density slider (localStorage-persisted)\n- /api/orders: POST places test order to data/orders.json with credit note\n- Stripe STUBBED (TEST_STUB, payment_stub:true) — wire with STRIPE_SECRET_KEY + checkout.sessions.create()\n- Admin /admin: order cards with HARD RULE created date+time (toLocaleString), sort+density, stats bar\n- BASIC_AUTH gates /admin + /api/admin/* only; public funnel stays open\n- 20 real DW products from dw_unified (ACTIVE, tagged by style vibe) + 2 seeds\n- $15 box price, credited to first roll order (ref: SB-<id>)"},{"hash":"6cfcf4e","date":"2026-07-15 16:53:28 -0700","author":"Steve","subject":"initial scaffold (sample-box) via web-dev accelerator","body":""}]}