Commit Graph

357 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 4200553000 fix: pause button delegation on document instead of app element 2026-03-22 04:59:45 +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 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
you dfa3d52153 Fix header row observer display when filtering by observer 2026-03-22 00:57:55 +00:00
you a3e3df5a1e Fix multi-select filters: client-side filtering, no unnecessary API calls
- Remove type/observer params from /api/packets calls (server ignores them)
- Add client-side type/observer filtering in renderTableRows()
- Change filter handlers to re-render instead of re-fetch
- Update displayed count to reflect filtered results
2026-03-22 00:57:11 +00:00
you d7c87ac918 fix: hex toggle calls renderTableRows (was undefined renderTable), rename to 'Hex Paths' with descriptive tooltip 2026-03-22 00:46:21 +00:00
you 3470e6588d Add hex hash toggle to packets page filter bar 2026-03-22 00:34:46 +00:00
you 59062946be Fix multi-select filters (AND→OR) and add localStorage persistence
- Server: support comma-separated type filter values (OR logic)
- Server: add observer_id filtering to /api/packets endpoint
- Client: fix type and observer filters to use OR logic for multi-select
- Client: persist observer and type filter selections to localStorage
- Keys: meshcore-observer-filter, meshcore-type-filter
2026-03-22 00:34:38 +00:00
you 30171ae588 Convert Observer and Type filters to multi-select checkbox dropdowns
- Replace single-select dropdowns with multi-select checkbox menus
- Add .multi-select-* CSS classes (reusable, styled like region filter)
- Observer: comma-separated IDs, shows count/name/All Observers
- Type: comma-separated values, shows count/name/All Types
- Bug fix: filter group children by selected observer(s) when expanded
- Close dropdowns on outside click
2026-03-22 00:21:41 +00:00
you c2288f9efb fix: sort help tooltip renders below icon instead of above (behind navbar) 2026-03-22 00:20:02 +00:00