v2.3.0 — Number Formats & the Midnight Fix
One new display setting and a set of real bug fixes — including one that had been hiding since the v2 heatmap shipped.
🔢 Number format setting
From Discussion #10 (@Svardsten53)
Settings → Display & Units has a new Number format dropdown: 1,234.5 (default), 1.234,5, or 1 234,5. It applies to every count, total, and percentage across the UI — Insights, Year in Birds, Reports, the Species gallery, and the live pages. Like the unit settings, it's display-only: nothing stored changes, switching is instant and reversible, and CSV exports and the API always keep machine format so nothing downstream breaks.
🌙 Fixed: "Heatmap unavailable" on days with no detections yet
Right after midnight — before the first bird of the day — the Today page's heatmap could show "Heatmap unavailable / Heatmap data could not be parsed." The error message blamed the data, but the data was fine: the heatmap's empty-state code was destroying its own canvas element, every subsequent refresh crashed on the missing canvas, and the crash was misreported as a parse failure. The empty day now simply says "No species yet today." (matching the Grid view), and the heatmap redraws cleanly when the first bird arrives.
Along the way, two genuine latent bugs got fixed too:
- A busy database (e.g. the analyzer writing) made the chart endpoints answer with an HTML notice instead of JSON. They now wait out brief locks, and fail as proper JSON if they must fail.
- The endpoint is hardened against stray output and invalid UTF-8, and the client now logs the raw response whenever something truly unparseable arrives.
📦 Fixed: updates not reaching your browser
Static JavaScript was version-stamped by date, so two updates on the same day produced identical URLs — and the PWA's cache served the old file, even past a hard refresh. Assets are now stamped by exact modification time, and this release's service worker automatically discards every browser's old cache. If an update ever seemed to "not take" before, this was why; from now on a plain refresh after updating is enough.
Updating
cd ~/BirdNET-Pi
git fetch origin
git pull --ff-only origin main
sudo bash scripts/update_birdnet_snippets.sh
Then refresh your browser.
🤖 Generated with Claude Code