Files
manage/frontend
Developer 1da67f38c7 feat(services): frontend services runtime and widget rebind
PR 3 of 4 for the runtime service registry change.

- Add service + new-shape widget TypeScript types; widgets carry service_id
  + widget_kind (service-bound) or null (built-in).
- Add services API client + TanStack Query hooks; reconcile the widget API
  client/hooks to the new endpoints (remove sources/types; add builtin kinds).
- Add closed frontend service registry (integrations/registry.ts) mirroring the
  backend, with resolveWidget(widget, services) mapping a widget to its
  component + refresh interval.
- Add ServicePage at /services/:serviceType/:serviceId with config view,
  empty-on-edit secret inputs + 'set' badges, enable toggle, delete, and the
  service's widget-kind list.
- Register /services/:serviceType/:serviceId in App.tsx.
- Reconcile the six widget components to refreshIntervalMs + description props;
  rewrite WidgetConfigDialog around a service -> widget-kind picker.
- Update Dashboard test; add integrations/registry.test.ts.

Verification: frontend lint 0 errors, build success, 70 tests passed; backend
ruff clean, 222 tests passed.
2026-06-22 18:59:41 +00:00
..
2026-05-04 13:50:53 +02:00
2026-05-04 16:59:06 +02:00
2026-05-04 13:50:53 +02:00
2026-05-07 15:17:31 +02:00

Manage Frontend

React + TypeScript SPA for Manage, consuming the FastAPI backend.

Tech Stack

  • Vite — Build tool
  • React 18+ — UI framework
  • TypeScript — Type safety
  • @tanstack/react-query — Data fetching/caching
  • ag-grid-react — Data tables (media, file browser)
  • recharts — Monitoring charts
  • react-router-dom — Client-side routing
  • Tailwind CSS — Styling

Setup

cd frontend
npm install

Development

npm run dev

Runs on http://localhost:5173 with API requests proxied to http://localhost:8000.

Make sure the backend is running:

cd ../backend
uvicorn main:app --reload --port 8000

Build

npm run build

Output goes to frontend/dist/.

Pages

  • Dashboard (/) — Now playing, backend-collected per-machine monitoring table with 10-minute averages/min/max, library stats, frontend/backend version chips in the shell header
  • Monitoring (/monitoring) — Per-machine CPU/IO wait/RAM/network/disk charts, collector controls, and backend-collected recent action history
  • Media (/media) — Full-library table with sort/filter/search
  • Users (/users) — Read-only Jellyfin user list with optional Jellyseerr enrichment
  • File Browser (/files) — Remote directory browsing, ffprobe preview, jobs
  • Settings (/settings) — Persistent monitoring machine definitions and setup workflow

Environment Variables

Set VITE_API_URL and any OIDC variables directly in your shell or Compose build args if the API is not at http://localhost:8000. The frontend version defaults to the package.json version and can be overridden with VITE_APP_VERSION and VITE_APP_BUILD_INFO when you need explicit deployed labels.

VITE_API_URL=http://your-backend-host:8000

Configuration workflow examples

  • Local development: run docker compose -f docker-compose.dev.yml up --build, then open the app and add monitoring machines in the Settings tab.
  • Production: export the required Compose variables in your shell, run docker compose up --build, and manage local/remote machines from Settings.
  • Dashboard monitoring UI: the dashboard shows a compact, sortable table with one row per configured machine plus poller status.
  • Monitoring UI: the Monitoring tab shows one card per configured machine, including a recent action-history table populated by the backend poller. A machine can be local (the API host itself) or ssh (a remote host), and the UI treats both the same after configuration. The page also shows the backend poller health badge.

In development, the Vite proxy handles /api requests automatically.