A personal homelab dashboard for service links, status, and operations.
  • JavaScript 46.2%
  • TypeScript 33.3%
  • CSS 19.1%
  • Shell 1.3%
Find a file
david a1213e21c1
All checks were successful
Publish Container / publish (push) Successful in 27s
Attribute Forgejo releases to registry user
2026-06-10 09:25:48 -07:00
.forgejo/workflows Attribute Forgejo releases to registry user 2026-06-10 09:25:48 -07:00
.vscode Document build metadata publishing 2026-05-28 15:18:50 -07:00
docs Attribute Forgejo releases to registry user 2026-06-10 09:25:48 -07:00
public Refresh dashboard logo and favicon 2026-05-21 11:47:44 -07:00
scripts Add milestone image publisher 2026-05-29 11:29:08 -07:00
server Improve lab view separation and Proxmox backups 2026-06-09 13:47:04 -07:00
src Improve lab view separation and Proxmox backups 2026-06-09 13:47:04 -07:00
.dockerignore Add Docker-ready integration foundation 2026-05-19 13:24:39 -07:00
.env.example Add UniFi Drive NAS API polling 2026-06-04 16:40:16 -07:00
.gitignore Move dashboard persistence to SQLite 2026-05-27 08:16:06 -07:00
AGENTS.md Enforce release version publishing 2026-05-29 11:45:18 -07:00
docker-compose.build.yml Publish dashboard image to Forgejo registry 2026-05-19 13:56:39 -07:00
docker-compose.yml Publish dashboard image to Forgejo registry 2026-05-19 13:56:39 -07:00
Dockerfile Add roadmap and runtime version visibility 2026-05-27 16:30:42 -07:00
homelab-dashboard.code-workspace Add Codex handoff and VS Code workspace 2026-05-27 13:34:13 -07:00
index.html Add resizable cards and dashboard branding 2026-05-21 09:03:23 -07:00
package-lock.json Attribute Forgejo releases to registry user 2026-06-10 09:25:48 -07:00
package.json Attribute Forgejo releases to registry user 2026-06-10 09:25:48 -07:00
README.md Polish wallboard and mobile layouts 2026-05-29 11:23:59 -07:00
tsconfig.json Initial homelab dashboard scaffold 2026-05-19 12:28:16 -07:00
vite.config.ts Initial homelab dashboard scaffold 2026-05-19 12:28:16 -07:00

Homelab Dashboard

A private dashboard for homelab service links, uptime, infrastructure stats, media libraries, and operational shortcuts.

Development

npm install
npm run dev

The Vite dev server handles the frontend. Production runs through the Node backend so API tokens stay server-side.

Build

npm run build

Production

Example docker-compose.yml:

services:
  homelab-dashboard:
    image: registry.example.com/YOUR-USER/homelab-dashboard:latest
    container_name: homelab-dashboard
    restart: unless-stopped
    environment:
      - DATA_DIR=/data
      - PORT=3000
    ports:
      - "3000:3000"
    volumes:
      - homelab-dashboard-data:/data

volumes:
  homelab-dashboard-data:

Start or update the container:

docker compose pull
docker compose up -d

The container listens on port 3000. On first launch, open http://YOUR-VM-IP:3000/admin to create the initial admin user.

It is ready to run behind an nginx reverse proxy. See docs/nginx-proxy.md. Container publishing notes live in docs/container-registry.md.

To build locally instead of using the Forgejo container registry:

docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build

Admin Settings

Open /admin after first launch to create the initial admin user. After registration, use the admin dashboard to configure module URLs and tokens.

The admin dashboard stores the admin user, module settings, notification history, and audit history in a SQLite database at /data/dashboard.db. Existing settings.json, notification-history.json, and audit-log.json files are imported into the database automatically on first startup after upgrade. Secret fields are saved server-side and are not returned to the browser after saving.

The dashboard includes local layout profiles, wallboard presets, mobile-friendly card layouts, theme presets, card drill-downs, a SQLite-backed event timeline, server-side Uptime Kuma and diagnostic history samples with retention controls, module-specific diagnostic guidance, running version visibility, redacted settings export, history export/clear controls, and optional webhook alert notifications. Browser-local items such as layout, theme, uptime ticks, and older fallback timeline data can be cleared from the Dashboard Recovery section.

The admin dashboard also includes a White Label section for changing the header title, subtitle, eyebrow text, logo URL, and module documentation link base URL.

See the Forgejo wiki for module-by-module setup notes, including where to find each URL, API key, and token:

https://forgejo.example.com/YOUR-USER/homelab-dashboard/wiki/Module-Setup

Project Shape

  • src/App.tsx renders the dashboard shell and service cards.
  • src/App.css contains the dashboard styling.
  • server/server.js serves the production app, WebSocket updates, and server-side integration endpoints.
  • docs/integrations.md tracks integration setup and implementation notes.