What's new
In-UI update notification — Phase 1 of #16
A small ⬆ vX.Y.Z available badge now appears in the dashboard header whenever GitHub publishes a newer release than the running container. Click it and a modal opens with the release notes, a one-click Copy command button for git pull && docker compose up -d --build, and a link to the release page on GitHub. No more checking the repo by hand to see if you've fallen behind.
- A background collector hits the public GitHub releases API every 6 hours, caches the response in memory, and tolerates rate-limits / network errors silently (no badge, no log spam, no UI error).
- Surfaced through
/api/healthunder a newupdatekey (available,current,latest,release_url,release_notes,published_at,checked_at). - Opt out with
CHECK_UPDATES=false— no outbound calls when disabled.
A safe one-click update path (when requirements.txt, Dockerfile, and docker-compose.yml haven't changed across versions) is tracked as Phase 2 of #16 and will come in a future release.
Favicon
The dashboard now ships a 🛰️ favicon, so browser tabs and bookmarks no longer show a blank icon. SVG-first via <link rel="icon" type="image/svg+xml">, with a /favicon.ico Flask route for clients that request the legacy path.
Quality-of-life
CONTRIBUTING.md+ issue / PR templates so new contributors have a clear path: local-run instructions, the "add a monitor" pattern, and a "branch off the latestmain" note to prevent stale-branch merge churn (#13).- Unique-cloners badge alongside total clones, and
cacheSeconds=300on both clones badges so the README reflects new daily numbers within minutes instead of hours (#14, #15).
Acceptance (from #16, Phase 1)
- Running an old
VERSIONagainst a newer release on GitHub → badge appears within ≤6h. ✅ CHECK_UPDATES=false→ no outbound call, no badge. ✅- GitHub API offline / rate-limited → no error in UI, no badge, no log spam. ✅
🤖 Generated with Claude Code