Page:
Roadmap
No results
75
Roadmap
David Spitzer edited this page 2026-10-14 15:04:05 -07:00
Table of contents
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, orserver/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 Objectreplies 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.tsxand indexed storage checks in one pass. - Extracted backend module definitions and environment mapping from
server/server.js. - Extracted Proxmox overview rendering from
App.tsxand indexed Proxmox checks in one pass. - Extracted UniFi Network overview rendering from
App.tsxand 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.tsxand 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.jsand the authentication screen fromsrc/App.tsx. - Extracted the admin shell/sidebar from
src/App.tsxand 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.