- Add VERSION = "1.1.0" to server.py; print at startup, expose via public
GET /api/config, and show it in the admin header (so deployed == released
is verifiable at a glance).
- Ignore config.json in .gitignore — it holds the admin password hash and
session secret; fresh installs use config.json.example.
- README/CLAUDE.md: document the in-app pixel editor (now with shape tools,
select/move, reference overlay, custom/recent palettes), the receiver health
dashboard, 9 sprite types, and the asset cache-busting convention.
- Bump admin asset cache-bust to ?v=20260609d.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Extends the in-app sprite editor with four feature sets:
- Shape tools: line (L), rectangle (R), ellipse (O) with click-drag live
preview and a FILL toggle for outline vs filled rect/ellipse.
- Select & move: rectangular marquee (M) to select, drag-to-move via a
floating layer, arrow-key nudge, and clipboard ops (Ctrl+C/X/V, Delete,
Enter/Esc to commit). Undo/redo and save auto-bake any pending move.
- Reference overlay: load any image as an adjustable-opacity backdrop to
trace over (rendered under the artwork), with a show/hide toggle.
- Color tools: brush opacity slider, persistent custom palette
(localStorage; right-click to remove), and an auto-updating recent colors row.
Cache-bust admin assets to ?v=20260609c so the update loads without a manual
hard-refresh.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Receiver management improvements for the admin Receivers tab:
- Per-receiver health: server now tracks each connection's state
(connecting/connected/down), message count, and last-message time, exposed
via new GET /api/admin/receiver-status and POST /api/admin/test-receivers.
- Receivers tab redesign: live "Active Receivers" panel with colored
indicators (green=receiving, yellow=connected/no data, red=unreachable),
a clear select -> SAVE & APPLY -> auto-test flow, and selectable scan
results with a "USE SELECTED RECEIVERS" action.
- Network scan interface selector: scan a chosen interface/subnet instead of
every local subnet. Oversized subnets (>/20, e.g. a docker /16) are disabled
in the UI and rejected server-side, eliminating slow/hanging scans.
Critical fix — server crash on receiver restart:
- Receiver connection tasks were awaited inside main()'s top-level
asyncio.gather. Restarting receivers cancels those tasks, and the resulting
CancelledError propagated into the gather and killed the whole server
process (every action after a restart then failed). Receiver tasks now run
as independent background tasks; restart cancels and awaits them with
return_exceptions=True so cancellation can never tear down the server.
Also cache-bust admin.css/admin.js/pixel-editor.js (?v=) so updated assets
load without a manual hard-refresh, and surface a clear message instead of a
silent "Loading…" when the status endpoint is unavailable.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Build a dependency-free Canvas2D pixel editor integrated into the admin
Sprites tab. Each sprite card gains an EDIT button that opens a full-screen
editor for the sprite at its native 500x333 resolution.
Tools: pencil (1-8px brush, Bresenham interpolation), eraser, color picker
(palette + native input + pick-from-canvas), fill bucket (flood fill), pan.
Features: cursor-centered zoom, space-drag pan, undo/redo (snapshot per
stroke), pixel grid overlay, transparency checkerboard, load existing sprite,
and keyboard shortcuts (B/E/I/F, Space, +/-/0, Ctrl+Z/Y, G, Esc).
Export reuses the existing POST /api/admin/sprites/{type} upload endpoint via
srcCanvas.toBlob, so no server changes are required.
Closes#5
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Allow users to download existing sprite and background assets from the
admin panel, useful for editing externally and re-uploading or backing
up customizations.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shows the server's network interfaces (IP, subnet) in the admin Receivers
tab so users know which networks are being scanned. Adds an optional subnet
input field to scan arbitrary networks (e.g. VLANs the server can route to
but isn't directly attached to), with validation and a /20 size cap.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a THEMES tab to the admin panel with per-theme cards showing
4 directional previews, editable display names, per-direction PNG
upload, and new theme creation. Display names are stored in
config.json theme_names map rather than renaming filesystem folders.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New dedicated pixel art sprites for ADS-B emitter categories B2
(lighter-than-air → balloon), B1 (glider/sailplane → glider), and
B6 (UAV → uav), replacing the previous fallback to smallProp. Adds
an admin Sprites tab for previewing and uploading replacement PNGs
for all 9 aircraft sprite types.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements credentialed admin panel and multi-step setup wizard so new
users can configure location, receivers, and preferences without editing
JSON files. Adds bcrypt password auth with session cookies, setup lockout
after first run, and expanded config schema with backward compatibility.
New files: admin/{html,css,js}, setup/{html,css,js}
Modified: server.py (auth, setup, admin APIs), index.html (dynamic title),
pixel-view.js (site/display config), requirements.txt (bcrypt),
config.json.example (full schema)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>