v2.0.0 — Analytics, Live VCR, Mobile, Accessibility
Major release — 85+ commits covering new features, mobile responsive redesign, and 100+ bug fixes.
✨ New Features
- Per-Node Analytics — activity timeline, packet types, SNR distribution, hop count, peer network, hourly heatmap
- Global Analytics — Nodes tab — network status, role breakdown, claimed nodes, leaderboards
- Live Map VCR — rewind/replay/scrub through 24h of mesh activity at up to 4× speed, retro LCD clock
- Richer Node Detail — status badge, avg SNR/hops, observer table, QR codes, recent packets
- Claimed Nodes — star your nodes, always sorted to top, visual distinction, auto-sync favorites
- Packets "My Nodes" toggle — filter to only your mesh traffic
- Bulk Health API — single request replaces N individual health calls
- Network Status API — server-side computation across all nodes
- Live theme toggle — dark/light map tiles swap instantly without refresh
📱 Mobile
- Proper two-row VCR bar layout (no horizontal scrolling)
- iOS safe area support (home indicator clearance)
- Feed/legend hidden on mobile — just map + VCR + LCD
- JS-driven viewport height for reliable orientation changes
- Touch-friendly targets, horizontal scroll on tables
♿ Accessibility
- ARIA tab patterns, focus management, keyboard navigation
- Distinct SVG marker shapes per node role
- Color-blind safe palettes
- Screen reader support throughout
🐛 100+ Bug Fixes
- Excel-like column resize, panel drag reflow
- VCR scrub pagination, replay buffer management
- Express route ordering, race conditions
- XSS escaping, WebSocket cleanup, memory leaks
- Dark mode consistency, empty states, SRI hashes
See CHANGELOG.md for the full list.