Commit Graph

504 Commits

Author SHA1 Message Date
you ffbe334896 Rain: 4 hops = full screen (was 8), matches median of 3 hops 2026-03-22 08:15:15 +00:00
you 409fec2521 Rain: spawn column per observation for denser rain
Each observation of a packet spawns its own rain column,
staggered 150ms apart. More observers = more rain.
2026-03-22 08:13:22 +00:00
you 9093ee5574 Rain: show all packet bytes, no cap 2026-03-22 08:12:14 +00:00
you 54ecb37e79 Rain: show up to 20 bytes trailing, scroll through all packet bytes
Trail was limited to hops*30px which meant 1-hop packets showed
1 character. Now shows up to 20 visible chars at once, scrolling
through the entire packet byte array as the drop falls.
2026-03-22 08:11:23 +00:00
you 6875e79bca Rain: fix missing raw_hex in VCR/timeline packets
dbPacketToLive() wasn't including raw_hex from API data.
VCR replay and timeline scrub packets had no raw bytes,
so rain silently dropped them all. Now includes pkt.raw_hex
as 'raw' field. Removed debug log.
2026-03-22 08:09:26 +00:00
you c2a2b36dfc Rain: add debug log to diagnose missing drops 2026-03-22 08:06:33 +00:00
you fc05b94801 Rain: only show drops with real raw packet bytes, no faking
Packets from companion bridge (Format 2) have no raw hex —
they arrive as pre-decoded JSON. Skip them entirely instead
of showing fake/random bytes.
2026-03-22 08:03:52 +00:00
you 7afb22deae Rain: use packet hash + decoded payload as hex source fallback
Format 2 MQTT packets (companion bridge) have no raw hex field.
Now falls back to pkt.hash, then extracts hex from decoded payload
JSON. Random bytes only as absolute last resort.
2026-03-22 08:02:53 +00:00
you aa667fafe9 Rain: fix hex bytes source — check pkt.raw, pkt.raw_hex, pkt.packet.raw_hex 2026-03-22 07:58:52 +00:00
you e0e6b3f6a6 Matrix Rain: canvas overlay with falling hex byte columns
New 'Rain' toggle on live map. Each incoming packet spawns a
falling column of hex bytes from its raw data:

- Fall distance proportional to hop count (8+ hops = full screen)
- 5 second fall time for full-height drops, proportional for shorter
- Leading char: bright white with green glow
- Trail chars: green, progressively fading
- Entire column fades out in last 30% of life
- Random x position across screen width
- Canvas-rendered at 60fps (no DOM overhead)
- Works independently of Matrix mode (can combine both)
2026-03-22 07:53:50 +00:00
you 3e836ff98a Matrix: faster trail fadeout (500ms->300ms, delay 300->150ms) 2026-03-22 07:41:39 +00:00
you f5a83e03d5 Matrix: 1.1s per hop 2026-03-22 07:38:47 +00:00
you e159126617 Matrix: speed up to 1s per hop (was 1.4s) 2026-03-22 07:36:43 +00:00
you dbae6c64b4 Revert "Matrix: CSS transition pooled markers for smoother animation"
This reverts commit 29729f2911.
2026-03-22 07:36:10 +00:00
you 29729f2911 Matrix: CSS transition pooled markers for smoother animation
- Pre-create pool of 6 reusable markers (no create/destroy per frame)
- CSS transition: transform 80ms linear for position, opacity 200ms ease
- will-change: transform, opacity for GPU compositing
- Styles moved from inline to .matrix-char span class
- Marker positions updated via setLatLng, browser interpolates between
- Fade-out via CSS transition instead of rAF opacity loop

Revert to 8c3e2f4 if this doesn't feel better.
2026-03-22 07:34:39 +00:00
you 8c3e2f4235 Matrix: requestAnimationFrame for smooth 60fps animation
Replaced setInterval(40ms) with rAF + time-based interpolation.
Same 1.4s duration per hop, but buttery smooth movement.
Fade-out also uses rAF instead of setInterval.
2026-03-22 07:31:23 +00:00
you 2a7090e300 Matrix: markers 10% brighter (#008a22, 50% opacity), map 10% darker (1.1) 2026-03-22 07:29:35 +00:00
you b81897c945 Matrix: speed up animation (35 steps @ 40ms = ~1.4s per hop) 2026-03-22 07:29:06 +00:00
you db0baa69a8 Matrix: brighter hex, more spacing, slower animation, darker map
- Hex chars: 16px white text with triple green glow (was 12px green)
- Only render every 2nd step for wider spacing between bytes
- Animation speed: 45 steps @ 50ms (was 30 @ 33ms) — ~2.3s per hop
- Trail length reduced to 6 (less clutter)
- Map brightness down 10% (1.4 -> 1.25)
2026-03-22 07:27:51 +00:00
you 7ee89bba29 Matrix: tint new markers on creation during matrix mode
Timeline scrub clears and recreates markers — now addNodeMarker()
applies matrix tinting inline if matrixMode is active.
2026-03-22 07:24:09 +00:00
you 0cdf696311 Matrix: fix invisible map — brighten dark tiles instead of dimming
Dark mode tiles are already dark; previous filter was making them
invisible. Now brightens 1.4x + green tint via sepia+hue-rotate.
Also fixed ::before/::after selectors (same element, not descendant).
2026-03-22 07:23:23 +00:00
you 6f321cef16 Matrix mode forces dark mode, restores on toggle off
- Saves previous theme, switches to dark, disables theme toggle
- On Matrix off: restores original theme + re-enables toggle
- Dark mode tiles + green filter = actually visible map
2026-03-22 07:20:59 +00:00
you 11872c775e Matrix: reworked map visibility + dimmer markers
- Replaced sepia+hue-rotate chain with grayscale+brightness+contrast
- Green tint via ::before (multiply) + ::after (screen) overlays
- Much brighter base map — roads/coastlines/land clearly visible
- Markers dimmed to #005f15 at 40% opacity
- DivIcon markers at 35% brightness
2026-03-22 07:20:06 +00:00
you 1c2fb5594e Matrix: significantly brighter map tiles (0.35->0.55, contrast 1.5) 2026-03-22 07:18:39 +00:00
you 920a8159f7 Matrix mode disables heat map (incompatible combo)
Unchecks and greys out Heat toggle when Matrix is on. Restores on off.
2026-03-22 07:17:27 +00:00
you de62a25111 Matrix: higher contrast for land/ocean distinction 2026-03-22 07:16:51 +00:00
you 5fb5873cad Matrix: green-tinted map tiles via sepia+hue-rotate filter chain
Roads, coastlines, terrain features now have faint green outlines
instead of just being dimmed to grey.
2026-03-22 07:16:32 +00:00
you be7b4bd39a Matrix: dim node markers to let hex bytes stand out
Markers #00aa2a (darker green), DivIcon filter brightness 0.6
2026-03-22 07:15:54 +00:00
you 522e89e8f9 Matrix theme: brighten map tiles (0.15 -> 0.3), slight saturation 2026-03-22 07:15:07 +00:00
you 0c0e87a616 Matrix theme: full map visual overhaul when Matrix mode enabled
- Map tiles desaturated + darkened to near-black with green tint
- CRT scanline overlay with subtle flicker animation
- All node markers re-tinted to Matrix green (#00ff41)
- Feed panel: dark green background, monospace font, green text
- Controls/VCR bar: green-on-black theme
- Node detail panel: green themed
- Zoom controls, attribution: themed
- Node labels glow green
- Markers get hue-rotate filter (except matrix hex chars)
- Restores all original colors when toggled off
2026-03-22 07:13:30 +00:00
you 2c02d866af Fix Matrix mode null element errors
getElement() returns null when DivIcon not yet rendered to DOM.
Null-guard all element access in drawMatrixLine interval and fadeout.
2026-03-22 07:10:40 +00:00
you 1298a67cf5 Add Matrix visualization mode for live map
New toggle in live map controls: 'Matrix' - animates packet hex bytes
flowing along paths in green Matrix-style rain effect.

- Hex bytes from actual packet raw_hex data flow along each hop
- Green (#00ff41) monospace characters with neon glow/text-shadow
- Trail of 8 characters with progressive fade
- Dim green trail line underneath
- Falls back to random hex if no raw data available
- Persists toggle state to localStorage
- Works alongside existing Realistic mode
2026-03-22 07:07:21 +00:00
you bd08d91fc1 fix: null-guard all animation entry points (pulseNode, animatePath, drawAnimatedLine)
All animation functions now bail early if animLayer/pathsLayer are null,
preventing cascading errors from setInterval callbacks after navigation.
2026-03-22 05:08:06 +00:00
you 9d6707f410 docs: update v2.4.1 notes with pause fix 2026-03-22 05:01:38 +00:00
you 4200553000 fix: pause button delegation on document instead of app element 2026-03-22 04:59:45 +00:00
you a5d6ee3a5e v2.4.1 — hotfix for ingestion, WS, and animation regressions 2026-03-22 04:57:29 +00:00
you 3317a64bc6 fix: null-guard animLayer/pathsLayer in animation cleanup
setInterval callbacks fire after navigating away from live map,
when layers are already destroyed.
2026-03-22 04:52:45 +00:00
you 9542f5694b fix: null-guard multi-select menu close handler
observerFilterWrap/typeFilterWrap don't exist when document click
fires before renderLeft completes.
2026-03-22 04:49:51 +00:00
you 427ebcf657 Remove debug console.log from packets WS handler 2026-03-22 04:47:10 +00:00
you 471ca438aa fix: pause button crash killed WS handler registration
getElementById('pktPauseBtn') was null because button is rendered by
loadPackets() which runs async. Crash at line 218 prevented wsHandler
from being registered at line 260. Moved to data-action event delegation
which works regardless of render timing.
2026-03-22 04:45:04 +00:00
you 590f13f30b debug: add WS handler logging to packets page 2026-03-22 04:42:41 +00:00
you aa35337a5e fix: WS broadcast had null packet when observation was deduped
getById() returns null for deduped observations (not stored in byId).
Client filters on m.data.packet being truthy, so all deduped packets
were silently dropped from WS. Fallback to transmission or raw pktData.
2026-03-22 04:38:07 +00:00
you 49b07e3d5f docs: add ingestion regression to v2.4.0 changelog 2026-03-22 01:23:36 +00:00
you 0796d77e75 fix: packet-store insert() returned undefined after insertPacket removal
Was returning undeclared 'id' variable. Now returns observationId or
transmissionId. This broke all MQTT packet ingestion on prod.
2026-03-22 01:22:21 +00:00
you 4b8fb0e470 docs: tone down v2.4.0 description 2026-03-22 01:13:47 +00:00
you 8c0fa117fc v2.4.0 — The Observatory
Multi-select filters, time window selector, pause button, hex paths toggle,
legacy DB migration, pure client-side filtering, distance analytics,
observation drill-down, and 20+ bug fixes.

Full changelog: CHANGELOG.md
2026-03-22 01:12:20 +00:00
you 8e1096abf0 Fix time window: remove label, self-descriptive options, restore saved value before first load 2026-03-22 01:10:32 +00:00
you a3edff78d3 Add pause/resume button to packets page for live WS updates 2026-03-22 01:08:19 +00:00
you 376db8f6ad Replace packet count limit with time window selector
- Add time window dropdown (15min default, up to 24h or All)
- Use 'since' param instead of fixed limit=10000
- Persist selection to localStorage
- Keep limit=50000 as safety net
2026-03-22 01:06:46 +00:00
you 8059a71465 Increase default packet limit from 100 to 10,000
Filtering is client-side now, so load everything upfront.
2026-03-22 01:01:21 +00:00