Skip to content

Add UIPlugin — embedded web UI for Fetcharr#18

Open
ParadauxIO wants to merge 1 commit intoegg82:mainfrom
ParadauxIO:main
Open

Add UIPlugin — embedded web UI for Fetcharr#18
ParadauxIO wants to merge 1 commit intoegg82:mainfrom
ParadauxIO:main

Conversation

@ParadauxIO
Copy link
Copy Markdown

Adds a new Maven module (UIPlugin) that serves a live web dashboard on port 8080 (configurable) using only the JDK's built-in HttpServer and pure HTML/CSS/JS with no external frontend dependencies.

How it works:

  • Starts an embedded com.sun.net.httpserver.HttpServer on startup
  • Subscribes to all FetcharrEvents and stores them in a capped circular buffer (default 500 entries)
  • Serves a single-page dashboard at http://localhost:{port}/
  • Pushes live updates to the browser via Server-Sent Events (/api/stream) with 25-second heartbeat keepalive to maintain the connection
  • REST endpoints: /api/status (updaters + plugins JSON) and /api/events

UI features:

  • Updaters panel — each *arr instance with type, URL, search amount, interval, missing status, monitored-only and cutoff flags
  • Plugins panel — all loaded plugins with version and description
  • Live activity log — newest-first, color-coded by service (Radarr=blue, Sonarr=green, Lidarr=orange, Whisparr=pink), with skipped/cancelled events visually dimmed
  • Per-service filter buttons, full-text search, and clear log
  • Dry Run badge in the header when fetcharr is in dry-run mode
  • Status panel auto-refreshes every 15 seconds

This was vibecoded and used ~ 22,000 tokens
I hope it annoys reddit if you merge it

Adds a new Maven module (UIPlugin) that serves a live web dashboard on
port 8080 (configurable) using only the JDK's built-in HttpServer and
pure HTML/CSS/JS with no external frontend dependencies.

How it works:
- Starts an embedded com.sun.net.httpserver.HttpServer on startup
- Subscribes to all FetcharrEvents and stores them in a capped circular
  buffer (default 500 entries)
- Serves a single-page dashboard at http://localhost:{port}/
- Pushes live updates to the browser via Server-Sent Events (/api/stream)
  with 25-second heartbeat keepalive to maintain the connection
- REST endpoints: /api/status (updaters + plugins JSON) and /api/events

UI features:
- Updaters panel — each *arr instance with type, URL, search amount,
  interval, missing status, monitored-only and cutoff flags
- Plugins panel — all loaded plugins with version and description
- Live activity log — newest-first, color-coded by service
  (Radarr=blue, Sonarr=green, Lidarr=orange, Whisparr=pink), with
  skipped/cancelled events visually dimmed
- Per-service filter buttons, full-text search, and clear log
- Dry Run badge in the header when fetcharr is in dry-run mode
- Status panel auto-refreshes every 15 seconds

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant