DBDelve
Dive deep into your data. A fast, native, multi-engine database client written in Rust. Free and open source, no telemetry.
Live public status page for my k3s homelab. AI-assisted FastAPI app that reads fixed Prometheus queries, shipped as a multi-arch image and deployed by Flux.
Developer toolsHTML · PythonGitHub @turpinator-xOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A live, public status page for my two-node k3s homelab: https://dashboard.jarrodturpin.dev
It shows CPU and memory use across the cluster, running pods, node health and uptime, and whether each self-hosted app is up. The numbers refresh every 15 seconds.
flowchart LR
V["Visitor"] -- HTTPS --> CF["Cloudflare Tunnel"]
CF --> D["dashboard pod<br>FastAPI, 15 s cache"]
D -- "fixed PromQL queries" --> P["Prometheus<br>(kube-prometheus-stack)"]
main.py): a small FastAPI app. It sends a fixed set of PromQL queries to the cluster's Prometheus in parallel, caches the answers for 15 seconds, and serves them as JSON at /api/stats. /healthz answers the Kubernetes probes without touching Prometheus. If Prometheus is unavailable, it keeps serving the last good numbers. If it has none yet, it returns 503.static/index.html): one static page, with no framework and no third-party scripts or fonts. It polls /api/stats.Dockerfile): a two-stage build. uv installs the locked dependencies in the first stage, and the final image has only Python, the virtualenv and the app, running as UID 10001.The page is public, so it's built to expose as little as possible:
RuntimeDefault/docs is off)main are protected from being moved, force-pushed or deleted.Needs uv and access to a Prometheus.
kubectl -n monitoring port-forward svc/kube-prometheus-stack-prometheus 9090:9090 # in another terminal
PROMETHEUS_URL=http://localhost:9090 uv run uvicorn main:app --reload
Then open http://localhost:8000.
| Setting | Default | Meaning |
|---|---|---|
PROMETHEUS_URL | the in-cluster Prometheus Service | Where to send queries |
CACHE_SECONDS | 15 | How long one round of answers is reused |
APPS | linkding,audiobookshelf | Deployments to show as up or down |
uv run ruff format --check . && uv run ruff check . && uv run pytest
The tests replace the Prometheus call with a fake one, so they need no cluster. They cover the health check, the response shape, app up/down, the cache, the 503 path, and serving the page.
On pushes to main, v* tags and pull requests, GitHub Actions runs the same checks, then builds the image for linux/amd64 and linux/arm64 (the cluster has a mini PC and a Raspberry Pi 5). Pushing a v* tag publishes the image to ghcr.io/turpinator-x/homelab-dashboard with that version. The current release is v0.1.2, on Python 3.15. Commit messages follow Conventional Commits, enforced by Commitizen.
Claude Code wrote the application code: the FastAPI backend (main.py), the frontend (static/index.html), the tests, the Dockerfile and the CI workflow. I set the requirements, typed and edited the code myself, reviewed it and ran it. I also own how it's deployed: the Flux deployment, the pod security settings and the NetworkPolicy, documented in turpinator-x/homelab.
The project idea comes from the KubeCraft community.