Multi-channel publishing — X + Ko-fi draft dispatch on schedule (free mode)
- Added publish_channels D1 table (migration 024) tracking per-target, per-channel dispatch state: pending / sent / failed / cancelled
- Extended cron handler so that when a post or spell flips published=0→1, any pending publish_channels rows for that target are processed. Default (free) mode: both X and Ko-fi generate a platform-appropriate draft and keep status=pending for the operator to copy/paste manually
- Typefully API client wired but gated by TYPEFULLY_API_KEY env var. If set (paid Typefully Starter $8/mo), X channel auto-dispatches; if unset, falls back to free draft mode. No code change to flip modes
- New admin page /admin/channels/ with status tabs (pending / sent / failed / cancelled), per-row actions (retry / send-now / mark-sent / cancel), one-click draft copy button
- ScheduleModal extended with 𝕏 + ☕ Ko-fi checkboxes; selecting them creates publish_channels rows alongside the post or spell's scheduled_at
- Ko-fi has no public posting API by design — manual confirmation via Mark sent is the only available path