docs(m7): implementation plan for #352 playlists CRUD slice 1

11 tasks: migration 0014 + sqlc queries (T1), Service CRUD methods
(T2), track operations (T3), cover-collage generator (T4), 9 HTTP
handlers + service wiring (T5), frontend api helper + types + qk (T6),
PlaylistCard (T7), PlaylistTrackRow with drag handle + soft-mark
strikethrough (T8), AddToPlaylistMenu wired into TrackMenu (T9),
/playlists index page (T10), /playlists/[id] detail with drag-reorder
(T11).

Soft-mark cascade preserved end-to-end: schema (track_id nullable +
ON DELETE SET NULL with denormalized snapshot columns), service (no
cascade on track delete; rows persist), UI (greyed-out + strikethrough
for null track_id rows). Cover collage is synchronous inline 2x2
JPEG via image/jpeg stdlib; SVG fallback rasterization is a follow-up.
This commit is contained in:
2026-05-03 00:59:21 -04:00
parent 65bb4e6dfd
commit e056c8b8be
File diff suppressed because it is too large Load Diff