- Add requestAnimationFrame batching to WiFi SSE handler to prevent
freeze with many access points
- Add requestAnimationFrame batching to Bluetooth SSE handler to
prevent freeze with many devices
- Move channel graph updates to batched frame instead of per-network
- Throttle probe analysis updates to every 2 seconds
- Optimize aircraft tracking in main page with marker state caching,
150 marker limit, and throttled auto-fit bounds
- Add "Full Screen Dashboard" links to aircraft and satellite modes
- Add "Main Dashboard" links to ADSB and satellite dashboards
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use requestAnimationFrame to throttle expensive rendering operations.
Previously every SSE message triggered full UI re-renders causing
browser unresponsiveness with 50+ aircraft.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend was sending 'alt' but frontend expected 'altitude'.
Standardized on 'altitude' throughout.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Split monolithic intercept.py (15k lines) into modular structure:
- routes/ - Flask blueprints for each feature
- templates/ - Jinja2 HTML templates
- data/ - OUI database, satellite TLEs, detection patterns
- utils/ - dependencies, process management, logging
- config.py - centralized configuration with env var support
- Add type hints to function signatures
- Replace bare except clauses with specific exceptions
- Add proper logging module (replaces print statements)
- Add environment variable support (INTERCEPT_* prefix)
- Add test suite with pytest
- Add Dockerfile for containerized deployment
- Add pyproject.toml with ruff/black/mypy config
- Add requirements-dev.txt for development dependencies
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>