useState was called after conditional return (React hooks rules violation),
causing the settings page to crash. moved all hooks to top level.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
all server output now prefixed with ISO timestamp and level [INFO/WARN/ERROR].
logs requests, scan start/complete, job lifecycle, errors. skips noisy SSE
endpoints.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- show version (from package.json) in nav bar, warn on frontend/server mismatch
- apply path_mappings to file access check and command string at execution time
so existing scans with old jellyfin paths work without re-scanning
- add clear done/errors button on execute page
- bump version to 2026.03.04
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
deletes all pending jobs, reverts their review plans back to pending so they
can be re-reviewed and re-approved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jellyfin may use different internal paths (e.g. /tv/) than container mounts
(/series/). path_mappings config (or PATH_MAPPINGS env var) translates at scan
time. configurable via setup ui or env var format: /tv/=/series/,/data/=/movies/
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
workflow builds on push to main, tags with latest + calver from
package.json, pushes to git.felixfoertsch.de container registry.
docker-compose.yml now pulls from registry instead of building locally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
rewrite from monolithic hono jsx to react 19 spa with tanstack router
+ hono json api backend. add scan, review, execute, nodes, and setup
pages. multi-stage dockerfile (node for vite build, bun for runtime).
previously, server/ and src/shared/lib/ were silently excluded by
global gitignore patterns (/server/ from emacs, lib/ from python).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>