75 Roadmap
David Spitzer edited this page 2026-10-14 15:04:05 -07:00

Roadmap

This page mirrors the repo roadmap for the selected future-feature work. Update it at the end of each development iteration along with the matching repo docs.

Selected Work

# Area Status Next Slice
1 Release and version visibility Done Running version and build ID appear in dashboard APIs, the container workflow embeds the commit SHA, and Forgejo releases use release-specific notes.
2 Server-side history In progress Status changes, Uptime Kuma samples, and diagnostic samples now persist in SQLite with admin summary/export/clear/retention controls. Next: migrate useful local history into server history where possible.
3 Integration diagnostics In progress Poll success/failure timing is sampled into SQLite, shown as per-integration response trends, used for configurable response-threshold warning alerts, paired with per-module remediation playbooks, exportable through filtered history shortcuts, visible in admin response drill-down cards, and lazy-loaded in admin so settings pages do not wait for live polls. Next: add service-specific drill-down details from each integration's own health surface.
4 Backup and restore In progress Settings backup exists and dashboard history can be exported separately. Next: decide whether history should be bundled into full backups or kept as a separate operator archive.
5 Notification upgrades Foundation present Alert rail pills now show their triggering reason. Next: add quiet hours, deduping windows, severity routing, templates, and clearer alert lifecycle state.
6 Role-based access Foundation present Expand current admin/user split with finer permissions for viewing dashboard, managing settings, managing users, and viewing sensitive operational data.
7 Storage fleet depth In progress Storage capacity thresholds are configurable, ASUSTOR temperature thresholds are operator opt-in, aggregate capacity has stronger visual prominence, storage warning rows name the affected source/device, TrueNAS/ASUSTOR/UniFi NAS sources combine capacity and pool/volume health in named system rows, Storage admin fields are grouped by source in collapsible sections, TrueNAS polling uses JSON-RPC/WebSocket instead of deprecated REST with legacy API-key fallback, and UniFi NAS local Drive API polling now handles session, API-key, MFA/rate-limit fallback, and bare host/IP local URL paths. Next: add clearer NAS connection testing, deeper SMART/RAID/disk health details, disk temperature trends, and per-source threshold overrides where useful.
10 Wallboard and mobile polish In progress Wallboard presets now enter focused lab view, drag/resize controls stay out of wallboard mode, mobile lab view becomes a scrollable compact status board, small-screen lab controls are reduced to status/diagnostic actions, dashboard header controls/focus states now behave better across compact and mobile layouts, action tooltips/pressed states clarify dense controls, and lab-view graph/media cards now have stronger visual separation. Next: visual QA on target wall display and real phone/tablet breakpoints.
11 Performance hardening Foundation present Dashboard snapshots are cached in memory for faster reloads, duplicate initial dashboard/WebSocket polls are de-duped, and admin diagnostics lazy-load away from the settings bootstrap. Keep the performance smoke check; add budgets for bundle size, poll duration, API response size, and memory growth over longer runs.
13 Integration template/plugin path In progress Frontend diagnostics, admin recovery, admin health, sidebar-based admin navigation, and more resilient UniFi Network configured-site fallbacks have reduced operational friction. Next: continue extracting integration-specific backend/frontend modules before adding more service depth.

Audit Follow-ups (October 2026)

Work from the security and reliability audit, plus the new views. Released in 0.10.0; see the Changelog.

Area Status Notes
Server hardening Done Unauthenticated crashes via malformed URLs and cookies fixed, proxy-aware login rate limiting (TRUST_PROXY_HOPS), async password hashing with a dummy hash for unknown users, origin checks on writes and WebSockets, password re-entry for full backups, an optional setup token, a whitelist on the Seerr request endpoint, a Content-Security-Policy, atomic database writes, and graceful shutdown. See Security Hardening.
Background polling Done One server-side loop with per-integration intervals replaces per-browser timers. Alerts no longer depend on an open browser.
Integration fixes Done UniFi discovery wiring, the diagnostic trend window, Proxmox memory and shared-storage math, fewer Proxmox backup requests, TrueNAS per-call failures, UniFi NAS session reuse, webhook timeouts and retry cooldown, and secrets removed from webhook and SNMP errors.
Container Done Non-root user, production-only dependencies, healthcheck, and no-new-privileges. Test releases use a vX.Y.Z-rc.N tag so latest does not move (see Container Registry).
qBittorrent and SABnzbd Done Both poll every 10 seconds, with ban-avoiding login handling for qBittorrent. See qBittorrent and SABnzbd. Confirm against live instances with real credentials.
Alert noise Done A failing check no longer raises a second integration-wide alert, which roughly halves duplicate webhooks.
Wallboard Done (v1) Wallboard: a scaled 1920 x 1080 canvas, nine panels, blue for normal and red for problems, a loud NO LIVE DATA state, an optional read-only display key, and a backup limit that follows the "Backup max age hours" alert rule.
Dense work view Done (v1) Dense View is the default at /; the original dashboard is at /classic. Still missing from it: Seerr search and request, card layouts, and the diagnostics drawer.
Demo mode and docs Done Synthetic demo data, generated screenshots (npm run docs:screenshots), and the module setup guide and wallboard guide.
Frontend hardening Mostly done Done: link scheme validation, guarded localStorage writes, WebSocket backoff with REST fallback, modal keyboard handling, and the normalizer extracted from App.tsx. Remaining: memoized card rendering in the classic view, more App.tsx splitting, keyboard-accessible drag and resize.
Notification lifecycle Planned "Resolved" notifications, persisting alert state across restarts so active alerts do not re-fire after a deploy, quiet hours and severity routing.
Persistence Planned Replace sql.js (whole-file rewrites) with a real SQLite driver.
Sessions and users Planned Server-side session revocation, password change for non-admin users, and an admin password reset.
UniFi NAS TLS default Planned allowSelfSignedTls defaults to true for UniFi NAS but false elsewhere. Flip it, or add certificate pinning, once existing setups are migrated.
SNMP efficiency Planned One snmpwalk process per OID per poll. Use bulk walks or limit concurrency.
Wallboard data gaps Planned WAN throughput as numbers, TrueNAS replication and backup jobs, and TrueNAS disk temperatures.

Iteration Rule

Every implementation pass should update:

  • The relevant repo docs under docs/.
  • The Forgejo wiki page that operators use.
  • This roadmap when a selected feature moves between planned, in progress, foundation present, and done.
  • If a feature expands src/App.tsx, src/App.css, or server/server.js, first look for an extraction point or shared helper so feature work does not keep concentrating in the largest files.

Current First Slice

  • Added running version visibility to app APIs and the dashboard header.
  • Embedded the Forgejo commit SHA into published container images through DASHBOARD_BUILD.
  • Added SQLite-backed dashboard events, Uptime Kuma history samples, and integration diagnostic samples.
  • Added admin summary, export, and clear controls for server-side dashboard history.
  • Added admin retention settings for server-side dashboard history.
  • Surfaced per-integration diagnostic response trends from persisted samples.
  • Added diagnostic response warning thresholds from persisted samples.
  • Added operator-configurable diagnostic response thresholds in admin settings.
  • Added per-integration diagnostic explanations and threshold tuning guidance.
  • Added module-specific remediation playbooks for recurring integration failures.
  • Stabilized recent diagnostics/history work by extracting diagnostics guidance, dashboard diagnostics, admin recovery, and admin health UI out of the main app file.
  • Started wallboard and mobile polish with focused wallboard presets, cleaner non-editable lab cards, and compact scrollable mobile lab layouts.
  • Added configurable warning thresholds for storage capacity, ASUSTOR temperatures, and Proxmox resource summary cards.
  • Added filtered dashboard history exports and compact mobile lab controls.
  • Split admin integration configuration into a module menu and made ASUSTOR temperature warnings opt-in by default.
  • Promoted admin areas and each integration configuration into separate admin pages.
  • Moved admin page navigation into a highlighted sidebar with mobile-friendly overflow.
  • Let the admin sidebar scroll with the full page instead of using an independent scroll area.
  • Added admin diagnostic response drill-down cards with retained sample bars and ranked slow/warning trend summaries.
  • Gave the storage fleet aggregate stronger presence and made storage warning rows identify the affected source or device.
  • Simplified UniFi Network to device health, made Seerr stats-only, and showed all storage sources as named systems.
  • Grouped Storage Health admin fields by TrueNAS, thresholds, ASUSTOR units, and UniFi NAS units.
  • Made Storage Health admin source/device setup sections collapsible.
  • Generated Forgejo release notes from the registry release-history table instead of generic automated text.
  • Cached the latest dashboard snapshot and lazy-loaded admin Integration Health so reloads and settings pages do not wait on every live integration poll.
  • Combined Storage Health capacity and pool/volume details into per-system rows while keeping warning-specific details prominent.
  • Migrated TrueNAS Storage Health polling from deprecated REST calls to JSON-RPC over WebSocket.
  • Added TrueNAS JSON-RPC API-key fallback handling and clearer UniFi NAS SNMP empty-row diagnostics.
  • Scoped TrueNAS failed-job warnings in Storage Health to storage-related jobs so unrelated update jobs do not create storage warnings.
  • Showed alert reasons directly in the dashboard alert rail so top-level alerts are easier to identify.
  • Added UniFi NAS local Drive API polling with SNMP fallback for storage capacity and pool health.
  • Fixed UniFi NAS local API backend startup after adding Drive API polling.
  • Broadened UniFi NAS Drive API parsing and showed response-shape diagnostics when capacity still cannot be matched.
  • Added UniFi NAS SNMP positional row fallback for partial one-row capacity tables.
  • Added UniFi NAS SNMP sample-value diagnostics when capacity rows cannot be built.
  • Ignored UniFi NAS SNMP No Such Object replies and clarified when local Drive API credentials are required.
  • Broadened UniFi NAS local Drive API parsing for newer pool and global disk payloads.
  • Preferred UniFi NAS local login sessions over API-key auth when both are configured, with clearer auth-mode diagnostics.
  • Accepted bare host/IP values in UniFi NAS local API URL fields by defaulting them to HTTPS.
  • Fell back to UniFi NAS API-key auth when local session login requires MFA.
  • Avoided repeated UniFi NAS session login attempts after MFA or login-attempt rate-limit blocks.
  • Extracted Storage Health overview rendering from App.tsx and indexed storage checks in one pass.
  • Extracted backend module definitions and environment mapping from server/server.js.
  • Extracted Proxmox overview rendering from App.tsx and indexed Proxmox checks in one pass.
  • Extracted UniFi Network overview rendering from App.tsx and indexed device rows in one pass.
  • Let UniFi Network use configured Site ID and Host ID values when site discovery fails.
  • Extracted dashboard trend rendering from App.tsx and indexed diagnostic samples once per snapshot.
  • Extracted the shared backend JSON fetcher from server/server.js.
  • Extracted backend auth/session helpers from server/server.js.
  • Extracted dashboard history helpers from server/server.js.
  • Extracted dashboard alert aggregation helpers from server/server.js.
  • Extracted notification delivery helpers from server/server.js.
  • Extracted audit log helpers from server/server.js.
  • Extracted dashboard diagnostics summary helpers from server/server.js.
  • Extracted Seerr integration helpers from server/server.js.
  • Extracted Uptime Kuma integration helpers from server/server.js.
  • Extracted Proxmox, Plex, media, and Storage Health backend helpers from server/server.js.
  • Extracted UniFi Network backend helpers and discovery handling from server/server.js.
  • Extracted dashboard runtime caching, polling, and realtime payload orchestration from server/server.js.
  • Extracted SQLite persistence, settings, event-log, and legacy JSON migration helpers from server/server.js.
  • Extracted admin action handlers from server/server.js and the authentication screen from src/App.tsx.
  • Extracted the admin shell/sidebar from src/App.tsx and polished admin page navigation state.
  • Added shared status, check-dot, and empty-state UI primitives across dashboard surfaces.
  • Added stable loading skeletons for dashboard and admin health loading states.
  • Polished admin form controls, action buttons, and security/user form grouping.
  • Tightened dashboard integration card layout, meta rows, and card body scrolling.
  • Polished Storage Health unknown-capacity states and capacity row hierarchy.
  • Improved diagnostics drawer scanability with prioritized rows and status-toned headers.
  • Polished dashboard header controls, compact density, mobile layout, and keyboard focus states.
  • Added dashboard action tooltips and pressed states for toggle controls.
  • Made Proxmox backup task polling compatible with task endpoints that reject filter query parameters.
  • Improved lab-view separation for graph-heavy and image/logo-heavy cards.
  • Attributed Forgejo releases to the configured registry user instead of the Actions Ghost user.
  • Preserved the selected roadmap in repo docs and this wiki page.