soulsync/webui/static/video
BoulderBadgeDad a8ebc9b8f7 Video Discover page: trending hero + lazy genre/decade rails + filter grid
A browse-everything page for TMDB titles you don't own yet.

Backend:
- TMDBClient: discover() (genre/year/decade), curated() (popular / top_rated /
  now_playing / upcoming / on_the_air / airing_today), genres(); shared
  _disc_map() that carries backdrop + overview. trending() now routes through it.
- Engine: discover_curated / discover_filter / genre_list (cached + owned-
  annotated via library_id_for_tmdb) + _stamp_owned helper.
- api/video/discover.py: /discover/hero, /discover/genres, /discover/list
  (curated key | filtered kind+genre+year+decade+sort, paged).

Frontend (video-discover.js + .vdsc-* CSS + subpage markup):
- Cross-fading trending hero slideshow (per-title hue, dots, hover-pause,
  reduced-motion safe, click -> detail).
- Deep stack of Netflix-style rails (curated + every movie genre + decades),
  each lazy-loaded on scroll via IntersectionObserver, arrow scrollers,
  reusing the search card (owned 'In Library' / 'Preview' ribbon + get button).
- Filter bar (kind / genre / decade / sort) flips into a paged 'Load more' grid.
- Cards open detail through the shared soulsync:video-open-detail event.
2026-06-16 13:35:31 -07:00
..
video-calendar.js Video Calendar: EPG-style guide with a shared time axis + premium polish 2026-06-16 00:35:35 -07:00
video-dashboard.js video dashboard: Library card is a live scan tool (parity with music) 2026-06-14 09:28:14 -07:00
video-detail.js Video detail page: follow control uses the new curated watchlist 2026-06-16 10:44:59 -07:00
video-discover.js Video Discover page: trending hero + lazy genre/decade rails + filter grid 2026-06-16 13:35:31 -07:00
video-enrichment-manager.js video: coverage-card click re-queues failed matches (match music manager) 2026-06-15 14:27:25 -07:00
video-enrichment.js Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
video-get-modal.js Video get-modal: lazy-load episodes for un-owned (tmdb) shows 2026-06-16 12:57:42 -07:00
video-library.js Video: airing shows get BOTH the watchlist eye AND the get/download button 2026-06-16 11:07:53 -07:00
video-person.js Video: wire the eye/get button onto every card surface 2026-06-16 10:41:07 -07:00
video-scan.js video Tools: rehydrate scan state on page refresh (parity with music) 2026-06-14 07:59:44 -07:00
video-search.js Video: wire the eye/get button onto every card surface 2026-06-16 10:41:07 -07:00
video-settings.js Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
video-side.css Video Discover page: trending hero + lazy genre/decade rails + filter grid 2026-06-16 13:35:31 -07:00
video-side.js video: fix back-button loop when a 'More Like This' item is owned 2026-06-15 12:18:05 -07:00
video-watchlist-btn.js Watchlist eye: confirm before removing (the standard yes/no dialog) 2026-06-16 09:29:31 -07:00
video-watchlist.js Video: airing shows get BOTH the watchlist eye AND the get/download button 2026-06-16 11:07:53 -07:00
video-worker-orbs.js video: promote OMDb to a full 3rd enrichment worker (parity with TMDB/TVDB) 2026-06-14 23:07:35 -07:00