LIVE
← All Posts | REPEAT and WXNOW Services Dashboard →

Viewport Live Packet Panel

Viewport Live Packet Panel

The map now has a ๐Ÿ“ป Live button in the toolbar that opens a bottom panel showing real-time APRS packets as they arrive from stations in your current viewport.

How It Works

Click the ๐Ÿ“ป Live button (next to the temperature gauge) to open the panel. As packets arrive via WebSocket, any that originate from a station within your current map bounds appear in the feed โ€” newest first.

The panel only shows packets from stations you can currently see on the map. Zoom in to focus on local activity, zoom out to see more.

Features

  • Free-drag resizing โ€” grab the handle bar at the top of the panel and drag it to any height you want. Drag it below the threshold to close.
  • Hover to highlight โ€” mouse over any packet row and the corresponding station lights up on the map with a black pulsing ring, making it easy to locate.
  • Click callsign โ€” click the colored callsign in any row to pan the map directly to that station and open its popup.
  • Viewport pruning โ€” when you zoom in or pan, packets from stations that are no longer in view are automatically removed from the feed.
  • Pause / Resume / Clear โ€” pause the feed to read without new packets pushing things around, then resume or clear to start fresh.

Technical Details

The panel hooks into the existing WebSocket map_feed room. Packets are filtered client-side using Leaflet's bounds.contains() check. Each row stores its coordinates as data attributes so the moveend pruning can efficiently remove out-of-bounds entries without re-querying.

The station highlight reuses the existing setHighlightedStation() infrastructure that the callsign search uses, keeping the visual language consistent across the map.

Bug Fixes

This release also fixes several issues with the map station loading:

  • Redis GEO startup race โ€” a timing issue where the startup cleanup removed all cached stations before the backfill check ran, leaving Redis empty with no recovery path.
  • Redis GEO stale-data fallback โ€” when Redis returned empty results due to expired metadata, the API now properly falls through to PostgreSQL instead of returning zero stations.
  • Large bbox tile truncation โ€” zoomed-out views that generated thousands of tiles were silently truncated to the wrong geographic region. Now falls through to a direct database query instead.