Temporary logging to diagnose why dashboard isn't showing satellite
position and orbit track like the tab does.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove duplicate updateRealTimePositions() call from onSatelliteChange()
since calculatePasses() already calls selectPass() which triggers it
- Clear passes and selectedPass when changing satellites to prevent
using stale data
- Clear map layers when changing satellites
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When removing map layers, set references to null so new markers get
created properly on position updates. Also clear orbit track lines
when changing passes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Same fix as dashboard: LayerGroup doesn't have getBounds(), so collect
all coordinates and create bounds manually using L.latLngBounds().
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The polar plot now redraws the pass trajectory before overlaying the
current position indicator, matching the dashboard behavior.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bug: Both files were fetching orbit data for the dropdown-selected
satellite instead of the satellite from the selected pass.
Fixes:
- satellite_dashboard.html: updateRealTimePositions() now uses
passes[selectedPass].satellite instead of selectedSatellite
- index.html: updateRealTimePosition() now ensures the selected
pass's satellite is included in the position request, and added
includeTrack: true to get orbit data
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added updateRealTimePositions() call to selectPass() so the full orbit
track is fetched immediately when a pass is selected, not just on the
5-second interval.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
LayerGroup doesn't have getBounds() like polyline does. Collect all
coordinates and create bounds manually using L.latLngBounds().
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix property name mismatch: backend returns 'track' but index.html
expected 'orbitTrack'
- Start position updates when a pass is selected (was never called)
- Fetch position immediately on pass selection for instant orbit display
- Dashboard: always show full orbit track, not just when no pass selected
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix polar plot trajectory not displaying: backend returns 'el'/'az'
properties but code expected 'elevation'/'azimuth'. Updated both
drawPolarPlot() and drawPolarPlotPopout() to handle both formats.
- Fix ground track lines crossing entire map: added antimeridian
crossing detection to split orbit tracks into segments, preventing
lines from drawing across the map when crossing 180° longitude.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add aircraft filter dropdown (All/Military/Civil/Emergency) to both
main dashboard and full-screen ADS-B dashboard
- Military detection uses ICAO hex ranges and callsign prefixes
- Military aircraft display olive drab markers and MIL badges
- Fix aircraft icon rotation in adsb_dashboard.html by replacing
emoji (✈) with SVG icon - emoji had inconsistent orientation
across platforms causing incorrect heading display
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move isWifiRunning and isBtRunning declarations to top of script
to fix 'Cannot access before initialization' errors
- Update handleWifiNetwork hook to use renamed handleWifiNetworkImmediate
- Remove duplicate variable declarations
- Preserve selected pass ground track when updateRealTimePositions runs
- Only show real-time orbit track when no pass is selected
- Draw pass trajectory on polar plot with current position overlay
- Add drawCurrentPositionOnPolar helper for position marker
- Increase pass list height (250px → 400px max) to show more passes
- Add pass count to header (e.g., "UPCOMING PASSES (7)")
- Make pass items slightly more compact
- Add argparse with -p/--port, -H/--host, -d/--debug options
- Add --check-deps flag to verify tool availability
- Make host and port configurable via command line
- Consolidate README with Quick Start section
- Simplify installation into side-by-side table format
- Add Configuration section for environment variables
- Remove verbose API Endpoints and Stats Bar sections
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
Now updates existing cards instead of creating duplicates when
receiving updates for the same ICAO.
🤖 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>
Tracks connection state, message counts, and aircraft data
to help diagnose why data might not be flowing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Frontend expects status='started' but backend was returning 'success'.
This caused the frontend to show "Error: ADS-B tracking started".
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
If dump1090 is already running (e.g., user started it manually),
detect it via port 30003 and connect instead of reporting an error.
Also cleans up stale process state before starting.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Flask apps may run with a restricted PATH that doesn't include
/usr/local/bin. Now explicitly checks common installation locations.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Users building dump1090-fa from source (e.g., on Debian Trixie where
dump1090-mutability is unavailable) can now use it with ADS-B tracking.
🤖 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>
The trajectory line now only appears when the satellite is currently
making the selected pass, fixing the confusing mismatch between the
predicted path and real-time position.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Split orbit track into segments when longitude jumps > 180° to prevent
Leaflet from drawing lines across the entire map at the antimeridian.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Clear trackLine, satMarker, and orbitTrack before adding new ones
- Remove duplicate cleanup code
- Clear pass track when showing live orbit to avoid confusion
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Dashboard expects 'alt' but backend was sending 'altitude'.
Fixed in MSG,3 and MSG,5 parsing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Return 'success' status instead of 'started'
- Return 'already_running' status instead of 'error' when already running
- Add console logging in dashboard for debugging
- Add backend print statements for debugging
- Better error message display in alerts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Accept 'started' status in addition to 'success' and 'already_running'
- Show actual status in error message for debugging
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New route at /adsb/dashboard for standalone aircraft tracking
- Green-themed radar display with animated grid background
- Live map with aircraft markers colored by altitude
- Aircraft list sorted by altitude with callsign, speed, heading
- Selected aircraft detail panel with full telemetry
- Statistics panel (total, with position, max/avg altitude)
- Start/Stop tracking button
- Auto-cleanup of stale aircraft after 60 seconds
- Responsive layout for different screen sizes
- Uses existing /adsb/stream SSE endpoint for real-time data
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Convert all skyfield/numpy values to float() in /satellite/position
- Convert all skyfield/numpy values to float() in /satellite/predict
- Use bool() for visible flag
- Use int() for duration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Backend: trajectory uses 'el'/'az' instead of 'elevation'/'azimuth'
- Backend: added 'norad' and 'startTimeISO' fields to pass data
- Backend: added colors for NOAA-20 and METEOR-M2-3
- Frontend: fixed renderPassList to use 'satellite' and 'startTime'
- Frontend: fixed updateCountdown to use 'startTimeISO' and 'satellite'
- Frontend: fixed updateStats to count satellites object keys
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Real-time position updates now use selectedSatellite directly
- Added drawPolarPlotWithPosition() for live satellite position display
- Fixed /satellite/position endpoint to accept NORAD IDs
- Fixed parameter names (latitude/longitude) consistency
- Fixed response field name (track instead of orbitTrack)
- Shows satellite name and elevation on polar plot
- Glowing marker effect on current position
- Shows "BELOW HORIZON" indicator when satellite not visible
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added dropdown in header to select target satellite
- Styled hi-tech selector with cyan glow effects
- Updates tracking status indicator on satellite change
- Added NOAA-20 and METEOR-M2-3 satellites
- Dashboard now calculates passes for selected satellite only
- Extended prediction window to 48 hours
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Simplified grid to single row layout
- Fixed sidebar to not span multiple rows
- Lowered responsive breakpoint to 1200px
- Fixed panel flex-shrink behavior
- Better mobile breakpoint at 800px
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix parameter mismatch: accept both latitude/longitude and lat/lon
- Add NORAD ID to satellite name mapping for dashboard compatibility
- Widen sidebar from 350px to 420px for better readability
- Make sidebar scrollable to access all panels
- Add responsive breakpoints for different screen sizes
- Prevent telemetry values from wrapping
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- Animated grid background with scan line effect
- Real-time polar plot with satellite trajectory
- Ground track map with Leaflet
- Countdown timer to next pass
- Live telemetry display
- Upcoming passes list with quality badges
- Observer location with GPS support
- Auto-updates every 5 seconds
- Responsive layout for different screens
Access via /satellite/dashboard
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>