Release Notes
Build history for SkyWatch. Newest builds listed first.
v0.0.0.0115
New Feature
Permanent Map-View Filtering
—
- Aircraft list is now permanently filtered to show only planes within the current map viewport.
- List updates in real-time as you pan or zoom the map.
- Simplified UI by removing the "In View" toggle button from the header.
- Removed the "No position data" map overlay to keep map context visible at all times.
v0.0.0.0114
New Feature
Military Filter, Live Search, and Stats Max Range
—
- New "Military" toggle button added to map controls with an F-4 Phantom icon for quick filtering.
- Integrated Live Search added to the aircraft detail panel (ac-lookup-bar) to search all aircraft registry and telemetry fields.
- Statistics summary cards now display "Max Range" (peak reception distance) for each receiver.
- Aircraft photo updates now restricted to logged-in administrators for improved security.
v0.0.0.0113
Maintenance
SkyWatch logo branding applied across all pages; logo image removed
—
- "SkyWatch" wordmark now appears in the header of every page — index, stats, admin, and release notes.
- "Watch" portion rendered in bright orange (#ff7300) for consistent brand identity.
- Removed the nerdnet-logo.png image from the main header; the text mark stands alone.
- Admin login and first-run screens updated to use the same branded wordmark.
v0.0.0.0112
Maintenance
Release notes link added to footer
—
- "Release Notes" link added to the index.php footer bar, next to the Statistics link.
v0.0.0.0111
New Feature
Release notes page (releasenotes.php)
822cbe9
- New releasenotes.php page documents the full build history from first commit to present.
- Timeline layout with build numbers (v0.0.0.XXXX), tag pills (New Feature / Bug Fix / Refactor / Maintenance), headlines, and detail bullets.
- Styled to match the SkyWatch dark/light theme using shared CSS variables from config.php.
- 110 builds catalogued across initial setup, map features, aircraft data enrichment, admin panel, stats dashboard, image caching, and the exclusive receiver view.
v0.0.0.0110
Bug Fix
Removed Delta tab; exclusive view now shows per-receiver-only aircraft
ef271e3
- Delta tab retired — its function is superseded by the double-click exclusive mode on individual receiver tabs.
- Double-clicking any receiver tab (Local, Joseph, Boggy) now filters to aircraft seen only by that receiver — not by any others.
- Double-click on the Combined (Remote) tab is intentionally disabled since it aggregates all feeds.
- Single-click or double-click while in exclusive mode exits back to the full receiver view.
v0.0.0.0109
Bug Fix
Fixed exclusive-mode filter returning empty results
c7a09f0
- Root cause: the Combined feed aggregates all receivers, so any aircraft on Local also appeared on Remote — making the exclusive filter always return zero.
- Fix: individual receivers (Local, Joseph, Boggy) now compare only against each other, not against the Combined feed.
- Combined (Remote) exclusive mode compares against all three individual receivers.
v0.0.0.0108
New Feature
Double-click receiver tab to see aircraft exclusive to that receiver
64b8abd
- Double-clicking a receiver tab enters "exclusive mode" — shows only aircraft tracked exclusively by that station.
- Visual indicator: top+bottom tab border stripe and an "ONLY" pill badge appear while in exclusive mode.
- Panel header appends "· exclusive" to indicate the filtered state.
- Any subsequent single or double click exits exclusive mode and returns the full aircraft list.
- Uses a 350 ms click-timing window to distinguish single from double clicks without delaying tab switching.
v0.0.0.0107
Bug Fix
Visitor tracking bug fix
e97c544
- Resolved an edge case in visitor session cookie handling.
v0.0.0.0106
New Feature
Visitor tracking
b5494b2
- Introduced anonymous visitor tracking via a persistent browser cookie.
- IP address, user-agent, and session ID are logged to the SQLite database on each page load.
- Data is accessible from the admin panel.
v0.0.0.0105
Maintenance
General performance optimisations
c6208e7
- Reduced redundant DOM queries during the per-second refresh cycle.
- Marker rebuild and trail accumulation tuned for lower CPU overhead.
v0.0.0.0104
Bug Fix
Image cache fixes (series)
4c9fac6
- Three successive patches (ee0bedf, c3b954e, 4c9fac6) resolved edge cases in the on-disk JPEG cache.
- Fixed stale/corrupt cached images being served after an aircraft photo is updated upstream.
- Added proper Content-Length and cache-control headers for cached responses.
v0.0.0.0101
New Feature
Image cache manager
7c8b823
- Aircraft photos fetched from the external API are now cached on-disk to reduce repeat outbound requests.
- Cache manager tracks fetch timestamps and evicts stale entries automatically.
v0.0.0.0100
Bug Fix
Ground speed display fix
1453f24
- Corrected a unit-conversion issue that caused speed values to display incorrectly in certain cases.
v0.0.0.0099
New Feature
Photo placeholder for aircraft without images
7fae64d
- Added a styled placeholder shown when no aircraft photo is available, replacing a broken-image state.
v0.0.0.0098
New Feature
Statistics dashboard upgrades (series)
909d24e
- Three upgrades (eda0d88, ca38f2a, 909d24e) expanded the stats dashboard with new charts and metrics.
- Added hourly aircraft count graphs, receiver uptime percentages, and distance heatmaps.
- Improved table pagination and date-range filtering on the stats page.
v0.0.0.0095
Maintenance
Database schema cleanup and refactoring (series)
9f04cbf
- Eight sequential cleanup commits (260e062 → 9f04cbf) simplified the SQLite schema.
- Removed unused columns, merged redundant tables, and consolidated insert/update logic.
- Improved query performance for the stats and history views.
v0.0.0.0087
Bug Fix
Aircraft registration lookup fix
790e9d1
- Fixed a case where the FAA/ICAO registration field was not being returned correctly from the database proxy.
v0.0.0.0086
Bug Fix
Minor UI and data fixes
24510ad
- Corrected several small display regressions introduced during the DB refactor series.
v0.0.0.0085
Bug Fix
Missing registration field resolved
3d89925
- Aircraft registration was blank for some entries; query updated to fall back to secondary lookup.
v0.0.0.0084
Bug Fix
Statistics page rendering fix
d572e4c
- Fixed a PHP error that prevented the stats page from rendering when certain date ranges returned no data.
v0.0.0.0083
Maintenance
Database population and backfill
f6b6b7b
- Added tooling to backfill historical aircraft sightings into the SQLite database from log files.
v0.0.0.0082
Bug Fix
Stats and history clear/fix
feabaaf
- Fixed broken "clear history" action in the admin panel (e8ca1f2).
- Resolved a stats calculation error that produced negative coverage percentages (feabaaf).
v0.0.0.0080
Bug Fix
Database stability fixes (series)
61c20b8
- Four fixes (4917782 → 61c20b8) addressed write-contention and schema migration issues.
- Cached aircraft images now stored and retrieved correctly via db.php.
- Fixed a WAL-mode locking issue that caused occasional write failures under load.
v0.0.0.0072
Bug Fix
Country flag display fix
f2530b4
- Corrected SVG flag lookup for edge-case ICAO country prefixes.
v0.0.0.0071
Bug Fix
Database write fix
91f7847
- Resolved a prepared-statement binding error that caused aircraft log inserts to silently fail.
v0.0.0.0070
Maintenance
Database backend migration and iterative updates (series)
34ad49c
- Migrated from flat-file/JSON storage to a proper SQLite backend via db.php (da9bdc7).
- Seven follow-up DB update commits (d6763e4 → 34ad49c) refined the schema, indexes, and helper methods.
- Aircraft sightings, receiver stats, and registration data now all persisted in SQLite.
v0.0.0.0062
Bug Fix
Statistics error handling
32be883
- Added graceful fallbacks for missing or uninitialized SQLite tables on first run.
v0.0.0.0061
New Feature
Aircraft history modal with hourly tracking
1d37a3b
- Clicking an aircraft now optionally opens a detailed history modal.
- Shows hourly sighting counts, max altitude, max speed, and receiver coverage over the past 24 hours.
- ICAO database used to enrich modal with manufacturer, type, and operator fields.
v0.0.0.0060
New Feature
Statistics dashboard with SQLite integration
d9bbd41
- New stats.php page provides a live statistics dashboard.
- Metrics tracked: aircraft seen per receiver, message rates, peak ranges, and daily totals.
- Data stored in SQLite via a new db.php backend module.
- Dashboard auto-refreshes and includes per-receiver coverage history charts.
v0.0.0.0058
Maintenance
Renamed "Remote" feed to "Combined Feed"
5f37c05
- Updated all UI labels, PHP variables, and JS references from "Remote" to "Combined Feed" for clarity.
- The Combined feed aggregates aircraft from all individual receivers into a single merged view.
v0.0.0.0056
Refactor
Generalized combined-ring renderer for multiple receivers
ac2982f
- drawCombinedRing() refactored to accept an arbitrary array of receiver ring datasets.
- Boggy Creek integrated into the remote/combined view range ring overlay.
v0.0.0.0055
Maintenance
Admin panel updates
16c1cd1
- Additional admin controls and data tables added to admin.php.
v0.0.0.0054
New Feature
Boggy Creek receiver added as fourth data source
32a42a4
- Fourth ADS-B station (Boggy Creek) integrated with its own tab, colour, coverage metric, and range ring.
- Coverage percentage and badge count display on the Boggy tab.
- Range ring drawn from Boggy receiver's GPS position.
v0.0.0.0052
New Feature
Full ICAO aircraft type database integrated
d089424
- icao_db1.csv loaded at startup and used for all manufacturer/type lookups.
- Covers over 10,000 aircraft type codes with manufacturer name, model, and wake-turbulence category.
v0.0.0.0051
Refactor
Aircraft icons switched from inline SVG to CSS sprites
51c042c
- Replaced per-marker SVG generation with a CSS sprite sheet for better rendering performance.
- Selected/highlighted aircraft now shown with a distinct glow ring around the icon.
- Reduced per-frame DOM work during the marker refresh cycle.
v0.0.0.0049
Bug Fix
Map empty-state suppressed when a type filter is active
6fca9bc
- Previously the "No position data" overlay appeared incorrectly when a filter reduced visible aircraft to zero.
- Empty state now only shown when there are genuinely no aircraft for the current view/filter combination.
v0.0.0.0048
New Feature
Military / Government filter consolidated
b46c7fe
- All military and government aircraft categories merged into a single "Military / Gov" filter option.
- New isMilitary() helper function checks ICAO hex ranges, operator codes, and type codes.
v0.0.0.0047
Maintenance
Configuration settings update
84c2c82
- Updated default thresholds, ring distances, and colour presets in config.php.
v0.0.0.0046
New Feature
ICAO database enrichment for manufacturer and type display
5b9038e
- Aircraft info panel and table now show full manufacturer name and model from the ICAO DB.
- Manufacturer and type columns added as sortable table columns.
- Background prefetch queues ICAO lookups for all visible aircraft after each render.
v0.0.0.0044
Maintenance
Aircraft type categorisation data updated
3f7a1f1
- Expanded and corrected the type-to-category mapping table used for the type filter.
- Added new categories for regional jets, turboprops, and balloons.
v0.0.0.0043
New Feature
Rainbow altitude colour gradient and redesigned aircraft SVG icons
e850fa9
- Altitude colour now uses a full rainbow spectrum (violet → blue → green → yellow → red) for at-a-glance altitude reading.
- All aircraft SVG icons redesigned with separate stroke and fill layers for crisper rendering at all zoom levels.
- Icon shapes differentiated by aircraft category: widebody, narrowbody, turboprop, helicopter, balloon, etc.
v0.0.0.0040
New Feature
Expanded user configuration options
3635a12
- Additional settings exposed in config.php: trail length, ring distances, refresh interval, default tab, theme.
- Per-receiver position overrides added so GPS coords can be set manually if the receiver.json is unavailable.
v0.0.0.0039
Bug Fix
Admin password hash correction
ee92a0a
- Fixed bcrypt hash comparison that was rejecting valid admin passwords after a config change.
v0.0.0.0038
New Feature
Admin panel (admin.php)
048e2c9
- New password-protected admin panel added.
- Provides controls for clearing caches, viewing raw receiver data, and managing site configuration at runtime.
v0.0.0.0037
Refactor
Configuration split into dedicated config.php
6c77d00
- All receiver URLs, positions, colours, thresholds, and site settings moved from index.php into config.php.
- Makes deployments and customisations much cleaner without touching application logic.
v0.0.0.0036
New Feature
User-configurable site options
9a63a68
- Site title, default tab, theme (dark/light), ring distances, and refresh interval now configurable.
- Colour presets for dark and light themes defined and switchable via config.
v0.0.0.0035
Bug Fix
Helicopter category fix and map quick-snap
35bc72f
- Helicopter ICAO type codes re-mapped to the correct category so the type filter works correctly.
- Double-clicking the map resize handle now snaps the map panel to its minimum height.
v0.0.0.0034
New Feature
Mobile-friendly responsive layout
ff52537
- Stacked layout for small screens: map sits above the aircraft table.
- Tab labels condensed; secondary info (message rate, coverage %) hidden on narrow viewports.
- Touch-friendly resize handle and scrollable table body.
v0.0.0.0033
Bug Fix
Removed redundant ring refresh on every data poll
bd60a98
- Range rings were being fully redrawn on every 1-second data refresh — now only redrawn when the view changes.
v0.0.0.0032
New Feature
Aircraft photo previews
560dfd3
- Aircraft photos fetched from an external API and displayed in the info panel when an aircraft is selected.
- Clicking the thumbnail opens an enlarged view.
- Photos loaded lazily and cached to avoid redundant API calls.
v0.0.0.0027
New Feature
Trail rewind / history playback
2483efb
- Flight trail history accumulated in memory across refresh cycles.
- Trail points capped at a configurable maximum to manage memory usage.
v0.0.0.0026
New Feature
Additional aircraft type SVG shapes
ad435f3
- New plane silhouettes added for wide-body jets, business jets, military fast jets, and UAVs.
v0.0.0.0025
New Feature
Weather radar overlay
7862a38
- NEXRAD/RainViewer radar tiles overlaid on the map as a toggleable layer.
- Radar refreshes independently on a configurable interval.
- Two follow-up fixes (ac108a3, 7862a38) resolved tile URL and opacity issues.
v0.0.0.0022
New Feature
OpenStreetMap tile layer added
147668d
- OpenStreetMap available as an alternative base map alongside the existing satellite/dark tiles.
- Map layer switcher control added to the map UI.
v0.0.0.0021
New Feature
Filter aircraft by type category
db11a31
- Dropdown filter added to the panel header to narrow the table and map to a specific aircraft category.
- Categories: wide-body (2/4 engine), narrow-body, regional jet, business jet, turboprop, GA single/twin, military, helicopter, balloon.
- Active filter shown in the aircraft count; reset button clears the filter.
v0.0.0.0020
New Feature
Per-aircraft distance from receiver
192c494
- Distance column added to the aircraft table (in nautical miles from the active receiver).
- Haversine calculation using the receiver's GPS coordinates from receiver.json.
- Follow-up fix (192c494) corrected unit conversion from km to NMI.
v0.0.0.0018
New Feature
Flight route information panel
b4365df
- Origin and destination airport information displayed in a right-side info panel.
- Route data fetched from an external route API using the aircraft's callsign.
v0.0.0.0016
New Feature
Country flag display and message rate indicator
afc3675
- Country flag SVGs shown next to each aircraft based on ICAO hex prefix.
- Message-per-second rate displayed on each receiver tab.
- Two flag refinement commits (4803434, afc3675) improved prefix matching and flag sizing.
v0.0.0.0012
New Feature
Persistent local storage for UI state
0218c1a
- Active tab, sort column, sort direction, and selected aircraft saved to localStorage.
- State restored on page load so the view is preserved across refreshes.
v0.0.0.0011
Maintenance
Removed map popup tooltips
d36cfc6
- Leaflet marker popups removed in favour of the side-panel info display for a cleaner map view.
v0.0.0.0010
New Feature
Range rings extended to 200 NMI; manufacturer/type sorting
0f6bbf7
- Distance rings now drawn at 50, 100, 150, and 200 nautical miles.
- Aircraft table can be sorted by manufacturer name and aircraft type.
v0.0.0.0008
New Feature
Popup persistence, country flags, and manufacturer / type info
81a17a3
- Aircraft info popup stays visible when the aircraft is re-selected after a data refresh.
- Country flags displayed based on ICAO registration hex prefix.
- Manufacturer and aircraft type pulled from the ADS-B database and shown in the info panel.
- ADS-B type database updated (81a17a3) with additional entries.
v0.0.0.0006
New Feature
Flight trail polylines
b641acd
- As aircraft move, their recent positions are accumulated and drawn as a dashed polyline on the map.
- Clicking an aircraft shows its trail; clicking away clears it.
- Trail length capped to prevent unbounded memory growth during long sessions.
v0.0.0.0005
New Feature
Range rings with 24-hour persistence
4697b16
- Colour-coded coverage range rings drawn from each receiver's position, showing the maximum range seen per compass bearing.
- Ring data persisted to the database and rebuilt across server restarts so the 24-hour envelope is retained.
v0.0.0.0003
Maintenance
Initial project setup and README
0b3a8e7
- Project scaffolding: index.php, config, and README committed.
- Live ADS-B feed fetched from a local tar1090 JSON endpoint and rendered on a Leaflet map.
- Aircraft table with hex, callsign, altitude, speed, heading, and squawk columns.
- Two receiver tabs (Combined and Local) with per-tab aircraft counts.