Search results: poster, rating, overview and trailer chip #148

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

Depends on: #144, #147

Search rows are text. §9.2 says there is never a moment where the user has to
know whether they are searching or adding, and a row with no artwork makes the
add decision harder than the API already makes it — the poster, the year and the
rating are how a person tells two films with the same title apart.

Every row, library and TMDB alike, gains:

  • a poster thumbnail on the left, from poster_path via image.tmdb.org
    (§9.6 — the browser composes the URL and picks the size; w92 or w154 is
    the right order of magnitude for a row);
  • year and a rating chip from vote_average, with vote_count as its title
    attribute where the response carries one;
  • a one-line overview, truncated, never wrapping the row to a second height;
  • a trailer chip which opens YouTube in a new tab.

The trailer chip resolves on click through GET /api/trailer (#144): show a
pending state on the chip, then window.open the YouTube watch URL. A 404 turns
the chip into a quiet "no trailer" rather than an error — TMDB simply has no
video for plenty of titles and that is not a failure. Never open a tab before
the key resolves; a popup blocker eats a tab opened from an async callback, so
open it on the click and navigate it when the key arrives, or handle the block
visibly. Do not fire the request on hover or on render — the whole point of
§9.6's resolve-on-click is that a page of results costs zero extra calls.

Rows with no poster get a placeholder of the same size, so the column edge does
not jitter as results stream in.

An episode row shows its series' poster and keeps reading as
Series · SxxEyy · Episode title.

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

Do not start until blitz/tv-tracking is on main — it rewrites the search
rendering in web/src/main.ts, including the series and episode row variants
this changes.

Depends on: #144, #147 Search rows are text. §9.2 says there is never a moment where the user has to know whether they are searching or adding, and a row with no artwork makes the add decision harder than the API already makes it — the poster, the year and the rating are how a person tells two films with the same title apart. Every row, library and TMDB alike, gains: - a poster thumbnail on the left, from `poster_path` via `image.tmdb.org` (§9.6 — the browser composes the URL and picks the size; `w92` or `w154` is the right order of magnitude for a row); - year and a rating chip from `vote_average`, with `vote_count` as its title attribute where the response carries one; - a one-line overview, truncated, never wrapping the row to a second height; - a **trailer chip** which opens YouTube in a new tab. The trailer chip resolves on click through `GET /api/trailer` (#144): show a pending state on the chip, then `window.open` the YouTube watch URL. A 404 turns the chip into a quiet "no trailer" rather than an error — TMDB simply has no video for plenty of titles and that is not a failure. Never open a tab before the key resolves; a popup blocker eats a tab opened from an async callback, so open it on the click and navigate it when the key arrives, or handle the block visibly. Do not fire the request on hover or on render — the whole point of §9.6's resolve-on-click is that a page of results costs zero extra calls. Rows with no poster get a placeholder of the same size, so the column edge does not jitter as results stream in. An episode row shows its series' poster and keeps reading as `Series · SxxEyy · Episode title`. Goes through the `impeccable` skill before any markup, per CLAUDE.md. **Do not start until `blitz/tv-tracking` is on main** — it rewrites the search rendering in `web/src/main.ts`, including the series and episode row variants this changes.
naps62-yolo added this to the Rich metadata milestone 2026-08-23 19:41:43 +01:00
naps62-yolo added the area/webdifficulty/moderatephase/6-tvtype/feature labels 2026-08-23 19:41:43 +01:00
naps62-yolo added a new dependency 2026-08-23 19:42:42 +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
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yolo/arr#148