- 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>
- Batch updates every 1 second instead of every message
- Remove verbose MSG,3 debug output
- Reduces frontend updates from hundreds/sec to ~1/sec
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- App starts dump1090-mutability with network mode enabled
- Waits 3 seconds for initialization
- Connects to SBS port 30003 for position data
- No longer relies on system service being configured
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Skip the port check and always connect to localhost:30003.
The SBS parser will handle connection errors and retry.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add try/except for value conversion
- Add position debug output
- Fix MSG,5 to extract callsign and altitude
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Check for SBS port 30003 instead of JSON endpoint
- Parse SBS BaseStation format for aircraft data
- Supports MSG types 1,3,4,5,6 for callsign, position, velocity, squawk
- Auto-reconnect on connection loss
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Check for existing JSON endpoint before starting dump1090
- Use existing service if available (port 30005 or 8080)
- Add poll_adsb_json_only function for service mode
- Don't kill system service on stop, just stop polling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Kills any orphaned dump1090, rtl_adsb, rtl_433, multimon-ng, rtl_fm
processes on app startup to prevent "device busy" errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix poll_dump1090_json using wrong process reference
- Add debug output for ADS-B decoder selection
- Add debug output for JSON and raw aircraft detection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Explicitly adds user site-packages to sys.path when ENABLE_USER_SITE
is disabled, allowing pip-installed packages like skyfield to be found.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix ground track to show full orbit (±45 min) with past/future segments
- Redesign satellite section as 2x2 grid layout for better visibility
- Add startup dependency notification in top-left corner
- Make tool status mode-specific (pager/433MHz/aircraft show relevant tools)
- Add skyfield library for accurate orbital calculations
Make the radar panel span both grid columns to eliminate empty space on the right and center the visualization.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace canvas aircraft map with Leaflet.js + OpenStreetMap
- Add dark/light theme toggle with localStorage persistence
- Add satellite pass countdown with live timer
- Add countdown to satellite popout with selectable passes
- Add client probe analysis for WiFi privacy leak detection
- Hide waterfall and output console in satellite mode
- Fix satellite countdown to update when selecting different passes
- Update documentation with new features
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Make drone counter clickable with detailed popup showing brand, SSID,
BSSID, channel, signal, distance estimate, and detection time
- Replace stats bar text labels with emoji icons and tooltips
- Add collapsible sections (click header to toggle)
- Slim down mode tabs with icons (📟📡📶🔵)
- Tighten spacing throughout (smaller padding, margins)
- Add border-radius to buttons and tabs for softer look
- Improve hover states and visual feedback
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add drone detection via SSID patterns and OUI prefixes with visual alerts
- Add optional "kill interfering processes" checkbox for monitor mode to prevent
affecting other network adapters
- Remove unused BT attack options (replay, dos, spoof, vuln scan, l2cap ping)
- Make rogue AP counter clickable to show detailed popup with all BSSIDs
- Add handshake capture status panel with real-time progress, elapsed time,
file size, and automatic handshake detection using aircrack-ng
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New features:
- Client vendor lookup: Shows manufacturer for WiFi clients using OUI database
- 5GHz channel utilization graph: Visual display of 5GHz channel usage
- Proximity alerts: Watch list for specific MAC addresses with popup alerts
- Rogue AP detection: Alerts when same SSID appears on multiple BSSIDs
- Handshake capture status: Pulsing indicator during active capture
- Sound toggle already exists via MUTE button
UI improvements:
- Added ROGUE counter to WiFi stats bar
- Added Proximity Alerts section with watch list management
- Both 2.4GHz and 5GHz channel graphs update in real-time
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Channel utilization labels now white for better visibility
- After enabling monitor mode, automatically refresh interface list
- Auto-select the new monitor interface in dropdown
- Add loading state to Enable Monitor button
- Show "Ready to scan!" message after monitor mode enabled
- Simplified workflow: Select adapter → Enable Monitor → Scan
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Get list of interfaces before/after enabling monitor mode
- Detect new interface by comparing before/after sets
- Multiple fallback methods: new interface detection, regex patterns, iwconfig check
- Verify interface exists before using it
- Add detailed debug logging for troubleshooting
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove kismet_process global variable
- Remove Kismet from tool status display
- Remove Kismet scan mode radio button
- Simplify start/stop WiFi functions to use airodump directly
- Remove Kismet routes (/wifi/kismet/start, /wifi/kismet/stop, /wifi/kismet/devices)
- Remove Kismet from kill_all and tools check
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Simplified Bluetooth scanning to just:
- bluetoothctl (Recommended)
- hcitool (Legacy)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
These features weren't providing useful data since:
- Most BLE devices don't broadcast friendly names
- Many OUI prefixes are unregistered/private
- Classification requires identifiable device names
Kept: Bluetooth Proximity Radar (visual device tracking)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Created oui_database.json with 300+ vendor prefixes
- Code now loads from external JSON file first, falls back to built-in
- Added /bt/reload-oui endpoint to reload database without restart
- Easy to add new vendors: just edit oui_database.json
To add a new vendor, edit oui_database.json and add:
"XX:XX:XX": "Vendor Name"
Then call POST /bt/reload-oui or restart the server.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>