Skip to content

SwissHD: Changelog

Version history and architectural evolution of the SwissHD homelab dashboard.

The format is based on Keep a Changelog, and adherence to Semantic Versioning is enforced.


[0.25.2] - 2026-07-12

Changed

  • Activity Feed Pure-Text Editorial Buttons: Standardized footer and modal button text sizes to match log rows. Removed heavy button geometry and kept the delete confirmation controls in pure Swiss text style.

[0.25.1] - 2026-07-12

Added

  • Server Disk I/O Activity Metric: Added live disk I/O activity to server cards for Proxmox and K3s.

Fixed

  • Initial Server Metric Defaults: Server cards now start with storage: 0 and io: 0 instead of false default values.

[0.25.0] - 2026-07-12

Added

  • Authentik Module: Added backend monitoring for active users and failed login attempts in the last 24 hours.
  • Activity Log Deletion: Added DELETE /api/activity, SQLite purge support, and the dashboard DELETE LOGS confirmation modal.

[0.24.6] - 2026-07-10

Fixed

  • Logs Detail Routing: Activity detail routing now uses authoritative event type values so warnings and custom event metadata do not get misclassified as service status incidents.

[0.24.5] - 2026-07-10

Changed

  • Logs Feed Styling: Restyled log headers, status badges, pagination, and expanded detail panels to match the Swiss typography system.

[0.24.4] - 2026-07-10

Changed

  • Logs Feed Grid: Combined date and time into one timestamp column, restored service name formatting, added client-side sorting, and added 15-item pagination.

[0.15.0] - 2026-07-02

Added

  • Navidrome Integration: Added modular Subsonic API (v1.16.1) adapter in backend/modules/navidrome/ with automatic MD5 token challenge hashing via built-in node:crypto.
  • Dynamic Display (Idle vs. Playing): Implemented smart label switching where Navidrome displays total library tracks and albums when idle, but dynamically switches to display the now-playing song title and album when active playback is detected.
  • Frontend Label Override: Updated src/utils/mapper.ts so live API payloads (data.primaryLabel and data.secondaryLabel) dynamically override static label configurations in public/config.yaml.
  • CI/CD Deployment: Added NAVIDROME_USER and NAVIDROME_PASSWORD parameters to .github/workflows/deploy.yml for automated Docker builds.

[0.12.4] - 2026-07-02

Changed

  • Backend Architecture: Replaced manual module imports in backend/server.js with dynamic folder scanning (fs.readdirSync), enabling automatic discovery of service modules in backend/modules/.
  • Concurrency Limiting: Integrated a lightweight async concurrency limiter (mapConcurrent with limit 8) into GET /api/dashboard to prevent network flooding and CPU spikes when service caches expire.

Improved

  • Schema Validation & Type Safety: Created backend/lib/validator.js with JSDoc @ts-check annotations (ServiceResponse) to validate and sanitize service responses against the { status, primary, secondary } contract before returning data to the frontend.
  • Module Standardization: Updated calendar and nocodb service modules with standardized factory adapters (createCalendarService and createNocodbService).

Fixed

  • SWR Caching: Added @ts-check JSDoc annotations and runtime type narrowing guards ('status' in result) to createCache() in backend/lib/cache.js to resolve TypeScript compilation warnings and prevent runtime exceptions on non-object API payloads.

[0.12.3] - 2026-07-02

Fixed

  • Local Development: Corrected Vite proxy configuration in vite.config.ts by wrapping /api inside the proxy: object, permitting the local frontend to communicate reliably with the backend server.
  • Local Development: Injected NODE_TLS_REJECT_UNAUTHORIZED=0 into the npm run server script (package.json) to accept self-signed SSL certificates for services including ArgoCD, Proxmox Backup Server (PBS), and Portainer during local verification.

Removed

  • Dead Code: Cleaned and purged 14 unused code items across the project repository:
  • Purged unused loading state and setter variables from useDashboard.ts.
  • Purged unused visibleItems return value from useStaggeredEntry.ts.
  • Purged unused type definitions (ServiceItem.icon, QuickLink.visits, ServerMetric.authVar) from types.ts.
  • Purged redundant allEvents variable alias in Calendar.tsx.
  • Purged unused IBM Plex Mono font loading from index.html, reducing bundle payload by ~100KB.
  • Purged unused background grid patterns from the Tailwind configuration in index.html.
  • Purged orphaned metadata.json artifact from the repository root.

[0.12.2] - 2026-07-01

Added

  • FileBrowser Quantum: Integrated /api/settings/sources endpoint to fetch exact storage pool statistics (used and total disk capacity), allowing secondary badges to render formatted disk capacity metrics (e.g. 27.9 GB / 1.8 TB).
  • FileBrowser Quantum: Updated primary label in config.yaml to folders to accurately reflect root directory counts.

Changed

  • FileBrowser Quantum: Optimized service.js by removing unused fallback strategies (/api/resources/items and /api/tools/search) and excessive code comments. Folder and file enumeration is simplified directly from /api/resources and /api/settings/sources metadata.

[0.12.1] - 2026-07-01

Fixed

  • FileBrowser Quantum: Replaced username/password login flows with static API token authentication (FILEBROWSER_TOKEN). Quantum requires explicit per-user api permission enablement, making static token authentication standard over session logins.
  • FileBrowser Quantum: Realigned all API endpoints to match Quantum Swagger specifications. Resources endpoint uses path as a query parameter (/api/resources?path=/); search endpoint routes to /api/tools/search.
  • FileBrowser Quantum: Implemented auto-discovery of source names via /api/settings?property=sources, passing source query parameters across all API calls to resolve HTTP 500 source not provided errors on multi-source setups.
  • FileBrowser Quantum: Added /api/resources/items fallback for file counting when root resource metadata omits file counts.

Removed

  • FileBrowser Quantum: Purged FILEBROWSER_USERNAME and FILEBROWSER_PASSWORD environment variables and login flows. Replaced by FILEBROWSER_TOKEN.

[0.12.0] - 2026-07-01

Added

  • FileBrowser Quantum Module: Added backend integration for FileBrowser Quantum (backend/modules/filebrowser/). Polls /api/search and /api/resources to aggregate total files (primary label) and storage used (secondary label). Added FileBrowser Quantum alphabetically to config.yaml.

Fixed

  • FileBrowser Quantum: Updated authentication routing to attempt /api/auth/login (Quantum specification) before falling back to /api/login (legacy specification), resolving HTTP 404 routing errors.

[0.11.0] - 2026-07-01

Added

  • Portainer Module: Added backend integration for Portainer (backend/modules/portainer/). Uses API Access Token (X-API-Key: PORTAINER_API_KEY) authentication with caching. Polls /api/endpoints to aggregate running and total container counts across all Docker environments.

Fixed

  • Portainer: Removed trailing slashes from API base URLs to prevent HTTP 404 routing errors. Added support for Community Edition ContainerCount schema properties.

[0.10.0] - 2026-07-01

Added

  • Nginx Proxy Manager: Added backend integration module (backend/modules/npm/) with JWT authentication caching. Polls proxy hosts to display live metrics (enable and total hosts) on dashboard cards.
  • Maple Mono: Integrated self-hosted Maple Mono typography (.woff2 files in public/font/MapleMono-Woff2/) with @font-face rules for weights 100–800. Set Maple Mono as the default monospace font in config.yaml.
  • Fonts: Added dynamic support for fonts.mono in config.yaml, allowing runtime configuration of monospace typography via --font-mono CSS variable.
  • Traefik Module: Added backend integration for Traefik ingress controller following the config-driven dependency injection pattern. Displays active routers and services via /api/overview.

Changed

  • Config: Simplified public/config.yaml by replacing multi-line comment banners with concise 1-line section headers.
  • Longhorn: Realigned storage formatting in backend service and config.yaml to display as FREE: 58.1 GB.
  • Services Order: Reordered services alphabetically within each category in config.yaml.

[0.9.12] - 2026-07-01

Fixed

  • PBS: Purged leftover debug console.log statements from the PBS service module to maintain clean server logging.

[0.9.11] - 2026-07-01

Added

  • PBS Module: Added backend integration for Proxmox Backup Server. Follows the config-driven service pattern. Exports createPbsService(cfg). Displays total backup snapshots and deduplicated repository usage across all datastores via /api2/json/admin/datastore, /api2/json/admin/datastore/[NAME]/status, and /api2/json/admin/datastore/[NAME]/snapshots. Auth via PBS_API_TOKEN and PBS_API_SECRET.

[0.9.10] - 2026-06-30

Fixed

  • Prowlarr: Corrected grabs metric extraction to utilize /api/v1/indexerstats instead of /api/v1/history. Realigned indexer filter to evaluate enable boolean properties.

[0.9.9] - 2026-06-30

Added

  • Prowlarr Module: Added backend integration for Prowlarr indexer management. Exports createProwlarrService(cfg). Displays active indexer count and total grabs via /api/v1/indexer and /api/v1/history.

[0.9.8] - 2026-06-30

Added

  • Backrest Module: Added config-driven backend integration for Backrest backup monitoring. Exports createBackrestService(cfg). Displays snapshot count and 30-day storage usage via GetSummaryDashboard and ListSnapshots.

Changed

  • Architecture: Refactored all 13 service modules (Backrest, ArgoCD, Grafana, n8n, Longhorn, Jellyfin, Sonarr, Radarr, Lidarr, Bazarr, qBittorrent, Immich, NetAlertX) to the config-driven dependency injection pattern. Each module exports createXService(cfg) and handles its own config lookup and URL resolution.
  • NetAlertX: Reads target URL from config.yaml instead of NETALERTX_URL environment variables.

[0.8.1] - 2026-06-29

Removed

  • Dead Code: Purged 5 unused files (useMagnetic.ts, useMousePosition.ts, useTilt.ts, services/types.ts, utils/storage.ts) and 3 unused type interfaces (BackendStatus, GoogleCalendarConfig, AppState). Purged hardcoded switch statements from mapper.ts.

Changed

  • Metric Labels: Migrated display labels from mapper.ts switch statements into config.yaml under each service's labels mapping.
  • Service URLs: Added apiUrl property to decouple backend data fetching from clickable web navigation links.
  • AdGuard Home: Refactored service module to a YAML-driven multi-instance model declared under adguard.instances. Credentials remain isolated in environment variables via ADGUARD_[ID_UPPER]_USERNAME and ADGUARD_[ID_UPPER]_PASSWORD.

[0.8.0] - 2026-06-27

Added

  • NetAlertX & NocoDB Modules: Added backend integration for device presence tracking (/devices/totals) and NocoDB transaction record counts (v2 API).
  • AdGuard Home: Added support for multi-instance monitoring across local subnets and cloud VPS nodes.

[0.7.0] - 2026-06-XX

Added

  • Infrastructure: Added containerization Dockerfile, GitHub Actions CI/CD deployment workflows, Nginx reverse proxy configuration, and Kubernetes (K3s) deployment manifests.
  • Multi-Arch Builds: Added AMD64 and ARM64 multi-architecture container builds.

[0.6.0] - 2026-06-XX

Added

  • Grafana, n8n, ArgoCD & Longhorn: Added custom REST API polling and proxy configurations for Kubernetes cluster storage and continuous delivery stats.

[0.5.0] - 2026-06-XX

Added

  • Media Stack (*Arr & Torrents): Added comprehensive metrics for Sonarr, Radarr, Lidarr, Bazarr, Jellyfin, and qBittorrent.

[0.4.0] - 2026-06-XX

Added

  • Command Palette: Added an interactive, keyboard-driven search overlay (Ctrl+K / Cmd+K) with external search providers.
  • Dynamic Configuration: Migrated static UI layouts to declarative public/config.yaml properties.

Changed

  • Swiss Style 2026: Realigned interface to International Typographic Style principles featuring geometric dark mode, mathematical grid alignment, and flush-left numeric typography.

[0.3.0] - 2026-06-XX

Added

  • Google Calendar: Integrated Google Calendar API v3 with multi-calendar support and 24-hour automatic refresh cycles.

[0.2.0] - 2026-05-XX

Added

  • Proxmox & K3s Metrics: Integrated live telemetry extraction directly from Proxmox VE node APIs and K3s cluster metrics servers.

[0.1.0] - 2026-05-XX

Added

  • Initial Launch: Initial architectural foundation of the Swiss Homelab Dashboard built on Vite, React, TypeScript, and TailwindCSS.