9c3eba55db4f3d0f2b1ba14ccae4476d923daecc
Small dependency-free HTTP server that exposes rocm-smi metrics (utilization, VRAM, temperature, power) as JSON on port 9101. Runs as the gpu-stats compose service with /opt/rocm mounted and /dev/kfd + /dev/dri passed through.
Homelab Dashboard
A small, self-contained single-page dashboard that links all your homelab services. Static site (HTML + CSS + JS), served by a lightweight nginx image. No backend, no database, no build step — just static files.
Services
Internal: Open WebUI, ComfyUI, Gitea, Jellyfin, Immich, Home Assistant, Audio Server / Dubplate, Nextcloud, Vaultwarden, Nginx Proxy Manager, Netbird.
External: gitlab-ixsol, gem360.
Features
- Responsive grid of service cards with icons, categories and a live "Online" indicator
- Open (new tab) + Copy URL per service
- Live search / filter across names, categories and URLs
- Live local clock
- Dark, themeable design; respects
prefers-reduced-motion
Run with Docker
docker compose up -d --build
Then open http://localhost:8888.
Without Docker (quick dev)
Any static file server works:
# from this directory
python3 -m http.server 8888
# or: npx serve . -l 8888
Edit services
All services live in one array at the top of script.js.
Add / remove / reorder entries there:
{ section: "internal", name: "My Service", url: "http://10.0.0.5:9000", cat: "infra", icon: "⚙️" }
section is either "internal" or "external".
cat is any key from the CATEGORIES map (or add your own).
Build the image manually
docker build -t homelab-dashboard .
docker run -d --name homelab-dashboard -p 8888:80 --restart unless-stopped homelab-dashboard
Notes
- The "Online" badge is cosmetic (a static site can't probe your services from the browser due to CORS). If you want real health checks later, a tiny backend that pings each URL would be the next step.
- Port 8888 is published by the Compose file; change it there if needed.
Description
Languages
JavaScript
69%
CSS
20.4%
HTML
5%
Python
3.5%
Dockerfile
1.2%
Other
0.9%