Dw Activation Calendar
repo: ~/Projects/dw-activation-calendar · 168 commits · 26 in last 24h, 140 in last 7d · ▂██▆▇▄█
Search the build
168 commits indexed
409dbb6
2026-07-28
auto-save: 2026-07-28T08:58:52 (1 files) — data/activation-schedule.json
e2881b9
2026-07-28
auto-save: 2026-07-28T08:28:39 (1 files) — data/activation-schedule.json
98f1fd9
2026-07-28
auto-save: 2026-07-28T07:58:26 (1 files) — data/activation-schedule.json
dc037c1
2026-07-28
auto-save: 2026-07-28T06:58:06 (1 files) — data/activation-schedule.json
a197c20
2026-07-28
auto-save: 2026-07-28T05:57:47 (1 files) — data/activation-schedule.json
d8bb223
2026-07-28
auto-save: 2026-07-28T04:57:26 (1 files) — data/activation-schedule.json
c18deba
2026-07-28
auto-save: 2026-07-28T03:57:08 (1 files) — data/activation-schedule.json
c552f71
2026-07-28
auto-save: 2026-07-28T02:56:47 (1 files) — data/activation-schedule.json
b12524f
2026-07-28
auto-save: 2026-07-28T01:56:27 (1 files) — data/activation-schedule.json
a6aece1
2026-07-28
auto-save: 2026-07-28T00:56:07 (1 files) — data/activation-schedule.json
e111a65
2026-07-28
auto-save: 2026-07-28T00:25:56 (1 files) — data/activation-schedule.json
528bef7
2026-07-27
auto-save: 2026-07-27T23:55:46 (1 files) — data/activation-schedule.json
0a3042b
2026-07-27
auto-save: 2026-07-27T22:55:20 (1 files) — data/activation-schedule.json
e87adb4
2026-07-27
auto-save: 2026-07-27T21:54:54 (1 files) — data/activation-schedule.json
a20eb74
2026-07-27
auto-save: 2026-07-27T20:54:34 (1 files) — data/activation-schedule.json
15cf952
2026-07-27
auto-save: 2026-07-27T19:54:12 (1 files) — data/activation-schedule.json
359f40e
2026-07-27
auto-save: 2026-07-27T18:53:10 (1 files) — data/activation-schedule.json
89960f0
2026-07-27
auto-save: 2026-07-27T17:52:34 (1 files) — data/activation-schedule.json
b71b205
2026-07-27
auto-save: 2026-07-27T16:52:13 (1 files) — data/activation-schedule.json
e8ea856
2026-07-27
auto-save: 2026-07-27T15:51:48 (1 files) — data/activation-schedule.json
c73cbe8
2026-07-27
auto-save: 2026-07-27T14:51:27 (1 files) — data/activation-schedule.json
905168c
2026-07-27
auto-save: 2026-07-27T13:51:03 (1 files) — data/activation-schedule.json
b857df4
2026-07-27
auto-save: 2026-07-27T12:50:40 (1 files) — data/activation-schedule.json
2cdf3d8
2026-07-27
auto-save: 2026-07-27T11:50:21 (1 files) — data/activation-schedule.json
145c247
2026-07-27
auto-save: 2026-07-27T10:49:50 (1 files) — data/activation-schedule.json
6fd3140
2026-07-27
auto-save: 2026-07-27T09:49:31 (1 files) — data/activation-schedule.json
def81c0
2026-07-27
auto-save: 2026-07-27T08:49:12 (1 files) — data/activation-schedule.json
b97134b
2026-07-27
auto-save: 2026-07-27T07:48:56 (1 files) — data/activation-schedule.json
22e9d49
2026-07-27
auto-save: 2026-07-27T06:48:37 (1 files) — data/activation-schedule.json
03d6966
2026-07-27
auto-save: 2026-07-27T05:48:20 (1 files) — data/activation-schedule.json
4364cb0
2026-07-27
auto-save: 2026-07-27T04:48:02 (1 files) — data/activation-schedule.json
1da4760
2026-07-27
auto-save: 2026-07-27T03:47:45 (1 files) — data/activation-schedule.json
3668127
2026-07-27
auto-save: 2026-07-27T02:47:28 (1 files) — data/activation-schedule.json
6716e6e
2026-07-27
auto-save: 2026-07-27T01:47:10 (1 files) — data/activation-schedule.json
d80a737
2026-07-27
auto-save: 2026-07-27T00:46:55 (1 files) — data/activation-schedule.json
5f29993
2026-07-27
auto-save: 2026-07-27T00:16:47 (1 files) — data/activation-schedule.json
9cc979c
2026-07-26
auto-save: 2026-07-26T17:44:55 (1 files) — data/activation-schedule.json
a52588c
2026-07-26
auto-save: 2026-07-26T09:42:34 (1 files) — data/activation-schedule.json
23031a7
2026-07-26
auto-save: 2026-07-26T08:41:50 (1 files) — data/activation-schedule.json
4f7939e
2026-07-26
auto-save: 2026-07-26T07:41:30 (1 files) — data/activation-schedule.json
f5e98bc
2026-07-26
auto-save: 2026-07-26T06:41:11 (1 files) — data/activation-schedule.json
4b4a513
2026-07-26
auto-save: 2026-07-26T05:40:54 (1 files) — data/activation-schedule.json
8b75fb0
2026-07-26
auto-save: 2026-07-26T04:40:35 (1 files) — data/activation-schedule.json
be49f74
2026-07-26
auto-save: 2026-07-26T03:40:20 (1 files) — data/activation-schedule.json
4fc24ac
2026-07-26
auto-save: 2026-07-26T02:40:05 (1 files) — data/activation-schedule.json
50861f6
2026-07-26
auto-save: 2026-07-26T01:39:48 (1 files) — data/activation-schedule.json
f7dd196
2026-07-26
auto-save: 2026-07-26T00:39:31 (1 files) — data/activation-schedule.json
6b8c565
2026-07-26
auto-save: 2026-07-26T00:09:22 (1 files) — data/activation-schedule.json
e8f383f
2026-07-25
auto-save: 2026-07-25T23:39:14 (1 files) — data/activation-schedule.json
8ea9028
2026-07-25
auto-save: 2026-07-25T22:38:58 (1 files) — data/activation-schedule.json
6806c21
2026-07-25
auto-save: 2026-07-25T21:38:42 (1 files) — data/activation-schedule.json
3db8f59
2026-07-25
auto-save: 2026-07-25T20:38:27 (1 files) — data/activation-schedule.json
06dab53
2026-07-25
auto-save: 2026-07-25T19:38:10 (1 files) — data/activation-schedule.json
bff9184
2026-07-25
auto-save: 2026-07-25T18:37:55 (1 files) — data/activation-schedule.json
59b09b1
2026-07-25
auto-save: 2026-07-25T17:37:37 (1 files) — data/activation-schedule.json
a80ae28
2026-07-25
auto-save: 2026-07-25T16:37:21 (1 files) — data/activation-schedule.json
64e1c16
2026-07-25
auto-save: 2026-07-25T15:37:05 (1 files) — data/activation-schedule.json
4e3d76f
2026-07-25
auto-save: 2026-07-25T14:36:51 (1 files) — data/activation-schedule.json
21c17be
2026-07-25
auto-save: 2026-07-25T13:36:34 (1 files) — data/activation-schedule.json
e13119a
2026-07-25
auto-save: 2026-07-25T11:35:57 (1 files) — data/activation-schedule.json
eaf7f48
2026-07-25
auto-save: 2026-07-25T10:35:38 (1 files) — data/activation-schedule.json
11d229e
2026-07-25
auto-save: 2026-07-25T10:05:29 (1 files) — data/activation-schedule.json
c894a2c
2026-07-25
auto-save: 2026-07-25T08:35:01 (1 files) — data/activation-schedule.json
a92dd41
2026-07-25
auto-save: 2026-07-25T08:04:52 (1 files) — data/activation-schedule.json
62447ed
2026-07-25
auto-save: 2026-07-25T07:04:29 (1 files) — data/activation-schedule.json
d768aea
2026-07-25
auto-save: 2026-07-25T06:04:08 (1 files) — data/activation-schedule.json
69aa216
2026-07-25
auto-save: 2026-07-25T05:03:47 (1 files) — data/activation-schedule.json
9b8ca6e
2026-07-25
auto-save: 2026-07-25T04:03:25 (1 files) — data/activation-schedule.json
9b9505e
2026-07-25
auto-save: 2026-07-25T03:03:06 (1 files) — data/activation-schedule.json
a13844e
2026-07-25
auto-save: 2026-07-25T02:02:37 (1 files) — data/activation-schedule.json
f7354bd
2026-07-25
auto-save: 2026-07-25T01:02:17 (1 files) — data/activation-schedule.json
058b0de
2026-07-25
auto-save: 2026-07-25T00:32:03 (1 files) — data/activation-schedule.json
7d9498a
2026-07-25
auto-save: 2026-07-25T00:01:48 (1 files) — data/activation-schedule.json
311e4a2
2026-07-24
auto-save: 2026-07-24T23:00:12 (1 files) — data/activation-schedule.json
f15da69
2026-07-24
auto-save: 2026-07-24T21:59:59 (1 files) — data/activation-schedule.json
0359103
2026-07-24
auto-save: 2026-07-24T20:59:44 (1 files) — data/activation-schedule.json
40b594d
2026-07-24
auto-save: 2026-07-24T19:59:29 (1 files) — data/activation-schedule.json
f003edd
2026-07-24
auto-save: 2026-07-24T18:59:11 (1 files) — data/activation-schedule.json
659e2a9
2026-07-24
auto-save: 2026-07-24T17:58:56 (1 files) — data/activation-schedule.json
1e763ec
2026-07-24
auto-save: 2026-07-24T16:58:41 (1 files) — data/activation-schedule.json
92dc760
2026-07-24
auto-save: 2026-07-24T15:58:29 (1 files) — data/activation-schedule.json
fd65f94
2026-07-24
auto-save: 2026-07-24T14:58:16 (1 files) — data/activation-schedule.json
b26568a
2026-07-24
auto-save: 2026-07-24T13:58:01 (1 files) — data/activation-schedule.json
016ff39
2026-07-24
auto-save: 2026-07-24T09:57:07 (1 files) — data/activation-schedule.json
11b9e99
2026-07-24
auto-save: 2026-07-24T08:56:52 (1 files) — data/activation-schedule.json
821a8ff
2026-07-24
auto-save: 2026-07-24T07:56:29 (1 files) — data/activation-schedule.json
77eb903
2026-07-24
auto-save: 2026-07-24T06:55:55 (1 files) — data/activation-schedule.json
9c341be
2026-07-24
auto-save: 2026-07-24T05:55:40 (1 files) — data/activation-schedule.json
1b7e58a
2026-07-24
auto-save: 2026-07-24T04:55:26 (1 files) — data/activation-schedule.json
f7e7884
2026-07-24
auto-save: 2026-07-24T03:55:12 (1 files) — data/activation-schedule.json
0e7d5f4
2026-07-24
auto-save: 2026-07-24T02:54:59 (1 files) — data/activation-schedule.json
3ac7da6
2026-07-24
auto-save: 2026-07-24T01:54:44 (1 files) — data/activation-schedule.json
8aa77d2
2026-07-24
auto-save: 2026-07-24T00:54:30 (1 files) — data/activation-schedule.json
3a19046
2026-07-24
auto-save: 2026-07-24T00:24:22 (1 files) — data/activation-schedule.json
4f03bf6
2026-07-23
auto-save: 2026-07-23T23:54:14 (1 files) — data/activation-schedule.json
810169f
2026-07-23
auto-save: 2026-07-23T22:54:00 (1 files) — data/activation-schedule.json
bdb79f9
2026-07-23
auto-save: 2026-07-23T21:53:45 (1 files) — data/activation-schedule.json
7497c3d
2026-07-23
auto-save: 2026-07-23T20:53:32 (1 files) — data/activation-schedule.json
0ba7ae8
2026-07-23
auto-save: 2026-07-23T19:53:19 (1 files) — data/activation-schedule.json
95102d6
2026-07-23
auto-save: 2026-07-23T18:53:06 (1 files) — data/activation-schedule.json
8f6c537
2026-07-23
auto-save: 2026-07-23T17:52:50 (1 files) — data/activation-schedule.json
a67aca7
2026-07-23
auto-save: 2026-07-23T16:52:38 (1 files) — data/activation-schedule.json
de6e08d
2026-07-23
auto-save: 2026-07-23T15:52:21 (1 files) — data/activation-schedule.json
a492136
2026-07-23
auto-save: 2026-07-23T14:52:02 (1 files) — data/activation-schedule.json
f842567
2026-07-23
auto-save: 2026-07-23T13:51:43 (1 files) — data/activation-schedule.json
627e472
2026-07-23
auto-save: 2026-07-23T12:51:13 (1 files) — data/activation-schedule.json
6acceaf
2026-07-23
auto-save: 2026-07-23T11:50:46 (1 files) — data/activation-schedule.json
fa5a49d
2026-07-23
auto-save: 2026-07-23T11:20:37 (1 files) — data/activation-schedule.json
7facb6d
2026-07-23
auto-save: 2026-07-23T10:50:25 (1 files) — data/activation-schedule.json
7253626
2026-07-23
auto-save: 2026-07-23T09:50:03 (1 files) — data/activation-schedule.json
747a1fb
2026-07-23
auto-save: 2026-07-23T08:49:44 (1 files) — data/activation-schedule.json
e87c8fd
2026-07-23
auto-save: 2026-07-23T07:49:27 (1 files) — data/activation-schedule.json
6c990d3
2026-07-23
auto-save: 2026-07-23T06:49:07 (1 files) — data/activation-schedule.json
6673977
2026-07-23
auto-save: 2026-07-23T05:48:54 (1 files) — data/activation-schedule.json
6392b07
2026-07-23
auto-save: 2026-07-23T04:48:39 (1 files) — data/activation-schedule.json
377bfac
2026-07-23
auto-save: 2026-07-23T03:48:26 (1 files) — data/activation-schedule.json
0e08e48
2026-07-23
auto-save: 2026-07-23T02:48:12 (1 files) — data/activation-schedule.json
6d41608
2026-07-23
auto-save: 2026-07-23T01:47:57 (1 files) — data/activation-schedule.json
1cef2d7
2026-07-23
auto-save: 2026-07-23T00:47:42 (1 files) — data/activation-schedule.json
bc8fac7
2026-07-23
auto-save: 2026-07-23T00:17:34 (1 files) — data/activation-schedule.json
4307013
2026-07-22
auto-save: 2026-07-22T23:47:26 (1 files) — data/activation-schedule.json
2fc28de
2026-07-22
auto-save: 2026-07-22T22:47:10 (1 files) — data/activation-schedule.json
7e16131
2026-07-22
auto-save: 2026-07-22T21:46:55 (1 files) — data/activation-schedule.json
4ee3c9d
2026-07-22
auto-save: 2026-07-22T20:46:37 (1 files) — data/activation-schedule.json
724b4d9
2026-07-22
auto-save: 2026-07-22T19:46:22 (1 files) — data/activation-schedule.json
0ab50c4
2026-07-22
auto-save: 2026-07-22T18:46:04 (1 files) — data/activation-schedule.json
e944bb7
2026-07-22
auto-save: 2026-07-22T17:45:47 (1 files) — data/activation-schedule.json
d319cf7
2026-07-22
auto-save: 2026-07-22T16:45:31 (1 files) — data/activation-schedule.json
2db285a
2026-07-22
auto-save: 2026-07-22T15:45:17 (1 files) — data/activation-schedule.json
d97b2c9
2026-07-22
auto-save: 2026-07-22T14:44:58 (1 files) — data/activation-schedule.json
5b518c2
2026-07-22
auto-save: 2026-07-22T13:44:34 (1 files) — data/activation-schedule.json
4077412
2026-07-22
auto-save: 2026-07-22T12:44:11 (1 files) — data/activation-schedule.json
5837471
2026-07-22
chore: lint, refactor, version bump (session close)
1d223be
2026-07-22
auto-save: 2026-07-22T11:43:42 (1 files) — data/activation-schedule.json
9d72db8
2026-07-22
cadence prune: adopt DTD-C — union activator audit ids on mirror filter
d320634
2026-07-22
cadence: prune already-active SKUs, keep only staged (DRAFT) items
fa7bfaf
2026-07-22
auto-save: 2026-07-22T00:10:24 (1 files) — data/activation-schedule.json
7062f2a
2026-07-21
chore: v1.0.3 (session close)
1dcdfc5
2026-07-21
calendar viewer: mat_tier texture pill/tooltip passthrough (unified schedule); back-compat with legacy fix_type fallback
295fb99
2026-07-21
calendar: mirror unified textures-first + vendor round-robin over ALL 15,863 drafts (shared lib/rotation-order.js); was worklist-only ~5k
ea26699
2026-07-21
auto-save: 2026-07-21T00:34:53 (1 files) — data/activation-schedule.json
4a9644b
2026-07-20
auto-save: 2026-07-20T00:28:58 (1 files) — data/activation-schedule.json
2b87ea7
2026-07-19
auto-save: 2026-07-19T00:23:46 (1 files) — data/activation-schedule.json
43e5ab8
2026-07-18
auto-save: 2026-07-18T00:18:37 (1 files) — data/activation-schedule.json
1a3f616
2026-07-17
auto-save: 2026-07-17T00:14:48 (1 files) — data/activation-schedule.json
34633c4
2026-07-16
chore: version bump v1.0.2 (session close — exclude active products from activation calendar)
b23ac58
2026-07-16
activation drain: exclude vendor~Schumacher (internal-only, Steve rule 2026-07-16)
737df22
2026-07-16
auto-save: 2026-07-16T07:41:55 (1 files) — data/activation-schedule.json
93b5747
2026-07-16
auto-save: 2026-07-16T00:10:17 (1 files) — data/activation-schedule.json
52cf19d
2026-07-15
Exclude already-ACTIVE Shopify products from activation calendar
4074d9f
2026-07-15
auto-save: 2026-07-15T14:07:06 (3 files) — data/activation-schedule.json public/index.html server.js
5e3b839
2026-07-15
Activation calendar: vendor filter + see-all-staged list + cross-month reschedule
ca49220
2026-07-15
Activation calendar: drag SKU chips between days to reschedule go-live
09e4fb6
2026-07-15
Calendar chips are real hrefs to the staged Shopify product (open/cmd-click/right-click); plain click keeps detail modal
53bb7a5
2026-07-15
calendar day columns expand to show all SKUs; every chip clickable (detail modal + Shopify admin/storefront links); fix latent chip-row overlap (aspect-ratio grid rows collapsed)
6bb8427
2026-07-15
auto-save: 2026-07-15T00:33:42 (1 files) — data/activation-schedule.json
8132bfb
2026-07-13
Add daily schedule re-projection (regen.sh + launchd plist, 00:05)
e07fd55
2026-07-13
SKU Activation: assign a durable go-live DATE+TIME to every staged SKU
b6aac04
2026-06-24
Fix Connect button: don't navigate to /api/oauth/start when unconfigured (showed raw 503 JSON); show inline setup steps instead
a3d864f
2026-06-24
Google Calendar tab: fall back to SKU activation rollout when OAuth not connected (no more blank grid)
b585adf
2026-06-24
Default calendar to populated SKU Activation tab on first load (Google tab is empty until OAuth connect)
73ec16d
2026-06-24
Restyle DW Calendar to luxe Figma spec (Cormorant/Inter, plum/brass palette, white-card layout) — preserve all Google Calendar CRUD, 409 not-connected handling, tabs, modal-rig drag/resize, and SKU Activation grid
c3c31ac
2026-06-24
Document Google Calendar layer: README + updated server header comment
5498582
2026-06-24
Add two-tab DW Calendar UI: editable Google Calendar modal (create/edit/delete via modal-rig) + preserved SKU Activation grid; graceful not-connected state, event chips show created date+time
b9843c6
2026-06-24
Add Google Calendar read + editable CRUD backend (OAuth + events.list/insert/patch/delete), graceful not-connected guards, hardened .gitignore
a04151c
2026-06-21
auto-save: 2026-06-21T18:53:00 (1 files) — screenshot-calendar-v2.png
0871955
2026-06-21
calendar: default 500/day breadth-first (uncapped per-vendor) — true 35-day projection + updated note
633aba6
2026-06-21
DW Activation Calendar — 1-month rollout schedule (18/hr + 10/vendor/day) with vendor+image SKU chips
Skills used
/activation-schedule 145 /schedule 3 /day 3 /delete 2 /prune-active 1 /tooltip 1 /rotation-order 1 /index 1 /last 1 /move 1 /schedule-overrides 1 /cmd-click 1 /right-click 1 /storefront 1 /generate-schedule 1 /regenerate 1 /oauth 1 /start 1 /brass 1 /resize 1 /edit 1 /insert 1 /patch 1 /vendor 1
Creative ideas + design notes
Commits with substantial prose (≥120 chars) — the rationale behind each move.
9d72db8 · 2026-07-22 · cadence prune: adopt DTD-C — union activator audit ids on mirror filter
Keep mirror status='DRAFT' as the base filter, but also drop any shopify_id the
rotation activator recorded as action:'activated' in the last 2 days' audit
JSONL. Closes the mirror-resync lag (zero-lag for items this system flips)
without live Shopify calls or a competing status oracle. DTD 5/5 unanimous.
d320634 · 2026-07-22 · cadence: prune already-active SKUs, keep only staged (DRAFT) items
Add scripts/prune-active.js (idempotent, local-only) that drops any scheduled
SKU whose current mirror status != DRAFT from data/activation-schedule.json,
and apply it now: 15629 -> 15340 (pruned 289 already-live items). Server
re-reads on mtime; nightly generate-schedule.js still fully rebuilds.
52cf19d · 2026-07-15 · Exclude already-ACTIVE Shopify products from activation calendar
An already-live product has already gone active — it must not be staged for
redeployment. Gate the schedule generator + legacy fallback query on the
shopify_products mirror status, dropping rows where status=ACTIVE. Calendar
went 20,304 → 2,100 (18,204 already-live items removed; 2,100 non-active
staged items remain).
5e3b839 · 2026-07-15 · Activation calendar: vendor filter + see-all-staged list + cross-month reschedule
- Vendor dropdown (sorted by staged count) filters the calendar to one vendor;
summary switches to that vendor's staged total + first/last go-live + days used
- 'See all N staged' opens a flat list of every staged item for that vendor
(across all dates), each row with a date input to reschedule that SKU
- chip modal now has a 'Reschedule go-live' date input → moves to ANY date
(cross-month, which drag alone can't do)
- verified headless: vendor filter isolates chips, list shows 4405 rows, modal
reschedule present, 0 console errors
ca49220 · 2026-07-15 · Activation calendar: drag SKU chips between days to reschedule go-live
- chips are draggable; every day cell is a drop target (visual drop-target outline)
- POST /api/schedule/move updates the item's go_live_date/at + records a durable
override in data/schedule-overrides.json
- generate-schedule.js applies overrides so a regenerate keeps manual moves
- verified: 7999/7999 chips draggable, move persists + survives regen, 0 console errors
8132bfb · 2026-07-13 · Add daily schedule re-projection (regen.sh + launchd plist, 00:05)
Keeps every staged SKU's assigned date+time accurate as the worklist drains.
Bootstrap is Steve-pasted (launchd persistence).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
e07fd55 · 2026-07-13 · SKU Activation: assign a durable go-live DATE+TIME to every staged SKU
Every staged item waiting to go active now carries a persisted go_live_at (exact
drain date + HH:10 slot), replacing the ephemeral date-only projection that drifted.
- scripts/generate-schedule.js: projects the executor's real rr order + 500/day
hourly-:10 cadence into data/activation-schedule.json; 100% coverage assertion,
keyed on shopify_id (dw_sku is non-unique / blank on ~3.3k build-roll rows).
- server.js: /api/schedule now reads the persisted schedule (join shopify_products
on shopify_id so blank-sku items still get images), falls back to legacy compute
if the file is absent; POST /api/schedule/regenerate re-stamps on demand.
- index.html: chip tooltip shows go-active date+time, day headers show slot span,
summary shows the date+time coverage stat.
Stored as a local JSON file (NOT a PG table) because dw_unified_pub is FOR ALL
TABLES — any new table would auto-replicate to Kamatera. DTD verdict A (intent).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
File tree
16 files tracked. Click any to browse the source at HEAD.
rendered in 1ms