Migrate web/ to React #103

Closed
opened 2026-08-23 07:56:45 +01:00 by naps62-yolo · 1 comment
Owner

Operator decision: the UI will keep growing, so the ~2,200-line vanilla-TS SPA moves to React before more views land on it.

Scope:

  • React 19 + Vite, TypeScript strict. State stays simple (fetch + hooks); no state library until something needs it.
  • react-router with real routes: /, /library, /queues, /movies/{id}/releases, search state in the URL. This absorbs #102 — refresh, deep links and back/forward must restore the view.
  • Pixel-faithful port: .impeccable/design.json tokens and the existing look carry over unchanged. This is a rewrite of the markup layer, not a redesign.
  • All current behaviour preserved: health board, unified search deck, release buckets, library views, attention queues, the §9.3 chip columns.
  • just ci gate (biome + tsc) still passes; the embed path through arr-daemon build.rs is unchanged.

One PR is fine; it is a port, not a feature.

Depends on: #101

Labels: phase/5-ui, area/web, difficulty/moderate, type/chore

Operator decision: the UI will keep growing, so the ~2,200-line vanilla-TS SPA moves to React before more views land on it. Scope: - React 19 + Vite, TypeScript strict. State stays simple (fetch + hooks); no state library until something needs it. - react-router with real routes: `/`, `/library`, `/queues`, `/movies/{id}/releases`, search state in the URL. This absorbs #102 — refresh, deep links and back/forward must restore the view. - Pixel-faithful port: `.impeccable/design.json` tokens and the existing look carry over unchanged. This is a rewrite of the markup layer, not a redesign. - All current behaviour preserved: health board, unified search deck, release buckets, library views, attention queues, the §9.3 chip columns. - `just ci` gate (biome + tsc) still passes; the embed path through arr-daemon build.rs is unchanged. One PR is fine; it is a port, not a feature. Depends on: #101 Labels: `phase/5-ui`, `area/web`, `difficulty/moderate`, `type/chore`
naps62-yolo added the area/webdifficulty/moderatephase/5-uitype/chore labels 2026-08-23 07:56:53 +01:00
Author
Owner

Operator reversed the decision — the SPA stays vanilla. Closing; #102 reopens for the routes.

Operator reversed the decision — the SPA stays vanilla. Closing; #102 reopens for the routes.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yolo/arr#103