Commit Graph

74 Commits

Author SHA1 Message Date
Smittix
6229c25872 Add aircraft watchlist feature to ADS-B dashboard
- Add/remove callsigns, registrations, or ICAO codes to watch
- Alert notification and sound when watched aircraft detected
- Filter view to show only watched aircraft
- Visual highlighting with cyan border and star icon
- Watchlist persisted to localStorage

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 21:13:49 +00:00
Smittix
73ac74a9d6 Add clickable squawk code reference on aircraft dashboard
Click any aircraft's squawk code to see its meaning and a full
reference table of common codes. Emergency codes highlighted in red.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 21:03:42 +00:00
Smittix
ebb1e233d8 Add tagline 'See the Invisible' to branding
Update browser titles and headers across all pages with the new
tagline. Add 'Signal Intelligence Platform' as subtitle.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 20:55:41 +00:00
Smittix
fecc2237b8 Add aircraft photos from Planespotters.net
- Backend route to proxy photo requests from Planespotters API
- Frontend displays photo in Selected Target panel when available
- Photos are cached to avoid repeated API calls
- Clicking photo links to full image on Planespotters.net

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 12:22:29 +00:00
Smittix
9d0e417f2a Simplify GPS to gpsd-only and streamline UI controls
Remove direct serial GPS dongle support in favor of gpsd daemon connectivity.
The UI now auto-connects to gpsd on page load and shows a GPS indicator when connected.
Simplify ADS-B dashboard controls bar for a cleaner, more compact layout.
Add setup-dev.sh for streamlined development environment setup.

- Remove GPSReader class and NMEA parsing (utils/gps.py)
- Consolidate to GPSDClient only with auto-connect endpoint
- Add GPS indicator with pulsing dot animation
- Compact controls bar with smaller fonts and tighter spacing
- Add aircraft database download banner/functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 19:49:58 +00:00
Smittix
bb24bdb06c Fix aircraft dashboard audio endpoints (404 error)
Changed /spectrum/audio/* to /listening/audio/* to match the
actual listening_post blueprint URL prefix.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 21:37:36 +00:00
Smittix
02cb9c751a Fix audio dependency to use ffmpeg instead of sox
The Listening Post actually uses ffmpeg for audio encoding, not sox.
Updated all documentation, setup scripts, and code to reflect this:

- Removed unused find_sox() function from listening_post.py
- Simplified tools endpoint to only check for ffmpeg
- Updated CHANGELOG, README, HARDWARE.md, Dockerfile
- Fixed setup.sh to check for ffmpeg
- Updated frontend warnings to mention ffmpeg

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 20:53:54 +00:00
Smittix
8555938f52 Add readsb warning for HackRF/LimeSDR ADS-B tracking
- Enhanced /adsb/tools endpoint to detect SoapySDR hardware and check for readsb
- Added UI warning in aircraft dashboard when HackRF/LimeSDR is detected but readsb is missing
- Warning includes expandable installation instructions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 20:46:36 +00:00
Smittix
b5547d3fa9 Add Listening Post, improve setup and documentation
- Add Listening Post mode with frequency scanner and audio monitoring
- Add dependency warning for aircraft dashboard listen feature
- Auto-restart audio when switching frequencies
- Fix toolbar overflow on aircraft dashboard custom frequency
- Update setup script with full macOS/Debian support
- Clean up README and documentation for clarity
- Add sox and dump1090 to Dockerfile
- Add comprehensive tool reference to HARDWARE.md
- Add correlation, settings, and database utilities
- Add new test files for routes, validation, correlation, database

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 17:34:53 +00:00
Smittix
b2c32173e1 Add Airspy SDR support and persist GPS coordinates
Airspy support:
- Add AIRSPY to SDRType enum and driver mappings
- Create AirspyCommandBuilder using SoapySDR tools (rx_fm, readsb, rtl_433)
- Register in SDRFactory and add to hardware type dropdown
- Supports Airspy R2/Mini (24MHz-1.8GHz) and HF+ devices

GPS coordinate persistence:
- Save observer location to localStorage when manually entered or via geolocation
- Restore saved coordinates on page load in both index.html and adsb_dashboard.html
- Coordinates are shared between both pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 21:04:43 +00:00
Smittix
ba4c6999a6 Add rtl_tcp (remote SDR) support v1.1.0
Features:
- Add rtl_tcp support for pager and sensor decoding
  - Connect to remote RTL-SDR via rtl_tcp server
  - New UI toggle and host:port inputs in sidebar
  - Supports rtl_fm and rtl_433 with remote devices

- Add remote dump1090 support for ADS-B tracking
  - Connect to dump1090 SBS output on remote machine
  - New "Remote" checkbox with host:port in ADS-B dashboard

Backend changes:
- Add rtl_tcp_host/port fields to SDRDevice dataclass
- Add is_network property for detecting remote devices
- Update RTLSDRCommandBuilder to use rtl_tcp:host:port format
- Add create_network_device() to SDRFactory
- Add validate_rtl_tcp_host/port validation functions
- Update pager, sensor, and adsb routes to accept remote params

Note: dump1090 doesn't support rtl_tcp directly - use remote
dump1090's SBS output (port 30003) for remote ADS-B tracking.
2026-01-05 08:44:58 +00:00
Jon Ander Oribe
ac0235312c Add dashboard CSS and update screenshot paths
Moved CSS files for ADS-B and satellite dashboards, as well as the main index page. Updated screenshot image paths in the README and moved screenshot files to a dedicated images/screenshots directory. Adjusted HTML templates to use the new path for the CSS files.
2026-01-03 14:15:43 +01:00
James Smith
7b877727e1 Add baud rate selector for GPS dongle (fixes 4800 baud devices)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 17:33:57 +00:00
James Smith
e01c651bb4 Add GPS dongle support and fix Python 3.7/3.8 compatibility
- Add GPS dongle support with NMEA parsing (utils/gps.py, routes/gps.py)
- Add GPS device selector to ADS-B and Satellite observer location sections
- Add GPS dongle option to ADS-B dashboard
- Fix Python 3.7/3.8 compatibility by adding 'from __future__ import annotations'
  to all SDR module files (fixes TypeError: 'type' object is not subscriptable)
- Add pyserial to requirements.txt
- Update README with GPS dongle documentation and troubleshooting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 17:19:59 +00:00
James Smith
11c65448f5 Add aircraft trails, radar scope, and UI overhaul to ADS-B dashboard
- Aircraft Trails: altitude-based color gradient with fading opacity
- Virtual Radar Scope (PPI): canvas-based with sweep animation, range rings, compass rose
- UI Overhaul: controls bar at bottom, compact stats in header, MAP/RADAR view toggle
- Range selector syncs with both map rings and radar scope
- Click-to-select aircraft works in both map and radar views

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 21:14:40 +00:00
James Smith
b44546af53 Add manual location input for non-HTTPS environments
GPS geolocation only works on HTTPS or localhost. Added manual lat/lon
input fields so users can enter their coordinates directly when
accessing the app over HTTP on a local network.

- Added latitude/longitude input fields to both ADS-B tab and dashboard
- GPS button now checks for secure context before attempting geolocation
- Shows helpful error message directing users to use manual input
- Input fields update observer location and redraw range rings on change

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 19:01:37 +00:00
James Smith
2736c0c107 Add ADS-B range rings, statistics, geolocation, and reception stats
New features for both ADS-B tab and dashboard:

1. Range Rings - Concentric circles at 25, 50, 100, 150, 200nm showing
   distance from observer location with dashed styling and labels

2. Statistics Panel - Tracks:
   - Max range achieved (with aircraft that achieved it)
   - Total unique aircraft seen this session
   - Messages per second rate
   - Busiest hour of tracking

3. Geolocation Button - Gets user's actual GPS location to:
   - Center the map on their position
   - Calculate accurate distances for range statistics
   - Position range rings correctly

4. Reception Statistics - Real-time msg/sec counter to monitor
   receiver performance

All features work on both the ADS-B tab and full-screen dashboard.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 18:58:10 +00:00
James Smith
bde977c73d Fix overly broad military ICAO ranges causing false positives
The UK range 0x400000-0x43FFFF was the entire UK allocation, not just
military - this incorrectly flagged civilian airlines like EasyJet
(EZY callsign) as military aircraft.

Fixed ranges:
- Removed broad UK range, kept only RAF sub-range 0x43C000-0x43CFFF
- Narrowed France range to actual military 0x3F4000-0x3F7FFF
- Fixed Germany to correct Luftwaffe range 0x3D0000-0x3DFFFF
- Fixed typo in US range (0xADFFFFF -> 0xADFFFF)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 18:34:30 +00:00
James Smith
d1b10d55bd Add audio alerts for military aircraft and emergency squawk codes
Features:
- Audio alert plays when military aircraft or emergency squawk code
  (7500/7600/7700) is first detected
- Different tones: two-tone urgent alert for emergencies, single tone
  for military aircraft
- Visual banner notification appears at top of screen for 5 seconds
- Toggle checkbox to enable/disable audio alerts
- Alerts only trigger once per aircraft to avoid spam
- Implemented on both ADS-B tab and full-screen dashboard

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 17:31:15 +00:00
James Smith
7c215cf08c Add aircraft filtering and fix icon rotation
- 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>
2025-12-30 14:55:16 +00:00
James Smith
f7a08f890d Fix browser freeze in WiFi/Bluetooth modes and add dashboard links
- 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>
2025-12-29 21:55:48 +00:00
James Smith
ef66929848 Fix browser freeze with many aircraft by batching UI updates
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>
2025-12-25 08:47:16 +00:00
James Smith
f661efc9ae Fix altitude field name mismatch
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>
2025-12-24 12:51:34 +00:00
James Smith
ddeff002c9 Refactor into modular structure with improvements
- 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>
2025-12-23 16:28:48 +00:00