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: 0andio: 0instead 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 dashboardDELETE LOGSconfirmation modal.
[0.24.6] - 2026-07-10
Fixed
- Logs Detail Routing: Activity detail routing now uses authoritative event
typevalues 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 inbackend/modules/navidrome/with automatic MD5 token challenge hashing via built-innode: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.tsso live API payloads (data.primaryLabelanddata.secondaryLabel) dynamically override static label configurations inpublic/config.yaml. - CI/CD Deployment: Added
NAVIDROME_USERandNAVIDROME_PASSWORDparameters to.github/workflows/deploy.ymlfor automated Docker builds.
[0.12.4] - 2026-07-02
Changed
- Backend Architecture: Replaced manual module imports in
backend/server.jswith dynamic folder scanning (fs.readdirSync), enabling automatic discovery of service modules inbackend/modules/. - Concurrency Limiting: Integrated a lightweight async concurrency limiter (
mapConcurrentwith limit 8) intoGET /api/dashboardto prevent network flooding and CPU spikes when service caches expire.
Improved
- Schema Validation & Type Safety: Created
backend/lib/validator.jswith JSDoc@ts-checkannotations (ServiceResponse) to validate and sanitize service responses against the{ status, primary, secondary }contract before returning data to the frontend. - Module Standardization: Updated
calendarandnocodbservice modules with standardized factory adapters (createCalendarServiceandcreateNocodbService).
Fixed
- SWR Caching: Added
@ts-checkJSDoc annotations and runtime type narrowing guards ('status' in result) tocreateCache()inbackend/lib/cache.jsto 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.tsby wrapping/apiinside theproxy:object, permitting the local frontend to communicate reliably with the backend server. - Local Development: Injected
NODE_TLS_REJECT_UNAUTHORIZED=0into thenpm run serverscript (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
loadingstate and setter variables fromuseDashboard.ts. - Purged unused
visibleItemsreturn value fromuseStaggeredEntry.ts. - Purged unused type definitions (
ServiceItem.icon,QuickLink.visits,ServerMetric.authVar) fromtypes.ts. - Purged redundant
allEventsvariable alias inCalendar.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.jsonartifact from the repository root.
[0.12.2] - 2026-07-01
Added
- FileBrowser Quantum: Integrated
/api/settings/sourcesendpoint to fetch exact storage pool statistics (usedandtotaldisk 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.yamltofoldersto accurately reflect root directory counts.
Changed
- FileBrowser Quantum: Optimized
service.jsby removing unused fallback strategies (/api/resources/itemsand/api/tools/search) and excessive code comments. Folder and file enumeration is simplified directly from/api/resourcesand/api/settings/sourcesmetadata.
[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-userapipermission enablement, making static token authentication standard over session logins. - FileBrowser Quantum: Realigned all API endpoints to match Quantum Swagger specifications. Resources endpoint uses
pathas 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, passingsourcequery parameters across all API calls to resolve HTTP500 source not providederrors on multi-source setups. - FileBrowser Quantum: Added
/api/resources/itemsfallback for file counting when root resource metadata omits file counts.
Removed
- FileBrowser Quantum: Purged
FILEBROWSER_USERNAMEandFILEBROWSER_PASSWORDenvironment variables and login flows. Replaced byFILEBROWSER_TOKEN.
[0.12.0] - 2026-07-01
Added
- FileBrowser Quantum Module: Added backend integration for FileBrowser Quantum (
backend/modules/filebrowser/). Polls/api/searchand/api/resourcesto aggregate total files (primary label) and storage used (secondary label). Added FileBrowser Quantum alphabetically toconfig.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/endpointsto 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
ContainerCountschema 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 (enableandtotalhosts) on dashboard cards. - Maple Mono: Integrated self-hosted Maple Mono typography (
.woff2files inpublic/font/MapleMono-Woff2/) with@font-facerules for weights 100–800. Set Maple Mono as the default monospace font inconfig.yaml. - Fonts: Added dynamic support for
fonts.monoinconfig.yaml, allowing runtime configuration of monospace typography via--font-monoCSS 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.yamlby replacing multi-line comment banners with concise 1-line section headers. - Longhorn: Realigned storage formatting in backend service and
config.yamlto display asFREE: 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.logstatements 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 viaPBS_API_TOKENandPBS_API_SECRET.
[0.9.10] - 2026-06-30
Fixed
- Prowlarr: Corrected grabs metric extraction to utilize
/api/v1/indexerstatsinstead of/api/v1/history. Realigned indexer filter to evaluateenableboolean 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/indexerand/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 viaGetSummaryDashboardandListSnapshots.
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.yamlinstead ofNETALERTX_URLenvironment 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 frommapper.ts.
Changed
- Metric Labels: Migrated display labels from
mapper.tsswitch statements intoconfig.yamlunder each service'slabelsmapping. - Service URLs: Added
apiUrlproperty 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 viaADGUARD_[ID_UPPER]_USERNAMEandADGUARD_[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.yamlproperties.
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.