{"slug":"dw-launches","total":29,"limit":100,"offset":0,"since":null,"commits":[{"hash":"763635b","date":"2026-06-22 17:13:54 -0700","author":"Steve","subject":"dw-launches: pass through Norma's real publish reason (token-expired / no-creds) instead of stale hardcoded 'code not enabled' string","body":""},{"hash":"60312c9","date":"2026-06-22 13:36:44 -0700","author":"Steve Abrams","subject":"auto-save: 2026-06-22T13:36:34 (1 files) — data/launches.json","body":""},{"hash":"0f1394b","date":"2026-06-22 13:19:56 -0700","author":"Steve","subject":"dw-launches: honest publish copy — Publish Now is live to connected channels (not 'simulated'); inbox/metrics stay labeled local sample data","body":""},{"hash":"3e7b50c","date":"2026-06-22 10:05:23 -0700","author":"Steve Abrams","subject":"auto-save: 2026-06-22T10:05:12 (1 files) — data/launches.json","body":""},{"hash":"b821953","date":"2026-06-20 11:31:59 -0700","author":"SteveStudio2","subject":"dw-launches: route Instagram Publish Now through Norma instagram-agent (:9810), honest live/simulated reporting","body":""},{"hash":"4b5d8af","date":"2026-06-20 11:24:57 -0700","author":"SteveStudio2","subject":"dw-launches: remove sign-off gate, single Publish Now button; live dispatch path (honest no-creds state)","body":""},{"hash":"4782ead","date":"2026-06-20 11:19:46 -0700","author":"Steve","subject":"Media: content-hash (md5) dedup — collapse byte-identical colorway reuploads, keep distinct photos, aggregate colorways onto surviving tile (Zoffany 303->151)","body":""},{"hash":"7533052","date":"2026-06-20 10:44:47 -0700","author":"Steve","subject":"Media: dedup is now a toggle (Show: All colorways [default] / Unique patterns), persisted","body":""},{"hash":"142baf6","date":"2026-06-20 10:42:23 -0700","author":"Steve","subject":"Media: dedup grid — collapse colorway/reupload duplicates to one tile per pattern (Zoffany 303 SKUs -> 18 patterns)","body":""},{"hash":"b268328","date":"2026-06-20 09:43:47 -0700","author":"Steve","subject":"Media: ?media=<query> deep-link opens Vendor IG tab pre-filtered (e.g. /?media=zoffany)","body":""},{"hash":"f3da271","date":"2026-06-20 09:41:45 -0700","author":"Steve","subject":"Vendor-IG: corrected Pierre Frey (lamaisonpierrefrey) + Zoffany (zoffanyfw) handles — 19 houses/214 posts","body":""},{"hash":"51a9575","date":"2026-06-20 09:23:02 -0700","author":"Steve","subject":"Vendor-IG: in-session screenshot capture (DTD verdict B) — +8 houses/96 imgs, now 17 houses/190 posts","body":""},{"hash":"18fb32f","date":"2026-06-20 09:14:31 -0700","author":"Steve","subject":"Vendor-IG: multi-mirror scraper (picuki/picnob/pixwox); keep only cacheable-image posts (picnob URLs ephemeral)","body":""},{"hash":"5d0e46a","date":"2026-06-19 16:06:12 -0700","author":"Steve","subject":"Compose deep-link: accept ?compose/title/img/link/vendor to pre-load a launch from a product (CNCP new-SKU → DW marketing on-ramp); guard so deep-link wins over saved-view restore","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"94376a2","date":"2026-06-19 15:50:18 -0700","author":"Steve","subject":"Vendor-IG: corrected handles (arte=artewalls, cole&son, thibaut_1886, zoffanyofficial) — 94 imgs/9 houses","body":""},{"hash":"aef6a11","date":"2026-06-19 15:43:46 -0700","author":"Steve","subject":"Vendor-IG: fix double-proxy so cached IG images paint (60/60); preview local refs in compose strip","body":""},{"hash":"626db0f","date":"2026-06-19 15:40:32 -0700","author":"Steve","subject":"Vendor-IG: Browserbase+Picuki ingest live — 73 real IG images cached across 7 houses","body":""},{"hash":"29df203","date":"2026-06-19 15:30:23 -0700","author":"Steve","subject":"Media Library: vendor-IG store + ingest (Graph/permalink), repost/use flow, image proxy+cache","body":""},{"hash":"b51421c","date":"2026-06-19 14:16:59 -0700","author":"Steve","subject":"Add unified Inbox (Hootsuite parity): triage all mentions/comments/DMs across accounts in one feed, filter chips with counts, per-account filter, inline reply + Open-in-Compose + mark-read, unread pill + persisted read/replied state; banned-word gate enforced on replies; simulated/local-only","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"e5a2c9b","date":"2026-06-19 14:10:52 -0700","author":"Steve","subject":"Streams → true Hootsuite model: user-addable columns (account × stream type incl. inbound mentions/comments/DMs/home/search), drag-reorder, add/remove, simulated inbound feed; plus 'all their items' pack — AI caption, hashtags, best-time, link-shorten, Bulk composer, simulated Analytics view","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"4a5e3f7","date":"2026-06-19 14:08:02 -0700","author":"Steve","subject":"Media Library: attach real assets (Shopify 139k + our IG + vendor) into composer","body":""},{"hash":"bd7e300","date":"2026-06-19 10:34:51 -0700","author":"SteveStudio2","subject":"README: document command-center suite (views, density sliders, modal-rig)","body":""},{"hash":"a2037e7","date":"2026-06-19 10:34:28 -0700","author":"SteveStudio2","subject":"command-center suite: view switcher (Dashboard/Compose/Streams/Calendar/Drafts/Approvals), density sliders, Hootsuite-style streams board, dashboard landing, approvals queue, launches open as modal-rig movable modals; preserves all compose logic + gates","body":""},{"hash":"c49590a","date":"2026-06-19 10:34:28 -0700","author":"SteveStudio2","subject":"server: add /api/streams (per-channel segmented board) + /api/dashboard (overview counts)","body":""},{"hash":"8db4dc5","date":"2026-06-19 10:34:28 -0700","author":"SteveStudio2","subject":"add modal-rig.js drop-in (vanilla drag/resize/maximize/persist)","body":""},{"hash":"b3d1a74","date":"2026-06-19 10:26:17 -0700","author":"Steve","subject":"Design refinement: DW luxury editorial theme for social composer","body":"- Wordmark: serif 22px with restrained tracking, gold dot, eyebrow label above\n- Palette: eliminated neon green accent; all interactive states now use muted gold/gold-dim\n- Channel chips: replaced full candy-fill avatar circles with 8px brand-color dots + subtle pill styling\n- Section headers: replaced ALL-CAPS bureaucratic h3 gold labels with serif .sl-title + numeric step badge\n- Topbar nav: lighter weight, bottom-border active indicator vs old box border\n- Buttons: differentiated hierarchy — ghost (Save), gold-border (Submit), italic (Steve sign-off), solid gold (Publish), suppressed-panel (Publish/disabled)\n- Preview panel: device-chrome wrapper with shadow; preview card uses clean white with DW-warm bg tone\n- Spacing: consistent scale (--sp-* tokens), tighter card gap 14px, wrap padding 28px\n- Preview column: position:sticky so it follows scroll\n- Media items: remove button appears on hover only (cleaner resting state)\n- Inputs/selects: gold focus ring, custom select arrow, uniform border-radius\n- Badges: bordered style with status-tinted backgrounds replacing plain filled pills\n- Toast: entrance animation, box-shadow elevation\n- All JS IDs/classes, fetch calls, and behavioral logic unchanged"},{"hash":"6df89ad","date":"2026-06-19 10:10:41 -0700","author":"SteveStudio2","subject":"add README with run instructions, component map, and stub list","body":""},{"hash":"c34d2b6","date":"2026-06-19 10:10:19 -0700","author":"SteveStudio2","subject":"verified working: all 9 components serve, gates enforce, headless smoke passes 0 errors","body":""},{"hash":"8d661a4","date":"2026-06-19 10:08:21 -0700","author":"SteveStudio2","subject":"initial scaffold: dw-launches multi-channel social composer (server + SPA + 7-channel seed)","body":""}]}