soulsync/api/video
BoulderBadgeDad 8e00670491 Video Calendar: 7-day week grid with air times + episode modal
A new isolated Calendar page (/api/video/calendar) — every upcoming episode for
your owned shows across a real 7-day week (today first), as art cards sorted by
air time with a per-cell breathing colour glow.

- Air times: enrich shows with TVDB airsTime (new shows.airs_time column +
  migration); cells show + sort by time, streaming (untimed/00:00) = "Anytime".
  One-time background backfill re-queues already-matched shows for the time.
- Click an episode → styled modal (show backdrop hero, episode still/synopsis,
  air date+time, owned badge, genres, "about the show"), with an explicit
  "Open full show page" action instead of navigating on click.
- Isolated: reads only video_library.db, writes nothing to the music side.
2026-06-15 18:28:02 -07:00
..
__init__.py Video Calendar: 7-day week grid with air times + episode modal 2026-06-15 18:28:02 -07:00
calendar.py Video Calendar: 7-day week grid with air times + episode modal 2026-06-15 18:28:02 -07:00
dashboard.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
detail.py video: episode detail expand (guest stars + bigger still) 2026-06-15 13:20:15 -07:00
enrichment.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
libraries.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
library.py video Library: server-side paging + sort/filter + card badges (music parity) 2026-06-14 08:57:25 -07:00
poster.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
scan.py video Tools: match music Database Updater (stats, cancel, real progress) 2026-06-14 07:35:57 -07:00
search.py video: smart multi-layer back button + next-level search/person 2026-06-15 08:30:17 -07:00