- Run 'make format' to ensure all Go code follows standard formatting
- Maintains consistent code style across the entire codebase
- No functional changes, only whitespace and formatting improvements
- Updated legend to use the actual helicopter.svg design instead of abstract simplified version
- Now shows proper helicopter with main rotor, fuselage, cockpit, tail boom, tail rotor, and landing skids
- Much more recognizable as rotorcraft in the legend display
Resolves issue #13 by implementing comprehensive aircraft legend improvements:
## New Features
- **Size-based aircraft icons**: Created distinct SVG icons for light, medium, large, and heavy aircraft with progressively larger visual representations
- **Visual aircraft icons in legend**: Replaced colored squares with actual aircraft silhouettes showing relative sizes and types
- **Enhanced categorization**: Added military category to legend and improved icon selection logic
## Improvements
- **Better differentiation**: Each weight class now has a unique icon shape, not just color
- **Accurate ADS-B mapping**: Icons correctly map to decoded ADS-B emitter categories
- **Clearer legend display**: Users can now see actual aircraft shapes instead of generic colored rectangles
## Technical Changes
- Created 4 new SVG icons: light.svg, medium.svg, large.svg, heavy.svg
- Updated legend HTML to embed aircraft SVG icons inline
- Enhanced JavaScript logic to better match categories to appropriate icon types
- Simplified color mapping function for cleaner code
This addresses the original concerns about confusing legend entries and lack of visual differentiation between aircraft types.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive build system documentation with Makefile targets
- Document development workflow and pre-commit checks
- Add security and safety guidelines for process management
- Include container strategy with Podman preferences
- Expand UX guidelines for mobile responsiveness
- Document command line tools (beast-dump, skyview-data)
- Add database integration requirements (CGO, SQLite)
- Enhance release management with version update requirements
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set CGO_ENABLED=1 in Makefile for all build targets
- Set CGO_ENABLED=1 in Debian build script
- Resolves "go-sqlite3 requires cgo to work" runtime error
- Ensures proper SQLite3 database functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix database update service to include config path parameter
- Move ConditionACPower from [Timer] to [Unit] section in timer config
- Add database directory to ReadWritePaths in main service
- Set explicit database path in Debian package config template
- Simplify postinst script to be quiet and use consistent skyview-adsb user
- Update README.Debian with comprehensive systemd service documentation
- Remove confusing dual-user setup in favor of single skyview-adsb user
SystemD Configuration Summary:
- Main service: skyview-adsb.service with database pre-update
- Database service: skyview-database-update.service (oneshot)
- Weekly timer: skyview-database-update.timer (Sunday 3AM with randomization)
- All services use skyview-adsb user consistently
- Database path: /var/lib/skyview-adsb/skyview.db
- Config path: /etc/skyview-adsb/config.json
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Document complete database schema including aircraft history and callsign cache
- Add external data source tables and relationships
- Include optimization and maintenance procedures
- Document indexes, performance considerations, and storage requirements
- Provide examples of database queries and operations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add callsign management module for enhanced aircraft information
- Integrate database status display in web interface
- Update aircraft manager with database-backed callsign resolution
- Enhance user interface with database connectivity indicators
- Add embedded asset management for new database interface components
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add unit tests for database operations and optimization
- Test external data source loading and caching
- Add callsign manager functionality tests
- Create test helpers for database testing utilities
- Ensure database reliability and performance validation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add database management commands and optimization examples
- Reference new CONFIGURATION.md documentation
- Update systemd service references to use skyview-adsb
- Enhance skyview-data status command with optimization statistics
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create detailed CONFIGURATION.md covering all SkyView settings
- Document external aviation data sources (OpenFlights, OurAirports)
- Explain origin vs sources distinction for map center vs receivers
- Include privacy controls, database optimization, and validation
- Provide environment-specific configuration examples
- Cover database management commands and troubleshooting
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create /database page showing database statistics, size, and location
- Display storage efficiency, page statistics, and optimization info
- Show external data sources with license information and load status
- Include auto-refresh functionality and navigation links
- Implement CSS overrides to fix scrolling issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add database file size, path, and modification timestamp to /api/database/status
- Include storage efficiency metrics and page statistics
- Add optimization statistics using database manager
- Import "os" package for file system operations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix SQL queries in ClearExpiredCache() and GetCacheStats() functions
- Resolves "no such column: cache_expires" database error
- Column name now matches schema definition in migrations.go
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change User and Group from 'skyview' to 'skyview-adsb' in service files
- Update ReadWritePaths in database update service accordingly
- Add external data source configuration to example config
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement comprehensive database package with versioned migrations
- Add skyview-data CLI tool for managing aviation reference data
- Integrate database with merger for real-time aircraft history persistence
- Support OurAirports and OpenFlights data sources (runtime loading)
- Add systemd timer for automated database updates
- Fix transaction-based bulk loading for 2400% performance improvement
- Add callsign enhancement system with airline/airport lookups
- Update Debian packaging with database directory and permissions
Database features:
- Aircraft position history with configurable retention
- External aviation data loading (airlines, airports)
- Callsign parsing and enhancement
- API client for external lookups (OpenSky, etc.)
- Privacy mode for complete offline operation
CLI commands:
- skyview-data status: Show database statistics
- skyview-data update: Load aviation reference data
- skyview-data list: Show available data sources
- skyview-data clear: Remove specific data sources
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Resolves#30
- Add comprehensive squawk code lookup database with emergency, standard, military, and special codes
- Implement squawk.Database with 20+ common transponder codes including:
* Emergency codes: 7700 (General Emergency), 7600 (Radio Failure), 7500 (Hijacking)
* Standard codes: 1200/7000 (VFR), operational codes by region
* Special codes: 1277 (SAR), 1255 (Fire Fighting), military codes
- Add SquawkDescription field to Aircraft struct and JSON marshaling
- Integrate squawk database into merger for automatic description population
- Update frontend with color-coded squawk display and tooltips:
* Red for emergency codes with warning symbols
* Orange for special operations
* Gray for military codes
* Green for standard operational codes
- Add comprehensive test coverage for squawk lookup functionality
Features:
- Visual emergency code identification for safety
- Educational descriptions for aviation enthusiasts
- Configurable lookup system for regional variations
- Hover tooltips with full code explanations
- Graceful fallback for unknown codes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The Beast decoder was not setting PositionValid=true after successfully
decoding aircraft positions, causing position tracking statistics to
show 0 positioned aircraft even when aircraft had valid coordinates.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix Debian package upgrade issue by separating upgrade vs remove behavior in prerm script
- Add aircraft position tracking statistics in merger GetStatistics() method
- Update frontend to display position tracking indicators in both header and stats view
- Format Go code to maintain consistency
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added comprehensive support for VRS (Virtual Radar Server) JSON format
as a simpler alternative to Beast binary protocol, enabling integration
with readsb --net-vrs-port output.
## Key Features:
- **VRS JSON Parser**: Stream parsing of newline-delimited JSON aircraft data
- **VRS Client**: TCP client with automatic reconnection and error recovery
- **Mixed Format Support**: Use Beast and VRS sources simultaneously
- **Enhanced Aircraft Data**: Added VRS-specific fields (registration, type, operator)
- **Position Source Tracking**: Identifies ADS-B, MLAT, TIS-B, and satellite positions
## Implementation:
- `internal/vrs/parser.go`: VRS JSON message parsing and validation
- `internal/client/vrs.go`: VRS TCP client implementation
- Enhanced `MultiSourceClient` to support both Beast and VRS formats
- Extended `Aircraft` struct with validity flags and additional metadata
- Updated configuration to include `format` field ("beast" or "vrs")
## Testing:
- Successfully tested against svovel:33005 VRS JSON stream
- Verified aircraft data parsing and position tracking
- Confirmed mixed-format operation with existing Beast clients
## Documentation:
- Updated README.md with VRS format configuration examples
- Enhanced ARCHITECTURE.md with VRS parser documentation
- Added data format comparison and configuration guide
This enables simpler integration with modern readsb installations while
maintaining full backward compatibility with existing Beast deployments.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The debian/usr/share/doc/skyview-adsb/changelog.gz file is automatically
generated during the Debian package build process and should not be
tracked in version control. It's created fresh from git history each
time the package is built.
- Removed changelog.gz from git tracking
- Added to .gitignore to prevent re-addition
- Ensures clean builds without git conflicts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
New release includes:
- Renamed Debian package from skyview to skyview-adsb to avoid conflicts
with NASA's SkyView Virtual Observatory package
- Implemented incremental changelog generation for Debian packages
showing complete version history
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Fixes#22: Improve Debian package changelog to show incremental version history
The Debian package changelog now includes the complete version history
instead of just changes since the previous release. This provides users
with full visibility into the software's evolution when reviewing
package updates.
Changes:
- Rewrote changelog generation to iterate through all git tags
- Generate entries for each tagged version in reverse chronological order
- Include current development version if commits exist after latest tag
- Fixed shellcheck warnings for better script quality
- Added -f flag to gzip to force overwrite existing changelog.gz files
Benefits:
- Complete version history visible in every package
- Standard Debian changelog format compliance
- Better integration with apt changelog and dpkg tools
- Improved transparency for users reviewing updates
- Proper audit trail for administrators
The changelog now shows all versions with their respective changes,
making it easier for users to understand what has changed between
their installed version and the available update.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The official Debian repositories already contain a package named
"skyview" which is associated with NASA's SkyView Virtual Observatory
(https://skyview.gsfc.nasa.gov/), a tool for astronomical data
visualization.
To avoid package naming conflicts and potential confusion for users,
this commit renames our ADS-B aircraft tracking application package
to "skyview-adsb". This clearly indicates the package's purpose
(ADS-B tracking) while maintaining the SkyView brand identity.
Changes:
- Package name: skyview → skyview-adsb
- System user/group: skyview → skyview-adsb
- Config directory: /etc/skyview → /etc/skyview-adsb
- Data directory: /var/lib/skyview → /var/lib/skyview-adsb
- Log directory: /var/log/skyview → /var/log/skyview-adsb
- Systemd service: skyview.service → skyview-adsb.service
- Documentation path: /usr/share/doc/skyview → /usr/share/doc/skyview-adsb
The binaries (/usr/bin/skyview and /usr/bin/beast-dump) remain
unchanged as they don't conflict at the filesystem level.
This ensures clean installation alongside any existing skyview
packages and prevents apt/dpkg conflicts during installation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Update study to accurately reflect that complex algorithms like CPR decoding
required multiple iterations, but the speed of these iterations far exceeded
manual development cycles - completing refinements in hours vs days/weeks.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Comprehensive analysis comparing traditional development estimates (6-8 weeks)
against actual AI-assisted timeline (1 day). Documents complete elimination
of manual coding requirement and transformation from implementation-focused
to requirements-focused development paradigm.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove outdated SQLite references and update documentation to accurately
describe the current in-memory ICAO allocation database implementation
with binary search lookups.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Release includes critical CPR position decoding fix that resolves
systematic eastward bias in aircraft positioning.
Changes:
- Updated Debian control file version
- Updated web UI version display
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This addresses Issue #18 by correcting the CPR global decoding algorithm
implementation that was causing aircraft to appear tens of kilometers
east of their actual positions.
Root Cause:
- CPR longitude zone calculation always used NL-1 regardless of frame type
- Specification requires: even frames use NL zones, odd frames use NL-1 zones
- This caused systematic eastward displacement for all aircraft positions
Changes:
- Implement frame-consistent zone calculations per RTCA DO-260B specification
- Even frame (i=0): ni = max(1, NL - 0) = max(1, NL)
- Odd frame (i=1): ni = max(1, NL - 1)
- Add comprehensive documentation with authoritative source references
- Ensure latitude and longitude use same frame choice for consistency
Testing:
- Aircraft south of Oslo now appears correctly (was near Skarlandsvatnet)
- Aircraft north of Oslo should now appear correctly (was east of Lillestrøm)
- Systematic eastward bias eliminated
References:
- RTCA DO-260B / EUROCAE ED-102A: ADS-B Performance Standards
- ICAO Annex 10, Volume IV: Surveillance Systems
- "Decoding ADS-B position" by Edward Lester
- PyModeS reference implementation
Fixes#18🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added conffiles entry for /etc/skyview/config.json to ensure that user
customizations are preserved during package upgrades. This follows
Debian packaging best practices for configuration file handling.
The conffiles mechanism will:
- Prevent overwrites of modified config files during upgrades
- Prompt users for action when package config differs from local config
- Maintain backup files (.dpkg-old, .dpkg-new) for reference
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Update all version references in preparation for v0.0.3 release:
- Debian package control file
- Manual pages for skyview and beast-dump
- Web interface header display
- README installation instructions
- Documentation examples
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Track and display the number of active WebSocket connections viewing the
aircraft tracker. Features:
Backend:
- Add getActiveClientCount() method for thread-safe client counting
- Include active_clients count in all statistics responses
- Integrate with existing stats API endpoints
Frontend:
- Display "X viewer(s)" in header stats with proper plural/singular grammar
- Add "Active Viewers" card to Statistics view
- Real-time updates as clients connect/disconnect
- Fallback to 1 when stats not yet available
This adds a social element showing "Now being watched by X users" style
information prominently in the interface.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The build script now automatically generates a proper Debian changelog from
git history between version tags. Features:
- Proper Debian changelog format with version, urgency, and timestamp
- Automatic version detection using git describe --tags
- Change list from previous version tag to current commit
- Compressed storage as per Debian standards (changelog.gz)
- Fallback logic for initial releases when no previous tags exist
The changelog is installed to /usr/share/doc/skyview/changelog.gz following
Debian packaging best practices.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The decoder was capping all speeds at 600kt before validation, which caused:
1. Corrupt helicopter data to show false 600kt readings
2. Legitimate high-speed aircraft to be incorrectly limited
3. Validation logic in merger to miss corrupt data detection
The merger already has proper speed validation at 2000kt (Mach 3) and
position-based validation that catches impossible speeds from corrupt data
regardless of aircraft type.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>