Skip to content

v2.3.0 — Number Formats & the Midnight Fix

Choose a tag to compare

@zach7036 zach7036 released this 10 Jul 07:01
· 45 commits to main since this release

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