docs(design): title detail and enriched search rows
This commit is contained in:
@@ -485,6 +485,11 @@ which skips to the manual-grab flow.
|
|||||||
There is never a moment where the user has to know whether they are searching or
|
There is never a moment where the user has to know whether they are searching or
|
||||||
adding.
|
adding.
|
||||||
|
|
||||||
|
Result rows are enriched: a poster thumbnail and a rating, under the same rules
|
||||||
|
as title detail (§9.6) — images hotlinked from path fragments, the rating being
|
||||||
|
TMDB's `vote_average` with its `vote_count`. A trailer chip renders per row and
|
||||||
|
resolves only when clicked (§9.6).
|
||||||
|
|
||||||
### 9.3 Manual search results
|
### 9.3 Manual search results
|
||||||
|
|
||||||
Radarr's manual search is unusable because the raw release name is the dominant
|
Radarr's manual search is unusable because the raw release name is the dominant
|
||||||
@@ -540,6 +545,46 @@ notifying on everything and being muted within a week.
|
|||||||
|
|
||||||
Not notified: grabs, searches, downloads starting or finishing, soft fails.
|
Not notified: grabs, searches, downloads starting or finishing, soft fails.
|
||||||
|
|
||||||
|
### 9.6 Title detail
|
||||||
|
|
||||||
|
One detail surface per kind: `/movies/{id}` and `/series/{id}` (#129). For a
|
||||||
|
movie the release deck becomes a section of the page, and `/movies/{id}/releases`
|
||||||
|
keeps resolving; series keeps its season-and-episode shape.
|
||||||
|
|
||||||
|
**TMDB is the only metadata source.** The rating shown anywhere is TMDB's
|
||||||
|
`vote_average` with its `vote_count`. No OMDb, no IMDb or Rotten Tomatoes
|
||||||
|
scores — each would need a second upstream, a second key and a second thing
|
||||||
|
that can be down.
|
||||||
|
|
||||||
|
**Images are hotlinked** from `image.tmdb.org`. The API returns TMDB path
|
||||||
|
fragments, never URLs; the browser composes the URL and chooses the size. No
|
||||||
|
image proxy and no image cache in the service.
|
||||||
|
|
||||||
|
**Rich detail is not persisted.** It is served through arr-meta's existing
|
||||||
|
24-hour response cache. The single exception is `poster_path`, `backdrop_path`
|
||||||
|
and `vote_average`, stored on `movies` and `series` and written by the daily
|
||||||
|
metadata refresh (§8), so library views render without a TMDB call.
|
||||||
|
|
||||||
|
**Cast** is the top 10 billed — profile photo, actor name, character name —
|
||||||
|
linking out to that person's TMDB page. This does not contradict §2: nothing
|
||||||
|
about a person is stored, tracked or searched on. The non-goal is following
|
||||||
|
people, not naming them.
|
||||||
|
|
||||||
|
**External links** are TMDB always, IMDb for movies, TVDB for series — all from
|
||||||
|
ids the app already holds — plus a Rotten Tomatoes *search* link, which is a
|
||||||
|
query URL, not a resolved title page.
|
||||||
|
|
||||||
|
**Trailers resolve on click.** TMDB's search responses carry no videos, so a
|
||||||
|
trailer key costs a detail call. Rendering one chip per title and resolving the
|
||||||
|
one clicked keeps that cost at one call, and the 24h cache makes a repeat free.
|
||||||
|
|
||||||
|
**Library view.** A poster grid by default with a list toggle; the list keeps
|
||||||
|
the derived-status columns §4.2 built it around.
|
||||||
|
|
||||||
|
Out of scope here, because they are the adjacent scope most likely to creep:
|
||||||
|
watch providers, recommendations or similar titles, collections, person pages
|
||||||
|
inside the app, review text.
|
||||||
|
|
||||||
## 10. Persistence
|
## 10. Persistence
|
||||||
|
|
||||||
SQLite via `sqlx`, compile-time-checked queries, migrations in `arr-db`.
|
SQLite via `sqlx`, compile-time-checked queries, migrations in `arr-db`.
|
||||||
|
|||||||
Reference in New Issue
Block a user