Dw Marketing Reels
Search the build
-
794f9d32026-09-26 auto-data-snapshot: 2026-09-26T07:18:02 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
df87ba02026-09-25 auto-data-snapshot: 2026-09-25T07:42:43 (1 data files) — data/reels.json -
86a6ab32026-09-25 auto-data-snapshot: 2026-09-25T07:12:13 (2 data files) — data/new-arrivals.json data/video-suggestions.json -
63dc8112026-09-24 auto-data-snapshot: 2026-09-24T07:37:57 (2 data files) — data/new-arrivals.json data/reels.json -
926295d2026-09-24 auto-data-snapshot: 2026-09-24T07:06:26 (1 data files) — data/video-suggestions.json -
ee925af2026-09-23 auto-data-snapshot: 2026-09-23T07:25:20 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
bfae37c2026-09-22 Reel publish path: durable jewelry-counter HOLD gate (TK-12012) -
b26c6e32026-09-22 auto-data-snapshot: 2026-09-22T09:54:34 (2 data files) — data/new-arrivals.json data/video-suggestions.json -
edb71192026-09-21 auto-data-snapshot: 2026-09-21T20:34:48 (1 data files) — data/reels.json -
3a279642026-09-21 auto-data-snapshot: 2026-09-21T17:27:28 (1 data files) — data/reels.json -
aa9405d2026-09-21 auto-data-snapshot: 2026-09-21T14:14:31 (1 data files) — data/reels.json -
cef51092026-09-21 auto-data-snapshot: 2026-09-21T11:31:47 (1 data files) — data/reels.json -
bf730452026-09-21 auto-data-snapshot: 2026-09-21T07:12:32 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
87825fe2026-09-20 auto-data-snapshot: 2026-09-20T07:15:24 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
2f9e4f32026-09-19 auto-data-snapshot: 2026-09-19T07:20:19 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
80feb0e2026-09-18 auto-data-snapshot: 2026-09-18T07:17:32 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
c8d821b2026-09-17 auto-data-snapshot: 2026-09-17T07:12:37 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
e262e152026-09-16 auto-data-snapshot: 2026-09-16T14:34:47 (1 data files) — data/reels.json -
5ca3af82026-09-16 TK-10929: report the real IG publish error instead of a hardcoded 2207076 diagnosis -
59d297d2026-09-16 auto-data-snapshot: 2026-09-16T11:14:29 (1 data files) — data/reels.json -
6f7ec8d2026-09-16 auto-data-snapshot: 2026-09-16T07:20:09 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
bca0ea32026-09-15 auto-data-snapshot: 2026-09-15T20:11:00 (1 data files) — data/reels.json -
aeb579e2026-09-15 auto-data-snapshot: 2026-09-15T17:25:31 (1 data files) — data/reels.json -
3c5fc642026-09-15 auto-data-snapshot: 2026-09-15T14:13:07 (1 data files) — data/reels.json -
3e906762026-09-15 auto-data-snapshot: 2026-09-15T11:25:48 (1 data files) — data/reels.json -
5d2875d2026-09-15 auto-data-snapshot: 2026-09-15T07:41:08 (1 data files) — data/reels.json -
160f39e2026-09-15 auto-data-snapshot: 2026-09-15T07:09:15 (2 data files) — data/new-arrivals.json data/video-suggestions.json -
75b25e02026-09-14 auto-data-snapshot: 2026-09-14T20:30:10 (1 data files) — data/reels.json -
d2cfd812026-09-14 auto-data-snapshot: 2026-09-14T17:18:57 (1 data files) — data/reels.json -
9adfbeb2026-09-14 auto-data-snapshot: 2026-09-14T14:36:24 (1 data files) — data/reels.json -
69a74ce2026-09-14 auto-data-snapshot: 2026-09-14T11:19:45 (1 data files) — data/reels.json -
b064cc92026-09-14 auto-data-snapshot: 2026-09-14T07:18:26 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d83b43c2026-09-13 auto-data-snapshot: 2026-09-13T07:34:50 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
71efd852026-09-12 auto-data-snapshot: 2026-09-12T07:18:58 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
13c8ae42026-09-11 auto-data-snapshot: 2026-09-11T07:43:45 (1 data files) — data/reels.json -
14482912026-09-11 auto-data-snapshot: 2026-09-11T07:11:09 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
abf75622026-09-10 TK-10866: record 2-method verification that all 13 jewelry-creative reels are gone -
898fb5d2026-09-10 auto-data-snapshot: 2026-09-10T07:33:05 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
0dbf7652026-09-09 auto-data-snapshot: 2026-09-09T07:22:07 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d7e6aaa2026-09-08 auto-data-snapshot: 2026-09-08T07:45:26 (2 data files) — data/new-arrivals.json data/reels.json -
84d581c2026-09-08 auto-data-snapshot: 2026-09-08T07:07:04 (1 data files) — data/video-suggestions.json -
a2280c72026-09-07 auto-data-snapshot: 2026-09-07T07:30:29 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
8cfbff32026-09-06 auto-data-snapshot: 2026-09-06T07:47:41 (1 data files) — data/reels.json -
4e1e6ca2026-09-06 auto-data-snapshot: 2026-09-06T07:09:19 (2 data files) — data/new-arrivals.json data/video-suggestions.json -
7f0f2602026-09-05 auto-data-snapshot: 2026-09-05T07:30:17 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
a80a4b22026-09-04 snapshot before deploy: graduate-flipbook work-in-progress (not authored here) -
f829c3c2026-09-04 auto-data-snapshot: 2026-09-04T07:10:31 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
93000902026-09-03 auto-data-snapshot: 2026-09-03T15:45:08 (2 data files) — storefront/staged-tk10427/ROLLBACK-index-20260903-152741.json storefront/staged-tk10427/index.NEW-20260903-152741.json -
f637f7d2026-09-03 TK-10427: codex-review hardening — drop tag:section (no nested <section> inside Shopify wrapper), add post-merge index.json integrity check (every order id resolves, JSON re-parses) -
ec5eff32026-09-03 TK-10427: add OS 2.0 section file + rollback-first one-command homepage push -
eeb5b352026-09-03 auto-data-snapshot: 2026-09-03T11:10:51 (2 data files) — storefront/graduate-interactive/ROLLBACK-dw-collection-hero-20260903-111103.json storefront/graduate-interactive/ROLLBACK-dw-collection-hero-20260903-111144.json -
61d07712026-09-03 auto-data-snapshot: 2026-09-03T10:32:28 (1 data files) — public/collections/graduate-flipbook/graduate-narration.m4a -
7af26f82026-09-03 auto-data-snapshot: 2026-09-03T07:17:12 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
675eacc2026-09-02 reels: drop @philipperomano aspirational placeholder (dup of active @philliperomanodesigns) -
aca98b52026-09-02 auto-data-snapshot: 2026-09-02T07:10:19 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
58acd0e2026-09-01 TK-11086: kill novasuede auto-posting to DW network — exclude Novasuede from nightly new-arrivals reel feed + disarm novasuede-color-post wrapper -
5b230292026-09-01 auto-data-snapshot: 2026-09-01T07:13:20 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
5b2c0d32026-08-31 TK-10427: stage all-3 Collection Films (Majilite smart-collection create cmd + 3-card paste), gated -
3f14cc32026-08-31 TK-10427: stage 2-card Collection Films ship artifacts (Path A push script + Path B paste snippet) -
20b07bf2026-08-31 auto-data-snapshot: 2026-08-31T07:38:15 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
7db71522026-08-31 offload regenerable media dirs to Henry NAS (TK-10902); ignore output dirs -
e1c1a202026-08-30 auto-data-snapshot: 2026-08-30T07:15:22 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
fab60172026-08-29 publish reel media before Instagram handoff -
78de2e02026-08-29 auto-data-snapshot: 2026-08-29T14:38:58 (1 data files) — data/reels.json -
d3c89a62026-08-29 snapshot before fixing reel publish order -
36f458d2026-08-29 auto-data-snapshot: 2026-08-29T13:24:48 (2 data files) — data/new-arrivals.json data/reels.json -
e3e42f62026-08-29 auto-data-snapshot: 2026-08-29T11:33:46 (1 data files) — data/reels.json -
5c63a992026-08-29 auto-data-snapshot: 2026-08-29T10:19:53 (2 data files) — data/new-arrivals.json data/reels.json -
25111d12026-08-29 auto-data-snapshot: 2026-08-29T07:15:37 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
c32a5402026-08-28 auto-data-snapshot: 2026-08-28T20:44:41 (1 data files) — data/reels.json -
dac3ecd2026-08-28 auto-data-snapshot: 2026-08-28T17:39:54 (1 data files) — data/reels.json -
84515222026-08-28 auto-data-snapshot: 2026-08-28T14:34:59 (1 data files) — data/reels.json -
3d7dade2026-08-28 auto-data-snapshot: 2026-08-28T11:30:23 (1 data files) — data/reels.json -
13908e42026-08-28 auto-data-snapshot: 2026-08-28T07:45:44 (1 data files) — data/reels.json -
e6e00682026-08-28 auto-data-snapshot: 2026-08-28T07:08:13 (2 data files) — data/new-arrivals.json data/video-suggestions.json -
be44d562026-08-27 auto-data-snapshot: 2026-08-27T20:38:24 (1 data files) — data/reels.json -
2718c822026-08-27 auto-data-snapshot: 2026-08-27T17:33:56 (1 data files) — data/reels.json -
b76e4fe2026-08-27 auto-data-snapshot: 2026-08-27T14:29:15 (1 data files) — data/reels.json -
0f45dfe2026-08-27 auto-data-snapshot: 2026-08-27T11:24:00 (1 data files) — data/reels.json -
4d8acc22026-08-27 auto-data-snapshot: 2026-08-27T07:42:31 (2 data files) — data/new-arrivals.json data/reels.json -
2fe75232026-08-27 auto-data-snapshot: 2026-08-27T07:06:07 (1 data files) — data/video-suggestions.json -
d7e8e412026-08-26 auto-data-snapshot: 2026-08-26T20:44:26 (1 data files) — data/reels.json -
9269c6e2026-08-26 auto-data-snapshot: 2026-08-26T17:42:06 (1 data files) — data/reels.json -
1fcc5bc2026-08-26 auto-data-snapshot: 2026-08-26T14:39:25 (1 data files) — data/reels.json -
b914f092026-08-26 TK-10866: complete deletion manifest — all 37 colors resolved to 13 reels via git-history permalink recovery -
69910ec2026-08-26 TK-10866: stage Novasuede jewelry-reel deletion target manifest (5 known reels + 24 unknown colors to harvest) -
aa363eb2026-08-26 auto-data-snapshot: 2026-08-26T11:30:17 (1 data files) — data/reels.json -
c0c76ea2026-08-26 Add glitter_walls_design as a tracked (non-postable) IG source on marketing.dw -
9de1fc92026-08-26 Reel Studio: render a single photo + song → mp4 (Composer handoff target) -
99c71a82026-08-26 novasuede color post (TK-10866): drop designerwallcoverings from rotation + swap jewelry creative for SKU-labeled product swatch -
5e4c9542026-08-26 auto-data-snapshot: 2026-08-26T08:21:31 (2 data files) — data/novasuede-sku-map.json package-lock.json -
e170f192026-08-26 chore: bump v0.9.3 (session close — TK-10447 IG roster verify + publish guard) -
81cc78d2026-08-26 auto-data-snapshot: 2026-08-26T07:44:57 (2 data files) — data/new-arrivals.json data/reels.json -
2ce57202026-08-26 auto-data-snapshot: 2026-08-26T07:08:04 (1 data files) — data/video-suggestions.json -
c7a48e32026-08-25 auto-data-snapshot: 2026-08-25T20:42:55 (1 data files) — data/reels.json -
9b8ae102026-08-25 auto-data-snapshot: 2026-08-25T17:39:55 (1 data files) — data/reels.json -
c396f4b2026-08-25 publish-ig.mjs: refuse non-postable accounts at the resolver with a clear reason (TK-10447) -
0537a8a2026-08-25 auto-data-snapshot: 2026-08-25T14:34:54 (1 data files) — data/reels.json -
099834d2026-08-25 reels IG roster: demote unreachable @grassclothwallpaper to needs-relink (TK-10447) -
71d633f2026-08-25 chore: reels.json sync + version bump (session close: IG accounts wired + deployed) -
1e978842026-08-25 5x: verify accounts console clean twice (35 ready/5 pending); report -
69537a32026-08-25 chore: harden /api/youtube (escapeAttr href, strict video-id regex), v0.9.1 (session close) -
b778dff2026-08-25 publish-ig.mjs: resolve per-account ig_user_id (--account / reel.igAccount) on the shared token; DRY-gate unchanged -
5363df32026-08-25 Wire all 35 postable IG accounts as ready in reels console (shared durable META token; no per-account creds) -
276feb42026-08-25 reels UI: Post to YouTube button on each studio video chip -
21654102026-08-25 reels: prune 3 dead 2026-07-13 entries whose mp4s never rendered (kills gallery 404s) -
bc840292026-08-25 Embed all 35 DW-owned IG accounts in the Reels console (list + publish dropdown) -
973621a2026-08-25 reels: credential-safe fetch guard so Suggested videos loads when opened with creds-in-URL -
1dffe682026-08-25 auto-data-snapshot: 2026-08-25T07:39:06 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
398c0792026-08-24 auto-data-snapshot: 2026-08-24T20:43:45 (1 data files) — data/reels.json -
aa47c212026-08-24 auto-data-snapshot: 2026-08-24T17:32:43 (1 data files) — data/reels.json -
fbce1f42026-08-24 auto-data-snapshot: 2026-08-24T14:29:57 (1 data files) — data/reels.json -
bbc5dd82026-08-24 auto-data-snapshot: 2026-08-24T11:12:29 (1 data files) — data/reels.json -
bf333122026-08-24 auto-data-snapshot: 2026-08-24T07:26:56 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
cd415142026-08-23 auto-data-snapshot: 2026-08-23T11:14:30 (1 data files) — data/reels.json -
4baaa0c2026-08-23 auto-data-snapshot: 2026-08-23T07:31:56 (1 data files) — data/video-suggestions.json -
435e04c2026-08-22 auto-data-snapshot: 2026-08-22T20:21:39 (1 data files) — data/reels.json -
95fcd4e2026-08-22 auto-data-snapshot: 2026-08-22T17:10:07 (1 data files) — data/reels.json -
e3629c32026-08-22 auto-data-snapshot: 2026-08-22T14:31:07 (1 data files) — data/reels.json -
b1853252026-08-22 auto-data-snapshot: 2026-08-22T11:19:22 (1 data files) — data/reels.json -
57e60652026-08-22 auto-data-snapshot: 2026-08-22T07:36:43 (2 data files) — data/new-arrivals.json data/reels.json -
c09f4682026-08-22 auto-data-snapshot: 2026-08-22T07:04:52 (1 data files) — data/video-suggestions.json -
09af9aa2026-08-21 auto-data-snapshot: 2026-08-21T20:26:15 (1 data files) — data/reels.json -
7b8b1652026-08-21 auto-data-snapshot: 2026-08-21T17:15:45 (1 data files) — data/reels.json -
bc4e2b32026-08-21 auto-data-snapshot: 2026-08-21T14:36:52 (1 data files) — data/reels.json -
c15a0a32026-08-21 auto-data-snapshot: 2026-08-21T11:24:34 (1 data files) — data/reels.json -
8a3c1622026-08-21 auto-data-snapshot: 2026-08-21T07:42:04 (1 data files) — data/reels.json -
1c2c3c02026-08-21 auto-data-snapshot: 2026-08-21T07:10:15 (2 data files) — data/new-arrivals.json data/video-suggestions.json -
2ee73842026-08-20 auto-data-snapshot: 2026-08-20T20:32:50 (1 data files) — data/reels.json -
f99c8f42026-08-20 auto-data-snapshot: 2026-08-20T17:19:08 (1 data files) — data/reels.json -
fea33652026-08-20 auto-data-snapshot: 2026-08-20T14:39:47 (1 data files) — data/reels.json -
e1cc35f2026-08-20 auto-data-snapshot: 2026-08-20T11:21:15 (1 data files) — data/reels.json -
61ec24a2026-08-20 auto-data-snapshot: 2026-08-20T07:27:40 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
f4f6f9f2026-08-19 auto-data-snapshot: 2026-08-19T20:35:06 (1 data files) — data/reels.json -
a254c562026-08-19 auto-data-snapshot: 2026-08-19T17:18:59 (1 data files) — data/reels.json -
68ee7362026-08-19 auto-data-snapshot: 2026-08-19T14:34:38 (1 data files) — data/reels.json -
07aa1f32026-08-19 auto-data-snapshot: 2026-08-19T11:14:55 (1 data files) — data/reels.json -
b31260e2026-08-19 auto-data-snapshot: 2026-08-19T07:27:42 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
1f3cc992026-08-18 auto-data-snapshot: 2026-08-18T11:17:58 (1 data files) — data/reels.json -
e6a15d22026-08-18 auto-data-snapshot: 2026-08-18T07:39:56 (2 data files) — data/new-arrivals.json data/reels.json -
3555a6e2026-08-18 auto-data-snapshot: 2026-08-18T07:09:42 (1 data files) — data/video-suggestions.json -
6cbe5222026-08-17 auto-data-snapshot: 2026-08-17T11:27:07 (1 data files) — data/reels.json -
22ed7002026-08-17 auto-data-snapshot: 2026-08-17T07:32:48 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
8d294232026-08-16 auto-data-snapshot: 2026-08-16T14:28:13 (1 data files) — data/reels.json -
b60b9122026-08-16 auto-data-snapshot: 2026-08-16T11:25:44 (1 data files) — data/reels.json -
060827b2026-08-16 auto-data-snapshot: 2026-08-16T07:22:50 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
174c5192026-08-15 auto-data-snapshot: 2026-08-15T11:15:20 (1 data files) — data/reels.json -
c9912592026-08-15 auto-data-snapshot: 2026-08-15T07:11:28 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
21715492026-08-14 auto-data-snapshot: 2026-08-14T11:23:02 (1 data files) — data/reels.json -
db27c1b2026-08-14 auto-data-snapshot: 2026-08-14T09:20:46 (1 data files) — data/novasuede-post-state.json -
c11367d2026-08-14 auto-data-snapshot: 2026-08-14T07:18:58 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
423d2ca2026-08-13 chore: lint, refactor, v0.9.0 (session close) — commercial flip-book logos/1.3s/narration -
94e00f52026-08-13 commercial flip-book: remove per-page logos + 1.3s/flip + gap-free narration; rerender/redeploy (?v=4) -
854502c2026-08-13 commercial flip-book: 2s/flip + narration synced over each pattern; rerender+redeploy (?v=3) -
293b9952026-08-13 commercial flip-book: add vendor logo per page + fix intro/Koroseal VO overlap (cover=7) + rerender/redeploy -
b043fd12026-08-13 auto-data-snapshot: 2026-08-13T11:25:20 (11 data files) — data/commercial-collection.json data/reels.json flipbooks/commercial-collection/assets/logos/carnegie.png flipbooks/commercial-collection/assets/logos/designtex.png flipbooks/commercial-collection/assets/logos/hollywood.png -
f1edf792026-08-13 auto-data-snapshot: 2026-08-13T07:20:35 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
978ef0c2026-08-12 auto-data-snapshot: 2026-08-12T12:29:13 (2 data files) — public/collections/commercial-collection-banner.jpg public/collections/commercial-collection-poster.jpg -
54152e72026-08-12 Add commercial-collection flip-book (24 products, 8 vendors, Steve VO) -
05271fe2026-08-12 auto-data-snapshot: 2026-08-12T11:58:35 (3 data files) — data/commercial-collection.json flipbooks/commercial-collection/audio.json flipbooks/commercial-collection/lines.txt -
19b0eea2026-08-12 auto-data-snapshot: 2026-08-12T11:28:02 (1 data files) — data/reels.json -
dc0d3b72026-08-12 auto-data-snapshot: 2026-08-12T09:25:42 (1 data files) — data/novasuede-post-state.json -
58e65092026-08-12 auto-data-snapshot: 2026-08-12T07:20:53 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
c4022db2026-08-11 auto-data-snapshot: 2026-08-11T17:27:46 (15 data files) — spotlight-work/tmp-swatch/majilite-attache-rose-gold.png spotlight-work/tmp-swatch/majilite-burnished-metal-mercury.png spotlight-work/tmp-swatch/majilite-charm-antique-gold.png spotlight-work/tmp-swatch/majilite-charm-metallic-taupe.png spotlight-work/tmp-swatch/majilite-eclipse-fx-metallic-taupe.png -
f21cf402026-08-11 auto-data-snapshot: 2026-08-11T11:14:15 (1 data files) — data/reels.json -
5be46a42026-08-11 chore: refactor (env-var alert routing), v0.8.8 (session close) -
15c63862026-08-11 TK-10395: delayed re-queue — re-attempt a Meta-2207076-failed reel on later slots (bounded 4x, double-post-safe, give-up alert at cap) -
176622f2026-08-11 auto-data-snapshot: 2026-08-11T07:35:48 (2 data files) — data/new-arrivals.json data/reels.json -
c4626172026-08-11 TK-10395 REOPEN: run publish-gate+alert BEFORE the push (a full Kamatera hung the push and swallowed the 07:10 alert); bound rsync with timeout; exit non-zero last -
9ab766d2026-08-11 auto-data-snapshot: 2026-08-11T07:04:50 (1 data files) — data/video-suggestions.json -
886d6f62026-08-10 reels: drop @novasuede from rotation — not Steve's IG handle -
0c4948f2026-08-10 chore: version bump (session close) -
92cd2da2026-08-10 reels: novasuede 3x/week schedule infra (cron wrapper + launchd plist, RunAtLoad=false, not installed) -
d1fa7d72026-08-10 auto-data-snapshot: 2026-08-10T19:14:48 (1 data files) — deploy/com.steve.novasuede-color-post.plist -
eeb1f092026-08-10 auto-data-snapshot: 2026-08-10T18:13:07 (1 data files) — data/novasuede-post-state.json -
57ef0212026-08-10 auto-data-snapshot: 2026-08-10T17:42:11 (1 data files) — data/novasuede-post-state.json -
951f9962026-08-10 reels: novasuede-run-all.mjs — 3 new colours per account, fan to all suggested accounts -
16519462026-08-10 auto-data-snapshot: 2026-08-10T17:11:22 (1 data files) — data/novasuede-post-state.json -
d7e908b2026-08-10 reels: novasuede 'new colour 3x/week' generator + account rotation (jewelry + music) -
ae7b91d2026-08-10 reels: build-novasuede.mjs — 15s Novasuede color-story reel -
bba1c992026-08-10 chore: version bump (session close) -
93b29642026-08-10 chore: storefront grid auto-fit, v0.8.5 (session close) -
579a1a72026-08-10 Collection Films: fix dead Shop CTAs to vendor-collection routes, hold Majilite (no live collection), a11y play button, auto-fit grid -
f1f111b2026-08-10 Storefront Collection Films: 3 cards (Maya Romanoff + Glitter Walls + Majilite) -
4680a242026-08-10 Glitter Walls portrait IG cut -
9c2e6702026-08-10 Glitter Walls flip book (color story, 24 SKUs, walls&furniture renders) + marketing.dw page -
1cda4a22026-08-10 Storefront: DW Collection Films custom-liquid section (flip books for DW Shopify homepage) -
18712752026-08-10 reels: Majilite jewelry-case image pipeline + spotlight reel + alt tags -
03e14be2026-08-10 Maya Romanoff flip book (materials story, 24 SKUs, 4 chapters) + walls&furniture renders + portrait IG cut + marketing.dw page -
8c7ac9c2026-08-10 Majilite flip book: fix Shop CTA to working vendor-filter collection URL -
4807b5b2026-08-10 chore: sync package-lock version (session close) -
5e6973b2026-08-10 chore: wire sync-reels predeploy hook + version bump (session close) -
1d80d732026-08-10 Add sync-reels predeploy guard: auto-refresh reels/ from freshest render before deploy (fixes stale-embed desync) -
305a06c2026-08-10 Majilite flip book: real Replicate commercial rooms on verso (24 rooms, flux-kontext-pro, ~$0.96) -
105bde32026-08-10 Majilite flip book: real walls+furniture room renders in verso (24x nano-banana) -
692459d2026-08-10 reels: 15/30s runtime + open on a product image (no blank IG index thumbnail) -
c2672a42026-08-10 Fix Majilite flip book Shop CTA -> /collections/all/majilite (vendor tag view; /collections/majilite 404s) -
877778e2026-08-10 Majilite Metallics flip book (colorway story, 24 SKUs, 4 metal-tone chapters) + marketing.dw page -
386055f2026-08-10 auto-data-snapshot: 2026-08-10T11:29:10 (2 data files) — data/new-arrivals.json data/reels.json -
060af892026-08-10 TK-10395: monitor fails loud on armed 'posted-unverified' (was silent-green) -
da29f0a2026-08-10 TK-10395: wire push-alert (CNCP card + George email to steve-office) on nightly IG-publish failure [Steve APPROVED: PUSH OPEN] -
7ad29bf2026-08-10 TK-10395: fix retry/timeout race (client 90s->240s) + wire publish-result gate into nightly cron (contrarian finds) -
d52056c2026-08-10 TK-10395: add read-only publish-status monitor (catches 2207076 recurrence after retry, closes silent-green gap) -
50543e22026-08-10 TK-10395: surface Norma's real IG-publish error instead of a bare 'error' -
db2c6442026-08-10 auto-data-snapshot: 2026-08-10T07:21:36 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
250015b2026-08-09 TK-10389: add nightly reels-pipeline launchd plist (cron-run.sh @07:10) — install gated to Steve -
97c644c2026-08-09 auto-data-snapshot: 2026-08-09T07:12:34 (1 data files) — data/video-suggestions.json -
9bd4b072026-08-08 auto-data-snapshot: 2026-08-08T07:24:16 (1 data files) — data/video-suggestions.json -
134fc692026-08-07 auto-data-snapshot: 2026-08-07T07:29:27 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
969a8a82026-08-06 auto-save: 2026-08-06T07:19:35 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
25326872026-08-05 auto-save: 2026-08-05T07:40:04 (2 files) — data/new-arrivals.json data/reels.json -
9fc4c0f2026-08-05 auto-save: 2026-08-05T07:09:54 (1 files) — data/video-suggestions.json -
6a683532026-08-04 auto-save: 2026-08-04T16:35:00 (1 files) — flipbooks/franquemont-london-reel/ -
a02cf7a2026-08-04 auto-save: 2026-08-04T16:04:49 (6 files) — server.js data/fetch-collection-products.mjs data/franquemont-london.json flipbooks/franquemont-london/ public/collections/franquemont-london-poster.jpg -
c5c736e2026-08-04 auto-save: 2026-08-04T15:04:21 (3 files) — flipbooks/innovations-usa/audio.json flipbooks/innovations-usa/index.html flipbooks/innovations-usa/lines.txt -
830d92d2026-08-04 auto-save: 2026-08-04T14:34:11 (1 files) — flipbooks/innovations-usa/lines.txt -
ca1162d2026-08-04 auto-save: 2026-08-04T14:04:01 (3 files) — flipbooks/innovations-usa/audio.json flipbooks/innovations-usa/index.html flipbooks/innovations-usa/lines.txt -
992c7692026-08-04 auto-save: 2026-08-04T13:33:48 (6 files) — server.js data/fetch-innovations-recent.mjs data/innovations-usa.json flipbooks/innovations-usa/ public/collections/innovations-usa-poster.jpg -
792dc262026-08-04 auto-save: 2026-08-04T07:31:10 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d02f5472026-08-03 auto-save: 2026-08-03T07:21:35 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
8d34fed2026-08-02 auto-save: 2026-08-02T07:13:15 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
1b6ec562026-08-01 auto-save: 2026-08-01T07:34:56 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
c6001f72026-07-31 auto-save: 2026-07-31T07:25:03 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
e2a57192026-07-30 chore: gitignore *.bak + untrack stray graduate-collection.html.bak -
bda7ca92026-07-30 auto-save: 2026-07-30T14:18:43 (2 files) — public/collections/graduate-collection.html public/collections/graduate-collection.html.bak -
b5e457e2026-07-30 auto-save: 2026-07-30T13:48:32 (3 files) — theme-edits/graduate/dw-collection-hero.20260730-134622.BACKUP.liquid theme-edits/graduate/dw-collection-hero.FIXED.liquid theme-edits/graduate/dw-collection-hero.LIVE.liquid -
3aafc8c2026-07-30 auto-save: 2026-07-30T13:18:21 (1 files) — flipbooks/graduate-collection/index.html -
5cc7a272026-07-30 auto-save: 2026-07-30T12:48:10 (1 files) — package-lock.json -
649c3a22026-07-30 chore: v0.8.3 (session close) -
39964652026-07-30 Graduate Collection: LinkedIn (personal + business) + YouTube post drafts -
904e5cb2026-07-30 Graduate flipbook player: speed-only bottom-left, social icons as static bottom-right video overlay (marketing.dw + Shopify) -
dea37712026-07-30 auto-save: 2026-07-30T12:17:59 (1 files) — public/collections/graduate-collection.html -
f62526c2026-07-30 Graduate flipbook: bottom-left speed+volume sliders + download/social-share icons (marketing.dw + Shopify theme) -
d6bc7a12026-07-30 Graduate flipbook: slow another 50% (124s) -
c1e6f342026-07-30 record: pre-edit backup of live theme dw-collection-hero.liquid (Graduate flipbook inject) -
839a7442026-07-30 Graduate flipbook: combined all-clean set (55 patterns, both vendor tags), 86s -
1b2b7e22026-07-30 Graduate flipbook: remove cheetah (21 patterns) + half-speed (48s) -
892ea6d2026-07-30 chore: untrack regenerable flipbook artifacts + version bump (session close) -
7714ca72026-07-30 Graduate page: copy fix (leopards not tigers, 23 patterns) -
fd0b2c02026-07-30 Graduate flipbook: settlement cleanup — regen from 23 clean patterns (dropped 12 directional-leaf/bird designs), clean banner -
64269922026-07-30 marketing.dw: expose /collections/<slug> pages + assets publicly (Graduate go-live) -
fb346472026-07-30 Graduate collection page: banner header to 50vh -
248390c2026-07-30 auto-save: 2026-07-30T09:46:44 (35 files) — flipbooks/graduate-collection/STORYBOARD.md flipbooks/graduate-collection/assets/img/p10.jpg flipbooks/graduate-collection/assets/img/p11.jpg flipbooks/graduate-collection/assets/img/p12.jpg flipbooks/graduate-collection/assets/img/p13.jpg -
76e3f7b2026-07-30 Graduate Collection flipbook: reusable generator + narrated spread video + marketing.dw collection page -
a22d0df2026-07-30 auto-save: 2026-07-30T09:16:33 (3 files) — data/graduate-collection.json flipbooks/ scripts/build-collection-flipbook.mjs -
8892eec2026-07-30 auto-save: 2026-07-30T07:15:28 (2 files) — data/new-arrivals.json data/reels.json -
4ff81aa2026-07-29 auto-save: 2026-07-29T07:37:00 (1 files) — data/new-arrivals.json -
1fa64442026-07-29 auto-save: 2026-07-29T07:06:42 (1 files) — data/video-suggestions.json -
78a6a3e2026-07-28 auto-save: 2026-07-28T14:31:09 (1 files) — data/video-jobs.json -
926c0a92026-07-28 auto-save: 2026-07-28T14:01:00 (2 files) — data/video-jobs.json data/video-suggestions.json -
522cc202026-07-28 reels: add 1:1 (1080x1080) New Arrivals square-reel pipeline (build-reel-1x1.mjs) — TK-00128 -
ccd338e2026-07-28 auto-save: 2026-07-28T07:28:16 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
98295332026-07-27 reels: add TIKTOK_DRY_RUN wiring-verify mode for postTikTok (no publish) — TK-00128 -
e30682f2026-07-27 tiktok-audit-demo: turnkey capture runbook for the App-Review demo video (TK-00128) -
bc02a052026-07-27 reels: build TikTok Content-Posting-API uploader (dormant, gated on audit) — TK-00128 -
eb7ecf52026-07-27 auto-save: 2026-07-27T16:52:13 (1 files) — data/reels.json -
8adb6932026-07-27 reels: fix IG async-publish timeout (first live post landed despite 12s client timeout) -
5121ca12026-07-27 reels: honest TikTok status + FTC content-claims hold guard (pre-arm) -
19e8ca42026-07-27 reels: consolidate LEAK_DENY to one canonical-synced module + fail-closed leak gate -
4f97f1f2026-07-27 reels: guard against duplicate social post of an already-'posted' reels[0] on nightly re-run -
be479b72026-07-27 auto-save: 2026-07-27T07:18:47 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
2cae9392026-07-26 auto-save: 2026-07-26T07:11:20 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d9aab812026-07-25 auto-save: 2026-07-25T07:34:42 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
689fe272026-07-24 chore: vN patch (session close — image backfill) -
8d53d7f2026-07-24 record completed image backfill: upload-imageless-11 (11/11 EUR SKUs imaged, Steve-approved live Shopify write, verified in mirror) -
5ebec052026-07-24 auto-save: 2026-07-24T07:26:03 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d86340e2026-07-23 Pin autonomous Claude CLI invocation to Opus (--model opus) -
acc7a772026-07-23 auto-save: 2026-07-23T07:19:17 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
ce006d62026-07-22 chore: lint, refactor, v0.8.0 (session close) -
d385b432026-07-22 Route 9:16 catalog reels through build-reel.mjs ($0, IG-publishable, gallery-visible) -
f9fdb8f2026-07-22 auto-save: 2026-07-22T07:42:20 (3 files) — data/video-jobs.json data/video-suggestions.json output/ -
8227e202026-07-22 video-runner: give renders narrated audio via auto-resolved HYPERFRAMES_PYTHON -
6eb30612026-07-22 Harden video-runner: retry transient API rate-limits before erroring -
c0278de2026-07-22 auto-save: 2026-07-22T07:12:00 (3 files) — data/new-arrivals.json data/reels.json scripts/video-runner.mjs -
96a00f62026-07-22 Add hypergen daily video-suggestions tab (4 ideas/day, dated + used-stamp) -
aea6ea12026-07-21 auto-save: 2026-07-21T07:36:20 (2 files) — data/new-arrivals.json data/reels.json -
f9ce6472026-07-20 chore: colorwheel-reel builder cleanup + dl warn (session close) -
c1c43c62026-07-20 Fix Threads post: reposted shop-by-color with correct caption (old mismatched post pending manual delete) -
59fcd752026-07-20 Shop-by-color reel also posted to Threads (video) -
4d8994e2026-07-20 chore: v0.6.0 — /showcase brand-films gallery (session close) -
af86e6b2026-07-20 auto-save: 2026-07-20T07:30:40 (2 files) — data/new-arrivals.json data/reels.json -
d028c212026-07-19 auto-save: 2026-07-19T07:25:16 (2 files) — data/new-arrivals.json data/reels.json -
e5e041b2026-07-18 auto-save: 2026-07-18T07:20:11 (2 files) — data/new-arrivals.json data/reels.json -
f3f78cd2026-07-17 auto-save: 2026-07-17T19:47:29 (1 files) — package-lock.json -
e86b9582026-07-17 Shop-by-color reel posted: Instagram + Bluesky live; Facebook blocked on token scope -
42687b82026-07-17 add public /showcase brand-films gallery page (all 6 promo cuts) -
8c770032026-07-17 Add shop-by-color reel builder — opens on the color wheel (frame-0 thumbnail fix) -
579b3f62026-07-17 chore: v0.5.0 (session close) — Video Studio + color-index hardening -
f8017072026-07-17 reels.json: record IG publish (new-arrivals-audio reel → posted, instagram.com/reel/Da5sp25DyRu) -
54082902026-07-17 add platform-tailored IG + TikTok captions to brand-promo reels -
9651df22026-07-17 point deploy health-check at public /privacy (true 200, not auth 401) -
dcec44c2026-07-17 stage DW brand promo 15s short cut (3 aspects) into marketing reels panel -
5f5394e2026-07-17 5x: report — 4 sweeps; fixed preload storm + console persistence (pm2); M3 'JS error' verified benign (video-preload ERR_ABORTED, no real error) -
eba4f192026-07-17 5x sweep 2: gallery videos preload=none — kills the 21-video simultaneous metadata-preload storm (ERR_ABORTED noise); videos still play on click -
55e44f82026-07-17 deploy: cert-safe nginx script to add public /reels/*.mp4 passthrough to the live marketing.dw vhost (enables Meta media-fetch for IG publishing) -
878597b2026-07-17 fix .deploy.conf health-check port 9848→9600 (reels app real port; 9848 is corkwallcovering) -
463adc42026-07-17 console: relative studio-media URL so the video gallery works inside the MCC iframe proxy (/api/reels/ui) -
8ed53f52026-07-17 stage DW brand promo (3 aspects) into marketing reels panel -
f0a22572026-07-17 DW New Arrivals collection-reveal reel (9:16, product-launch-video/HyperFrames): 8-frame cartesian storyboard + frames, Kokoro VO + MusicGen BGM, captions, transitions -
d648cd22026-07-17 video-studio hardening (contrarian FIX-FIRST): realpathSync kills symlink escape on /studio-media + public /reels/; https-URL/.eml validation + 20-job cap on queue; runner requires CLAUDE_BIN & fails loud (no silent ENOENT); job chips show created-time + host-not-armed warning -
f2f43632026-07-17 New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh) -
1d2a1cb2026-07-17 console: Video Studio — buttons to queue IG reel / URL→reel / newsletter→video + rendered-video gallery (/api/videos) + gated runner (VIDEO_AUTORUN off = waits for studio session; never auto-posts) -
f7b39872026-07-16 shop-by-color wheel: -50% wheel+dots, mobile+touch, >=80 SKUs (min:80), add-sample-to-cart per card -
907a60d2026-07-16 colorwheel: canonical /pages/shop-by-color body (new wheel, replaces static swatch page); /pages/colors 301→shop-by-color -
1dfe5d52026-07-16 colorwheel: Shopify /pages/colors widget (scoped inline build, hits public color-widen API) -
5f28b852026-07-16 colorwheel: add 6-dot palette below wheel, paginated left/right through 24 curated colors -
80983372026-07-16 colorwheel: widen to 15% ΔE band (big data set), fix spin/click color mismatch, drop hex+count, center dot = picked color -
5ca3fe32026-07-16 shop-by-color motion wheel (local preview :9851, proxies live color-index endpoint) + drafted 12-image Shopify upload script (Steve-run/gated) -
51d3d222026-07-16 Source real product images for 12/14 imageless DW products via Browserbase (O&L family blocked host bypass) -
979735d2026-07-16 auto-save: 2026-07-16T08:12:03 (9 files) — fetch-ol-images.cjs fetch-ol-manifest.json fetch-remaining.cjs fetch-remaining.json harvest-colorways-results.json -
cc29f332026-07-16 auto-save: 2026-07-16T07:11:48 (2 files) — data/new-arrivals.json data/reels.json -
55f1b052026-07-15 chore: v0.4.1 -
eae24362026-07-15 auto-save: 2026-07-15T14:07:06 (2 files) — public/index.html server.js -
2cd59c02026-07-15 chore: v0.4.0 (session close) — FB-graph IG publish + publish-ig.mjs + privacy/terms + audio-mux fix -
15079e22026-07-15 Add self-contained scripts/publish-ig.mjs — post a reel to IG from the marketing project via the FB-graph flow (durable page token), no Norma dependency; SOCIAL_LIVE_ARMED-gated with a public-media reachability guard -
c5afbac2026-07-15 auto-save: 2026-07-15T07:35:12 (2 files) — data/new-arrivals.json data/reels.json -
390b9762026-07-14 Add public /privacy + /terms pages (no-auth) for Meta app publish requirement -
59b2d6b2026-07-14 build-reel: mux silent AAC track into every reel — IG Reels require audio (no-audio MP4 fails Meta processing w/ error 2207082) -
7d816dd2026-07-14 auto-save: 2026-07-14T07:29:44 (2 files) — data/new-arrivals.json data/reels.json -
ac1da402026-07-13 Add package-lock.json — unblocks deploy (npm ci requires a lockfile; project is zero-dep) -
9ed9b0f2026-07-13 New Arrivals reel (2026-07-13-21-49) + refreshed feed (24 arrivals) -
66cb7162026-07-13 Fix console port default 9846->9848 (matches .deploy.conf + README) — 9846 silently collided with live dw-staged-active-viewer -
d02c9bb2026-07-13 Fix publish-status unwrap: read Norma's .result envelope + explicit r.simulated (kills false 'posted' on no-creds + false 'simulated' on live post) + no-creds badge — contrarian gate -
fea25bd2026-07-13 chore: v0.3.0 — multi-account IG picker + meta-token canary + live-post payload fix (session close) -
d9ccbc02026-07-13 auto-save: 2026-07-13T08:23:39 (1 files) — data/reels.json -
aa4f29e2026-07-13 5 themed reels (Thibaut, Grasscloth Edit, Phillip Jeffries, Statement Murals, Schumacher) + fetch upgrades: leak-deny filter at feed level, multi-page collection fetch, spread sampling, Repeat-spec title cleanup -
34da7272026-07-13 auto-save: 2026-07-13T07:23:25 (2 files) — data/new-arrivals.json data/reels.json -
43215272026-07-13 Pin SOCIAL_LIVE_ARMED=0 in nightly plist — schedule can never inherit an armed env (contrarian hardening) -
829f7fe2026-07-13 Fix live-post payload: send video_url (Norma reel.js contract), not mediaUrl — contrarian-caught silent 500 -
f6b331e2026-07-13 auto-save: 2026-07-13T01:21:52 (3 files) — data/new-arrivals.json data/reels.json scripts/fetch-new-arrivals.mjs -
2db6c902026-07-13 docs: publish-social — reels now public (media blocker cleared), only SOCIAL_LIVE_ARMED remains -
2c902282026-07-13 chore: lint, refactor (hoist SLUG), doc outroBig, v0.2.0 (session close) -
582f1f12026-07-13 Multi-account Instagram picker: DW-family account registry + per-reel Post-to selector + account-routed publish -
808fac72026-07-13 Dry-run publish status for cork reel: IG ready-pending-arm (media URL public), TikTok pending-reconnect -
78da8fd2026-07-12 Themeable reels + Phillipe Romano cork reel (env-driven copy/caption/slug + vendor/title/dedupe fetch filters) -
2f74ee02026-07-12 Safety-when-on: ARMED gate (no live post until SOCIAL_LIVE_ARMED=1) + private-label leak filter in captions (contrarian fixes) -
1584e5c2026-07-12 Public media exemption: GET /reels/*.mp4 unauthenticated (console/APIs stay gated) — so Meta/TikTok can fetch reels -
20c8b482026-07-12 Auto-post to IG/TikTok (fail-safe pending-creds) + captions + publish-status panel -
a1ba7d42026-07-12 Build-gate for read-only public deploy + nightly push to Kamatera -
7630cbd2026-07-12 Add nightly runner (gated plist), README, deploy config -
fc8c20e2026-07-12 DW Marketing new-arrivals reels: HyperFrames reel generator + auth-gated console (:9848)
Authors
- Steve187
- auto-commit-fleet141
- cre-agent6
- steve4
- Claude3
Agents used
- comms-compliance2
Skills used
- /reels143
- /new-arrivals77
- /video-suggestions67
- /collections17
- /graduate-collection10
- /innovations-usa9
- /claude7
- /code7
- /index7
- /commercial-collection7
- /assets7
- /novasuede-post-state5
- /tmp-swatch5
- /lines4
- /week4
- /graduate-interactive3
- /colors3
- /logos3
- /audio3
- /majilite3
- /graduate3
- /dw-collection-hero3
- /video-jobs3
- /video3
- /pages3
- /graduate-flipbook2
- /staged-tk104272
- /tracked-ig-sources2
- /novasuede-sku-map2
- /youtube2
Creative ideas + design notes
bfae37c · 2026-09-22 · Reel publish path: durable jewelry-counter HOLD gate (TK-12012)
Steve directive 2026-09-22: stop posting any Instagram with jewelry counters (scope = jewelry ONLY; room-setting reels stay). publish-social.mjs publishes the finished mp4, so this is the last line before a reel goes public. - jewelry-gate.mjs: sample frames from the actual mp4 (ffmpeg) and classify each (ollama qwen2.5vl free / Gemini fallback), mp4-keyed cache. HOLD if any frame is jewelry:true OR undecidable (fail-closed); room frames never hold. - publish-social.mjs: jewelry-hold block before publish -> status held-jewelry-review on IG + TikTok, posts nothing. - jewelry-sweep-pending.mjs: quarantine any staged jewelry reel in the queue. Posting stays DISARMED. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CRkDtx31oCvHHaMfJf9CzT
5ca3af8 · 2026-09-16 · TK-10929: report the real IG publish error instead of a hardcoded 2207076 diagnosis
The failure alert (CNCP card + George email) hardcoded a diagnosis — "a 2207076 that survived the 3x retry -> verify IG content-publish permission / re-auth" — and emitted it for EVERY publish failure regardless of the actual error. For three weeks the real error was "fetch failed": a TRANSPORT failure, because the Norma instagram-agent on :9810 was dead (never pm2-save'd, so the Sep-14 reboot left it permanently down). Node's undici only throws "fetch failed" when the connection itself fails; a genuine Meta error arrives as a parsed code. But every alert asserted a credential problem, so TK-10929 sat blocked on "NEEDS STEVE: IG content-publish re-auth, not agent-fixable" while meta-token-canary reported the tokens HEALTHY the entire time. check-publish-status.mjs already printed the true reason on stderr; cron-run.sh just discarded it. Now it captures that output, echoes it, and puts the observed text in the alert plus a triage pointer at the right component. An alert must never assert a cause it did not measure. Verified with fault injection: on an injected "fetch failed" the alert carries the real error + names norma-instagram, and the fabricated re-auth text is gone; on a successful publish no alert fires and the OK line still reaches the log. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DdCubRnaMxvZPUoqCxMbZs
abf7562 · 2026-09-10 · TK-10866: record 2-method verification that all 13 jewelry-creative reels are gone
Method A (Graph /media, all 4 owning accounts): 0/13 present. Flags the real control failure — REELS_seen=0 on suedewallpaper + textilewallpaper (7 of the 13), where exact media_count parity did NOT rescue the absence. Method B (authenticated openclaw browser, bracketed +/- controls): all 13 not-available. Owner-context probe separates deleted from archived for the 3 commercialwallcoverings reels. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LjQgkCC1vKXku5Ep5ftooU
a80a4b2 · 2026-09-04 · snapshot before deploy: graduate-flipbook work-in-progress (not authored here)
Working tree was dirty on arrival with another lane's in-flight graduate-flipbook work (server.js + 4 public/collections/graduate-flipbook/* + build-graduate-interactive.mjs + 2 storefront/graduate-interactive/*). Snapshotted per standing rule so the deploy Steve approved is revertable and that lane's work is not lost. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49
f637f7d · 2026-09-03 · TK-10427: codex-review hardening — drop tag:section (no nested <section> inside Shopify wrapper), add post-merge index.json integrity check (every order id resolves, JSON re-parses)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49
ec5eff3 · 2026-09-03 · TK-10427: add OS 2.0 section file + rollback-first one-command homepage push
The staged artifact was a Custom-Liquid paste blob with no schema, which is why the only ship path was a manual theme-editor paste. Adds: - dw-collection-films.SECTION.liquid (same validated 3-card markup + schema) - PUSH-collection-films.sh (--dry-run/--apply/--rollback): snapshots templates/index.json, PUTs the section asset, wires it into the homepage order, verifies dwcf markers on the live page. Dry-run verified: mutation adds exactly 1 section, removes 0, changes 0, preserves relative order. All 3 CTA collections 200, all 6 media assets 206. Live fire stays Steve-gated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49
675eacc · 2026-09-02 · reels: drop @philipperomano aspirational placeholder (dup of active @philliperomanodesigns)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018vRibsro4pmQ5QrgV1d676
c0c76ea · 2026-08-26 · Add glitter_walls_design as a tracked (non-postable) IG source on marketing.dw
External account (NOT DW-owned) seeded the Glitter Walls collection; add it as a read-only tracked/inspiration source via data/tracked-ig-sources.json + a read-only /api/tracked-ig-sources endpoint + a labeled 'Tracked / inspiration accounts' panel. Deliberately kept OUT of readAccountsUnion() so it can never appear in the publish dropdown or pass the /api/reel-account validity check. TK-10884. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9de1fc9 · 2026-08-26 · Reel Studio: render a single photo + song → mp4 (Composer handoff target)
New render path behind the MCC Composer's 'Build this reel' handoff. build-photo-song-reel.mjs takes ONE photo + a song + caption and renders a 1080x1920 reel (photo full-frame + slow ken-burns + caption overlay + DW outro) via HyperFrames ($0 local), then muxes the REAL song as the audio track (build-reel.mjs muxes silence; here the music is the point) with a silent-AAC fallback so it's always IG-Reels-publishable. New POST /api/build-photo-reel endpoint: same ALLOW_BUILD gate + single-job lock as run(), inputs via env, validates the photo is an http(s) URL. Verified: rendered a real 15.0s mp4 = h264 1080x1920 + aac (song muxed); endpoint 202 on valid input, 409 while a build runs; manifest entry written. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
99c71a8 · 2026-08-26 · novasuede color post (TK-10866): drop designerwallcoverings from rotation + swap jewelry creative for SKU-labeled product swatch
- Rotation limited to suedewallpaper,textilewallpaper,commercialwallcoverings; hard guard strips designerwallcoverings even if re-added via NS_ACCOUNTS - Creative now uses the product swatch (images/colors) with the real DWNS-* SKU overlaid + in the caption; jewelry-counter photo removed from the reel - SKU map (data/novasuede-sku-map.json) joined from dw_unified novasuede_catalog by name-slug; 142/142 verified, zero fabrication - caption + header comment de-jeweled Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c396f4b · 2026-08-25 · publish-ig.mjs: refuse non-postable accounts at the resolver with a clear reason (TK-10447)
The roster demotion protected the console UI but NOT the publish script: resolveAccountUid still resolved grasscloth's ig_user_id (present but unreachable), so a cron/retry/manual --account ig-grassclothwallpaper would march into the Graph post and fail with an opaque 'Object does not exist'. Now the resolver carries status and the publish path hard-fails BEFORE the media/Graph calls on any status != ready, printing the real reason. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
099834d · 2026-08-25 · reels IG roster: demote unreachable @grassclothwallpaper to needs-relink (TK-10447)
Empirical Graph API verification (read-only, $0) of all 35 'ready' accounts on the shared durable META token found 34 resolve and 1 does not: ig_user_id 17841408868631110 (@grassclothwallpaper) returns 'Object does not exist / missing permissions' while the account still exists publicly (HTTP 200) — unlinked from the Page/Business or stale ID. Added a NEEDS_RELINK manifest to the generator so it's durably demoted to status 'needs-relink' (was falsely 'ready'), preventing a silent publish failure. Roster is now 34 verified-postable + 1 needs-relink + 5 aspirational. Re-link is a gated Meta action. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
276feb4 · 2026-08-25 · reels UI: Post to YouTube button on each studio video chip
Adds POST /api/youtube (uploads one studio mp4 to the DW channel as UNLISTED via the youtube-upload skill) + a per-chip button in the #sec-videos gallery. Unlisted is the safe/reversible default; the returned watch link is Steve's to flip Public in Studio. Gated by ALLOW_BUILD so the public Kamatera deploy answers 'runs on the studio host' (no python/secrets there). Path is realpath+root guarded like /studio-media/.
2165410 · 2026-08-25 · reels: prune 3 dead 2026-07-13 entries whose mp4s never rendered (kills gallery 404s)
schumacher-texture / statement-murals / grasscloth-edit (07-13 08:00 batch) have full metadata in reels.json but no rendered .mp4 on disk, so the gallery 404s on each. Removed. Note: statement-murals featured an Et Cie mural — Et Cie rights were revoked and all products archived 2026-08-13, so it must not be re-rendered. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bc84029 · 2026-08-25 · Embed all 35 DW-owned IG accounts in the Reels console (list + publish dropdown)
The console sourced accounts from its own data/ig-accounts.json (7 entries) — missing 34 of the canonical 35 owned accounts. Add a canonical file mirrored from Norma (scripts/build-dw-accounts.js → data/dw-canonical-accounts.json) and union it into the account list server-side (readAccountsUnion), so #sec-accts AND the #pubAcct publish dropdown AND every per-reel .pick-acct now offer all owned accounts (41 total = 7 managed + 34 canonical). The reel-account validator uses the union too, so canonical accounts are valid reel targets. Managed entries win on handle-dedupe (keep ids/creds); canonical-only accounts show '(needs creds)'. ig-accounts.json untouched. Verified: /api/ig-accounts returns 41, ids valid, dedupe correct; browser shows 41 in the list and 41 in both dropdown paths, no page errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
973621a · 2026-08-25 · reels: credential-safe fetch guard so Suggested videos loads when opened with creds-in-URL
Opening /api/reels/ui/ with credentials in the URL (saved bookmark / Chrome-
remembered basic-auth) poisoned document.baseURI, making every bare-relative
fetch('api/...') throw 'Request cannot be constructed from a URL that includes
credentials'. loadSuggestions() swallowed it and fell to the empty state, so
#sec-suggest showed 'No suggestions yet' despite 136 existing ideas. Resolve
relative fetch URLs against the credential-free location instead of baseURI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
886d6f6 · 2026-08-10 · reels: drop @novasuede from rotation — not Steve's IG handle
@novasuede is not Steve's account; removed from the default target list in both the runner and the single-colour generator. The 3x/week campaign posts only to Steve's own accounts (@suedewallpaper, @textilewallpaper, @commercialwallcoverings, @designerwallcoverings). Novasuede stays the product/ site brand in the content. Armed launchd job picks up the new default automatically. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
951f996 · 2026-08-10 · reels: novasuede-run-all.mjs — 3 new colours per account, fan to all suggested accounts
One campaign 'drop': for each account [novasuede, suedewallpaper, textilewallpaper, commercialwallcoverings, designerwallcoverings] pick 3 NEW colours (global de-dup), build a 15s post (jewelry-display + swatch per colour + music bed, first frame = jewelry display), push + post to that account. Colours marked posted ONLY on real publish (dry run = build-only, no state change). Live multi-account fire is armed via NS_POST=1 (Steve-gated). Feeds the 3x/week schedule. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
d7e908b · 2026-08-10 · reels: novasuede 'new colour 3x/week' generator + account rotation (jewelry + music)
build-novasuede-color-post.mjs picks the next unposted colour (rotation state) and the next target account round-robin across [novasuede, suedewallpaper, textilewallpaper, commercialwallcoverings, designerwallcoverings], builds a 15s post (jewelry-display hero + suede swatch + samples-free outro) with a jazz MUSIC bed, first frame = jewelry display. First drop LIVE: Acorn → @suedewallpaper (novasuede skipped: pending-creds). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ae7b91d · 2026-08-10 · reels: build-novasuede.mjs — 15s Novasuede color-story reel
Hero opens on a real suede swatch (most-saturated picked color) — NOT the misleading Drapery_Drama.jpg lifestyle photo. Color cards from novasuede colors-data.json + local swatches, 'samples no charge for professionals' outro, Steve cloned-voice VO muxed, first frame = product swatch (clean IG index thumbnail). 15s (NS_TARGET override). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
579a1a7 · 2026-08-10 · Collection Films: fix dead Shop CTAs to vendor-collection routes, hold Majilite (no live collection), a11y play button, auto-fit grid
- filter.p.vendor= is silently ignored on this store (S&D vendor facet off) -> all 3 CTAs landed on unfiltered /collections/all. Repointed to /collections/maya-romanoff + /collections/glitter-walls (both 200, populated). - /collections/majilite + /collections/majilite-metallics both 404 (line is sample/quote-only, TK-10425) -> Majilite card held (commented, one-line re-enable) so no shopper hits a 404. - grid -> repeat(auto-fit, minmax(300px,384px)) centered so 2 cards render balanced (no orphan column). - play overlay div -> <button> (fixes WCAG 2.1.1 keyboard-operability); native <video controls> kept as no-JS fallback. TK-10427
1871275 · 2026-08-10 · reels: Majilite jewelry-case image pipeline + spotlight reel + alt tags
- batch-jewelry.mjs: 1 jewelry-display-case image per Majilite item via gpt-image-1 (swatch as reference so the exact metallic material is applied); local-only, resumable, running cost total. (Gemini room-gen is out of prepaid credits — OpenAI used instead.) - build-spotlight.mjs: 30s single-product spotlight reel (brand → material → jewelry-case shots → 'samples no charge for professionals' outro) with Steve's cloned-voice VO muxed; first frame is a product image (clean IG index thumbnail). - gen-alt-tags.mjs: alt text per image — '<Item>, Majilite metallic wallcovering — jewelry display cases and fabrics' → alt.txt + alt-tags.json. - gitignore generated assets (majilite-jewelry/, spotlight-work/). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
692459d · 2026-08-10 · reels: 15/30s runtime + open on a product image (no blank IG index thumbnail)
Steve 2026-08-10: every reel must be exactly 15s or 30s and its FIRST frame must be
a real product image, never a blank card — Instagram uses frame 0 as the grid/Reels
('index mode') thumbnail, and the old solid-cream intro (text fading in from opacity 0)
rendered a blank cream tile. Now: REEL_TARGET (15|30, default 30) derives PER so total
lands exactly on target; the intro is image-backed (items[0] full-bleed + scrim + title
overlay, image visible at frame 0 with a gentle ken-burns). Verified: 30.0s render, frame0
is a product photo. REEL_TARGET=15 for a 15s cut.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
060af89 · 2026-08-10 · TK-10395: monitor fails loud on armed 'posted-unverified' (was silent-green)
Contrarian find: check-publish-status treated 'posted-unverified' as GOOD and the dup-guard skips it next run — so a timed-out-uncertain post that actually failed would silently never reach IG while the monitor stayed green (the exact TK-10395 failure class). Armed 'posted-unverified' now exits 1 → verify on IG out-of-band. Unarmed tolerated; 'posted' control unaffected. Proven by test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
50543e2 · 2026-08-10 · TK-10395: surface Norma's real IG-publish error instead of a bare 'error'
- !res.ok now includes body.error/note/message (was dropped) so the armed nightly run logs the actual cause - guard the 200-OK-with-internal-failure path so a skill-level error isn't mislabeled 'posted' - root cause is NOT a dead token (meta-token-canary: meta-ig-norma HEALTHY, expires=never) — this makes the next run reveal the true Norma-side error Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
522cc20 · 2026-07-28 · reels: add 1:1 (1080x1080) New Arrivals square-reel pipeline (build-reel-1x1.mjs) — TK-00128
Local $0 ffmpeg/ImageMagick build: 8 varied products from data/new-arrivals.json, Didot titles + gold meta over scrim, cream intro/outro cards, push-in + crossfades. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
9829533 · 2026-07-27 · reels: add TIKTOK_DRY_RUN wiring-verify mode for postTikTok (no publish) — TK-00128
dryRunTikTok() exercises the real pre-publish path: token refresh (auth plumbing, rotates+persists), creator_info (validates token + reads the privacy levels the app is actually allowed to use), and init-body assembly — then STOPS before video/init. Nothing is uploaded, no post is created. Wired into postTikTok as an un-armed escape hatch (TIKTOK_DRY_RUN=1), so the wiring can be verified without TIKTOK_LIVE_ARMED and without the pending TikTok app audit. Live publish path unchanged and still gated. Offline test (fetch stubbed, throwaway HOME): SELF_ONLY -> wouldPost true; PUBLIC_TO_EVERYONE on unaudited app -> wouldPost false; only token + creator_info called, no init/upload/status. $0 (no live API call). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e30682f · 2026-07-27 · tiktok-audit-demo: turnkey capture runbook for the App-Review demo video (TK-00128)
Scene-by-scene shot list with embedded narration + who-does-what roles (Steve: OAuth consent + account-Private toggle + button clicks; me: cue/narrate/record/trim/split). Encodes the unaudited-app trap (account must be Private during the post) and the ≤50MB split. Readiness verified 2026-07-27. Live capture is a ~10-min guided pass.
bc02a05 · 2026-07-27 · reels: build TikTok Content-Posting-API uploader (dormant, gated on audit) — TK-00128
- scripts/tiktok-post.mjs: ports the proven FILE_UPLOAD flow (creator_info → init → PUT bytes → poll) from tiktok-oauth-catcher/fire-test-post.sh, plus the token refresh the nightly cron needs (TikTok access tokens expire ~24h; refresh tokens rotate and are persisted back to the canonical secrets .env). Reads creds from secrets (single source). - publish-social postTikTok: wired to the uploader behind its OWN gate TIKTOK_LIVE_ARMED, decoupled from IG's SOCIAL_LIVE_ARMED. Dormant → 'ready-pending-tiktok-arm'. - privacy defaults SELF_ONLY; refuses a privacy level the app isn't allowed (→ 'pending-audit'). EXTERNAL BLOCKER: the DW production TikTok app is UNAUDITED, so PUBLIC posting is impossible until TikTok approves the audit (unaudited apps: SELF_ONLY to a private account only). Code is ready; the first live run is Steve-gated (posts + rotates the shared refresh token). Verified: syntax, exports resolve, dry resolution = ready-pending-tiktok-arm, leak gate passes.
8adb693 · 2026-07-27 · reels: fix IG async-publish timeout (first live post landed despite 12s client timeout)
First live DW IG reel posted 2026-07-27 (reel/DbUK59zFdfL) but the client saw a 12s timeout mid-publish (IG container->poll->publish runs ~30-60s), recording a false error. - bump IG post timeout 12s->90s so a real post is captured as posted. - on timeout: return posted-unverified (NOT error) - the request was already sent, so a blind retry would DUPLICATE the post; the dup-guard now skips posted-unverified too. Reconciled reels[0] to posted (permalink) so the nightly cron cannot double-post. TK-14.
5121ca1 · 2026-07-27 · reels: honest TikTok status + FTC content-claims hold guard (pre-arm)
- postTikTok: when armed+token'd but the Content Posting API uploader isn't built,
return status 'not-implemented' + console.warn instead of a silent 'pending-reconnect'
that could read as handled on an armed run (contrarian: silent-success bomb).
- Content-claims gate (comms-compliance Fix 1): HOLD any reel whose caption carries an
unsubstantiated factual claim ('For 25 years', 'As seen in AD/Elle Decor/WSJ') — status
'held-claims-review' — until CLAIMS_SUBSTANTIATED=1. Verified: holds exactly the 3
dw-brand-promo reels (15-17), none of the other 30. Fail-safe default = hold.
TK-14. Lets Steve arm the pipeline WITHOUT the unsubstantiated promo reels posting.
19e8ca4 · 2026-07-27 · reels: consolidate LEAK_DENY to one canonical-synced module + fail-closed leak gate
- scripts/leak-deny.mjs: single source of truth for the private-label denylist, synced to canonical dw-leak-scanner. Adds names the 3 hand-copied regexes had DRIFTED and were missing: lillian august (leaked 2026-07-06), rigo, rigowall. Per-term anchoring: leading-\b on 'versa' (catches standalone + concatenated, safe on Adversarial/conversation/Universal), both-\b on 'rigo' (protects Rigoletto). - build-reel / build-colorwheel-reel / fetch-new-arrivals: import the shared module, removing 3 drift-prone copies. - scripts/scan-leaks.mjs + npm 'scan': fail-closed gate over the staged manifests. - cron-run.sh: run the gate BEFORE publish+push — a leaked name can no longer reach a public post. Turns the old one-shot '0 leaks' assertion into a standing gate. Verified: 22/22 leak+FP assertions pass; gate PASSES on the 33 staged reels. TK-14. Contrarian-gated (FIX FIRST verdict applied).
4f97f1f · 2026-07-27 · reels: guard against duplicate social post of an already-'posted' reels[0] on nightly re-run
comms-compliance find (TK-14): main() always takes reels[0]; if a nightly build fails to prepend a new reel but publish-social still runs, an already-posted reel would be resubmitted to the Graph API (duplicate public post). Skip only a confirmed 'posted'/'already-posted' state; every non-terminal state (pending-creds/ ready-pending-arm/error) is still (re)attempted. Full idempotency-key dedup for the error-response-leg edge is a follow-up. Contrarian-gated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
d86340e · 2026-07-23 · Pin autonomous Claude CLI invocation to Opus (--model opus)
Bare 'claude' spawn inherited the CLI's drifting default model; pin to Opus so this build/gen loop always runs on the intended model. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ce006d6 · 2026-07-22 · chore: lint, refactor, v0.8.0 (session close)
- video-runner: hoist prompt(j) to a single const (drop duplicate call in retry loop) - lint pass: 0 autofixes needed; flagged pre-existing serveFile Range-header null-deref for a future scoped fix (not session code)
d385b43 · 2026-07-22 · Route 9:16 catalog reels through build-reel.mjs ($0, IG-publishable, gallery-visible)
Running a real render exposed that new-arrivals-reel via claude -p was slow (~8min), cost API, produced a SILENT reel, and orphaned it in output/ (invisible to the gallery). The repo's own build-reel.mjs renders the same reel in ~20s, $0 (local ffmpeg/Chrome), with an IG-publishable AAC track, straight into reels/. - video-runner: new-arrivals-reel@9:16 → build-reel.mjs (no arming needed); 1:1 + url/newsletter keep the gated claude -p skill path; retry wraps both - server: /api/videos gallery now also scans output/ (+ serve guard) so the HyperFrames url/newsletter renders that land there are visible + playable
8227e20 · 2026-07-22 · video-runner: give renders narrated audio via auto-resolved HYPERFRAMES_PYTHON
Auto-resolve the local HyperFrames TTS venv (~/.hyperframes/tts-venv/bin/python) and inject it only into the render child's env — so auto-rendered reels get voiceover/BGM without arming or mutating the pm2/server environment. Honours an explicit HYPERFRAMES_PYTHON if already set.
6eb3061 · 2026-07-22 · Harden video-runner: retry transient API rate-limits before erroring
Root cause of the studio host's 'claude exit 1' renders was a transient Anthropic
throttle ('Server is temporarily limiting requests'), which permanently killed the
job with no retry. Now:
- capture claude stderr, classify transient (rate-limit/overloaded/429/529/reset)
- retry with exponential backoff (VIDEO_MAX_TRIES=3, VIDEO_BACKOFF_MS=20000)
- record attempts + a human-readable reason in job.note (not opaque 'exit 1')
- console surfaces the last few errored renders with their reason so failures
don't vanish silently
Applies to both the manual studio buttons and the new suggestions 'Use it' flow.
96a00f6 · 2026-07-22 · Add hypergen daily video-suggestions tab (4 ideas/day, dated + used-stamp)
- scripts/suggest-videos.mjs: $0-local daily generator, 4 ideas/day from New Arrivals catalog, append-only history, idempotent per PT date - server.js: GET /api/video/suggestions, POST /api/video/suggest, POST /api/video/suggestions/use (queues the render + stamps used_at/used_where); shared buildVideoJob/enqueueVideoJob helpers reused by the manual queue door - public/index.html: Suggested-videos tab — day-grouped cards, created date+time chip, Use-it button, and a when/where used-stamp; gated on allowBuild - com.steve.dw-video-suggest launchd agent: fills today's 4 daily at 7:05 PT (ideas only)
f2f4363 · 2026-07-17 · New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh)
- Curated 7 hero picks (1-2 colorways/pattern) across Rebel Walls murals + Thibaut - 1080x1920 9:16, 22.8s, yuv420p 30fps, AAC 44.1kHz - Real local audio: Kokoro TTS voiceover (bf_isabella) over ducked MusicGen ambient bed - Fixed banned-word: caption hashtags now #Wallcovering/#Wallcoverings (was #Wallpaper) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
File tree
- .deploy.conf
- .gitignore
- 5x/REPORT.md
- README.md
- colorwheel/colors-page.shopify.html
- colorwheel/index.html
- colorwheel/server.js
- colorwheel/shop-by-color.page-body.html
- colorwheel/upload-12-images.js
- data/commercial-collection.json
- data/dw-canonical-accounts.json
- data/fetch-collection-products.mjs
- data/fetch-innovations-recent.mjs
- data/franquemont-london.json
- data/glitter-walls-full.json
- data/glitter-walls.json
- data/graduate-clean.json
- data/graduate-collection.json
- data/graduate-combined.json
- data/graduate-ordered.json
- data/graduate-with-rooms.json
- data/ig-accounts.json
- data/innovations-usa.json
- data/majilite-metallics-full.json
- data/majilite-metallics.json
- data/maya-romanoff-full.json
- data/maya-romanoff.json
- data/new-arrivals.json
- data/novasuede-cleanup-target-manifest.json
- data/novasuede-post-state.json
- data/novasuede-sku-map.json
- data/reels.json
- data/tracked-ig-sources.json
- data/video-jobs.json
- data/video-suggestions.json
- deploy/add-reels-passthrough.sh
- deploy/com.steve.dw-marketing-reels.plist
- deploy/com.steve.dw-reels-nightly.plist
- deploy/com.steve.novasuede-color-post.plist
- fetch-dg.cjs
- fetch-dg.json
- fetch-ol-images.cjs
- fetch-ol-manifest.json
- fetch-remaining.cjs
- fetch-remaining.json
- harvest-colorways-results.json
- harvest-colorways.cjs
- harvest-ol-family.cjs
- harvest-ol-results.json
- linkedin-drafts/graduate-collection.md
- linkedin-drafts/graduate-youtube.md
- output/.lastrun
- package-lock.json
- package.json
- public/collections/commercial-collection-banner.jpg
- public/collections/commercial-collection-poster.jpg
- public/collections/commercial-collection.html
- public/collections/franquemont-london-poster.jpg
- public/collections/franquemont-london.html
- public/collections/glitter-walls-banner.jpg
- public/collections/glitter-walls-poster.jpg
- public/collections/glitter-walls.html
- public/collections/graduate-collection.html
- public/collections/graduate-flipbook/graduate-narration.m4a
- public/collections/graduate-flipbook/index.html
- public/collections/graduate-flipbook/module.html
- public/collections/graduate-flipbook/page-flip.css
- public/collections/graduate-flipbook/page-flip.js
- public/collections/innovations-usa-poster.jpg
- public/collections/innovations-usa.html
- public/collections/majilite-metallics-banner.jpg
- public/collections/majilite-metallics-poster.jpg
- public/collections/majilite-metallics.html
- public/collections/maya-romanoff-banner.jpg
- public/collections/maya-romanoff-poster.jpg
- public/collections/maya-romanoff.html
- public/index.html
- public/privacy.html
- public/showcase.html
- public/terms.html
- scripts/batch-jewelry.mjs
- scripts/build-collection-flipbook.mjs
- scripts/build-colorwheel-reel.mjs
- scripts/build-dw-accounts.js
- scripts/build-graduate-interactive.mjs
- scripts/build-ig-accounts.js
- scripts/build-novasuede-color-post.mjs
- scripts/build-novasuede.mjs
- scripts/build-photo-song-reel.mjs
- scripts/build-reel-1x1.mjs
- scripts/build-reel.mjs
- scripts/build-spotlight.mjs
- scripts/check-publish-status.mjs
- scripts/cron-run.sh
- scripts/fetch-new-arrivals.mjs
- scripts/gen-alt-tags.mjs
- scripts/jewelry-gate.mjs
- scripts/jewelry-sweep-pending.mjs
- scripts/leak-deny.mjs
- scripts/novasuede-cron-run.sh
- scripts/novasuede-run-all.mjs
- scripts/publish-ig.mjs
- scripts/publish-social.mjs
- scripts/retry-publish.mjs
- scripts/retry-run.sh
- scripts/scan-leaks.mjs
- scripts/suggest-videos.mjs
- scripts/sync-reels.mjs
- scripts/tiktok-post.mjs
- scripts/upload-imageless-11.mjs
- scripts/video-runner.mjs
- server.js
- sourced-images/imageless-14/EUR-70328__5314.webp
- sourced-images/imageless-14/EUR-70351__5223.webp
- sourced-images/imageless-14/EUR-70402__5053.webp
- sourced-images/imageless-14/NCW4270-03__coromandel-offwhite.webp
- sourced-images/imageless-14/NCW4270-05__coromandel-offwhite.webp
- sourced-images/imageless-14/NCW4352-05_bonnelles.jpg
- sourced-images/imageless-14/W5223-03__w5223-03.webp
- sourced-images/imageless-14/W6541-02__4591.webp
- sourced-images/imageless-14/W7024-03__w7024-03.webp
- sourced-images/imageless-14/W7334-1__w7334-01.webp
- sourced-images/imageless-14/W7682-01__w7682-01_ff8svfx2jzq6e1ez.webp
- sourced-images/imageless-14/W7814-01__w7814-01_n6lger3vo8gdn9ly.webp
- spotlight-work/jewel-0.png
- spotlight-work/jewel-1.png
- spotlight-work/jewel-2.png
- spotlight-work/jewel-resp.json
- spotlight-work/pattern.b64
- spotlight-work/pattern.png
- spotlight-work/vo-majilite.wav
- storefront/dw-collection-films.liquid
- storefront/graduate-interactive/PUSH-graduate-interactive.sh
- storefront/graduate-interactive/ROLLBACK-dw-collection-hero-20260903-111103.json
- storefront/graduate-interactive/ROLLBACK-dw-collection-hero-20260903-111144.json
- storefront/graduate-interactive/dw-collection-hero.NEW.liquid
- storefront/staged-tk10427/CREATE-majilite-collection.sh
- storefront/staged-tk10427/PATH-A-push-command.sh
- storefront/staged-tk10427/PATH-B-paste-2card.liquid
- storefront/staged-tk10427/PATH-B-paste-3card.liquid
- storefront/staged-tk10427/PUSH-collection-films.sh
- storefront/staged-tk10427/ROLLBACK-index-20260903-141302.json
- storefront/staged-tk10427/ROLLBACK-index-20260903-152741.json
- storefront/staged-tk10427/dw-collection-films.SECTION.liquid
- storefront/staged-tk10427/index.NEW-20260903-141302.json
- storefront/staged-tk10427/index.NEW-20260903-152741.json
- theme-edits/graduate/dw-collection-hero.20260730-134622.BACKUP.liquid
- theme-edits/graduate/dw-collection-hero.FIXED.liquid
- theme-edits/graduate/dw-collection-hero.LIVE.liquid
- theme-edits/graduate/dw-collection-hero.liquid.before
- theme-edits/graduate/dw-collection-hero.liquid.before-layout2
- theme-edits/graduate/dw-collection-hero.liquid.before-sliders
- tiktok-audit-demo/CAPTURE-RUNBOOK.md
- verification/e2e-proof.json