Homepage is the library; signal chain moves to settings; logo links home #173

Closed
opened 2026-08-24 16:12:45 +01:00 by naps62-yolo · 1 comment
Owner

Implements the two navigation rulings from #169.

Depends on: #169

The library is the homepage. / renders the library view. The board route
is removed from router.ts — it is not kept as an alias and not left reachable at
another path. Everywhere that currently navigates to { kind: "board" } as a
fallback or a return target navigates to the library instead: the Esc handler, the
cleared-search restore, the detail views' parent route, and the not-found fallback
in parseRoute.

The signal chain moves to settings. The <main class="board"> section — the
four modules and the bus traces between them — becomes a section of the settings
page, alongside roots and policies. The health poll that drives the lamps has to
keep running and keep painting them there. The master lamp stays on the rail
exactly as it is now, so the at-a-glance read does not depend on visiting
settings.

The wordmark links home. arr on the rail navigates to /. It is currently a
plain <h1>; give it a real activatable control with a keyboard-reachable focus
state, rather than a click handler on a heading. The rail's existing library
nav button and the wordmark now go to the same place — that is fine and expected,
but check the aria-pressed state on the nav buttons still reads correctly once
library is also the root route.

Watch for: the library view currently assumes it is entered from a nav click, so
confirm a cold load of / populates it; and the search box restores the board on
clear, which now means the library.

Scope: web/index.html, web/src/router.ts, web/src/main.ts, web/src/settings.ts,
web/src/style.css. Goes through the impeccable skill — this is a navigation and
layout change, so drive the browser with agent-browser and look at it.

Non-goals: no change to what the library view itself renders, and no change to the
queues or settings content beyond receiving the diagram.

Implements the two navigation rulings from #169. Depends on: #169 **The library is the homepage.** `/` renders the library view. The `board` route is removed from `router.ts` — it is not kept as an alias and not left reachable at another path. Everywhere that currently navigates to `{ kind: "board" }` as a fallback or a return target navigates to the library instead: the Esc handler, the cleared-search restore, the detail views' parent route, and the not-found fallback in `parseRoute`. **The signal chain moves to settings.** The `<main class="board">` section — the four modules and the bus traces between them — becomes a section of the settings page, alongside roots and policies. The health poll that drives the lamps has to keep running and keep painting them there. The master lamp stays on the rail exactly as it is now, so the at-a-glance read does not depend on visiting settings. **The wordmark links home.** `arr` on the rail navigates to `/`. It is currently a plain `<h1>`; give it a real activatable control with a keyboard-reachable focus state, rather than a click handler on a heading. The rail's existing `library` nav button and the wordmark now go to the same place — that is fine and expected, but check the `aria-pressed` state on the nav buttons still reads correctly once library is also the root route. Watch for: the library view currently assumes it is entered from a nav click, so confirm a cold load of `/` populates it; and the search box restores the board on clear, which now means the library. Scope: `web/index.html`, `web/src/router.ts`, `web/src/main.ts`, `web/src/settings.ts`, `web/src/style.css`. Goes through the `impeccable` skill — this is a navigation and layout change, so drive the browser with `agent-browser` and look at it. Non-goals: no change to what the library view itself renders, and no change to the queues or settings content beyond receiving the diagram.
naps62-yolo added this to the Removal and navigation milestone 2026-08-24 16:12:45 +01:00
naps62-yolo added the phase/5-uiarea/webdifficulty/moderatetype/feature labels 2026-08-24 16:12:45 +01:00
naps62-yolo added a new dependency 2026-08-24 16:13:23 +01:00
Author
Owner

While verifying in the browser I hit a bug outside this issue's scope: ratingChip in web/src/main.ts guards vote_average === null but not undefined. Against a daemon still serving the pre-#148 list schema (the one deployed on :7878 right now), /api/series omits poster_path/vote_average entirely, so expanding "show N satisfied" in the library throws undefined.toFixed in formatRating and the card groups render empty. Current arr-api always serializes the fields as null, so this only bites a dev UI pointed at a stale daemon — but any pnpm dev session against the deployed instance will hit it until that daemon is redeployed.

While verifying in the browser I hit a bug outside this issue's scope: `ratingChip` in `web/src/main.ts` guards `vote_average === null` but not `undefined`. Against a daemon still serving the pre-#148 list schema (the one deployed on :7878 right now), `/api/series` omits `poster_path`/`vote_average` entirely, so expanding "show N satisfied" in the library throws `undefined.toFixed` in `formatRating` and the card groups render empty. Current arr-api always serializes the fields as `null`, so this only bites a dev UI pointed at a stale daemon — but any `pnpm dev` session against the deployed instance will hit it until that daemon is redeployed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yolo/arr#173