Library poster grid with a list toggle #151

Closed
opened 2026-08-23 19:42:26 +01:00 by naps62-yolo · 0 comments
Owner

Depends on: #145, #147

The library is a text list. With posters and ratings now on GET /api/movies
and GET /api/series (#147), it becomes a poster grid — the view is a shelf and
a shelf is how a person recognises what is on it.

  • Grid is the default. Poster, title, year, and the state the row carries
    today, legible on the card rather than dropped: derived §4.2 status for a
    series with its episode counts, wanted/state for a movie, the §5.7 waiver
    label where a file has one, and the audience.
  • A list toggle switches back to the current rows, unchanged. The list keeps
    the columns §4.2 built the view around, and it is the right view when the
    question is "what needs attention" rather than "what do we have".
  • The choice persists in localStorage. It is a per-person preference, not
    state the server has any opinion about, and it must survive a reload.
  • The §4.2 default filter — airing and incomplete for series, wanted and not
    on disk for movies — applies to both shapes, using the existing
    seriesNeedsAttention and movieNeedsAttention from web/src/library.ts.
    The collapse toggle for everything else stays.
  • A title with no poster gets a placeholder card of the same dimensions carrying
    its title, so the grid never reflows and never has a hole in it.
  • Cards link to /movies/{id} (#149) and /series/{id} (#129).

Images hotlink image.tmdb.org per §9.6; w342 is the right order of magnitude
for a grid card. The grid is responsive down to a phone, where the existing list
is what already works — do not ship a two-column grid of unreadable cards.

Goes through the impeccable skill before any markup, per CLAUDE.md.

Do not start until blitz/tv-tracking is on main — it rewrites the library
rendering in web/src/main.ts.

Depends on: #145, #147 The library is a text list. With posters and ratings now on `GET /api/movies` and `GET /api/series` (#147), it becomes a poster grid — the view is a shelf and a shelf is how a person recognises what is on it. - **Grid is the default.** Poster, title, year, and the state the row carries today, legible on the card rather than dropped: derived §4.2 status for a series with its episode counts, `wanted`/`state` for a movie, the §5.7 waiver label where a file has one, and the audience. - **A list toggle** switches back to the current rows, unchanged. The list keeps the columns §4.2 built the view around, and it is the right view when the question is "what needs attention" rather than "what do we have". - The choice persists in `localStorage`. It is a per-person preference, not state the server has any opinion about, and it must survive a reload. - The §4.2 default filter — `airing` and `incomplete` for series, wanted and not on disk for movies — applies to both shapes, using the existing `seriesNeedsAttention` and `movieNeedsAttention` from `web/src/library.ts`. The collapse toggle for everything else stays. - A title with no poster gets a placeholder card of the same dimensions carrying its title, so the grid never reflows and never has a hole in it. - Cards link to `/movies/{id}` (#149) and `/series/{id}` (#129). Images hotlink `image.tmdb.org` per §9.6; `w342` is the right order of magnitude for a grid card. The grid is responsive down to a phone, where the existing list is what already works — do not ship a two-column grid of unreadable cards. Goes through the `impeccable` skill before any markup, per CLAUDE.md. **Do not start until `blitz/tv-tracking` is on main** — it rewrites the library rendering in `web/src/main.ts`.
naps62-yolo added this to the Rich metadata milestone 2026-08-23 19:42:26 +01:00
naps62-yolo added the area/webdifficulty/moderatephase/6-tvtype/feature labels 2026-08-23 19:42:26 +01:00
naps62-yolo added a new dependency 2026-08-23 19:42:42 +01:00
naps62-yolo added phase/5-ui and removed phase/6-tv labels 2026-08-23 19:42:56 +01:00
naps62-yolo added a new dependency 2026-08-23 22:15:35 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yolo/arr#151