Commit Graph
144 Commits
Author SHA1 Message Date
MrAlders0n d1ba42e692 Drop a stale doc pointer from two map comments 2026-07-27 21:30:55 -04:00
MrAlders0n 9c037bc923 Close the analyzer on a mobile tab change and add an expanded-row copy link 2026-07-27 21:08:19 -04:00
MrAlders0n cdda2a00ff Keep the widest heard window when a live packet is re-observed 2026-07-27 21:08:19 -04:00
MrAlders0n 907b42e7be Keep the packet card layout below md 2026-07-27 20:47:31 -04:00
MrAlders0n 663eeef775 Stop stripping ?hash on mount, it breaks deep links to older packets
The analyzer drawer and path-map restore both read the live ?hash and
fetch by hash directly, independent of whether the packet is in the
loaded list. Deleting the param once the first page settles without a
match unmounts the drawer and can drop path-map restores, for any
shared link more than a couple of minutes old.
2026-07-27 20:41:57 -04:00
MrAlders0n f44f1ac0a1 Carry the picked observation into the analyzer and finish two other spec gaps
- Stop resetting selectedObservationId when opening the analyzer, so picking an
  observation inside an expanded row lands the drawer on it instead of observations[0]
- Disable View path on map in the expanded row when the detail has no resolvable path,
  matching the drawer's existing button
- Strip a ?hash deep link once the first page has loaded and it matches no packet
2026-07-27 20:32:31 -04:00
MrAlders0n 9582aaaa09 Wire the packet table and expandable rows into the virtual list 2026-07-27 20:04:36 -04:00
MrAlders0n 64b822f4fa Reorder PacketExpansion to show errors before empty state 2026-07-27 19:43:58 -04:00
MrAlders0n f400dc5f76 Add the expanded packet region with skeleton, error and empty states 2026-07-27 19:37:18 -04:00
MrAlders0n 16ee220abe Fix PathData sizing and add null-SNR test to ObservationTable 2026-07-27 19:30:16 -04:00
MrAlders0n 7dfb363265 Add the nested observation table for expanded packet rows 2026-07-27 19:24:39 -04:00
MrAlders0n 9300eefad1 Add the sticky packet table header 2026-07-27 19:20:10 -04:00
MrAlders0n 8bd0f92aff Restore n/a fallback in observer and IATA cells, scope the covering test 2026-07-27 19:17:03 -04:00
MrAlders0n 8795c360ff Add the two-line packet table row 2026-07-27 19:10:07 -04:00
MrAlders0n dbed149679 Cover endpoint pairs, high tint, and unresolved-run chips in PacketPathLine 2026-07-27 19:01:34 -04:00
MrAlders0n bdf7ac45e4 Render the packet path line with truncation and confidence tints 2026-07-27 18:56:03 -04:00
MrAlders0n 48587a0437 Cover pathBytes-absent and unresolved-endpoint cases in path summary tests 2026-07-27 18:52:10 -04:00
MrAlders0n 75124250d6 Add a pure path-summary model for the packet table's path line 2026-07-27 18:45:11 -04:00
MrAlders0n c9eb929a81 Fix ?path deep link when ?analyze is absent 2026-07-27 18:35:45 -04:00
MrAlders0n 89a8980212 Split ?hash into row expansion and ?analyze for the analyzer drawer 2026-07-27 18:19:09 -04:00
MrAlders0n 1dbbce1ad8 Extract usePacketDetail and share it across the analyzer and overlay 2026-07-27 18:08:21 -04:00
MrAlders0n 161f481576 Carry path and endpoint fields from WS observations into packet summaries 2026-07-27 18:01:32 -04:00
MrAlders0n 464e701f76 Add a toggleable IATA border layer to the map
Draw each active IATA's GeoJSON region border as an outline over a faint
fill beneath the node markers, behind a Map Settings toggle that's off by
default and shareable via a URL param. IATAs with no border answer 204
and are skipped.
2026-07-24 22:21:12 -04:00
MrAlders0n 8baa562794 Add a Clock Drift analytics tab
List repeaters and room servers whose advert-derived clock has drifted
past the server threshold, worst first, in a sortable table. It's each
node's latest reading, so there's no time range to pick.
2026-07-24 22:20:49 -04:00
MrAlders0n e6a714aed9 Split top advertisers into flood and direct adverts
Surface each advertiser's flood vs direct advert counts with a per-day
rate for the selected window, as a sortable table on the Talkers tab.
2026-07-24 22:19:24 -04:00
MrAlders0n 7a2d74b7ca Pin overview sparklines to a fixed 24h window
The Observations and Active observers KPI cards show a fixed 24h snapshot
(from /stats/overview), but their sparklines were fed by the range-driven
observations series. Switching to 7d/30d reshaped the sparklines even
though the numbers beside them stayed at 24h, since aggregateByHour drops
empty hours and slice(-24) then spans a different set of hours.

Give the sparklines their own dedicated 24h observations series so the
whole top row is a consistent 24h snapshot; the range selector now only
drives the charts below. React Query dedupes the extra call when the
selector is already on 24h.
2026-07-24 09:47:47 -04:00
MrAlders0n f1a69fa121 Mark each top advertiser with its IATA 2026-07-24 09:11:32 -04:00
MrAlders0n 34bb171429 Lay out Talkers side by side and label advertiser node types 2026-07-24 08:54:23 -04:00
MrAlders0n 45842949d4 Group top advertisers and talkers on the Talkers tab 2026-07-24 08:47:19 -04:00
MrAlders0n e526c08fa4 Send multi-select packet filters to the server 2026-07-24 08:47:19 -04:00
MrAlders0n 98ca904ac2 Refresh stale radio-freq and telemetry comments for current backend 2026-07-24 06:55:24 -04:00
MrAlders0n 1303e952a7 Add tests for path endpoint, trace, and clock-drift edge cases 2026-07-24 06:19:19 -04:00
MrAlders0n 948cfa25b0 Fix public-key node search field switching and non-hex input 2026-07-24 06:19:19 -04:00
MrAlders0n badd919e0d Only plot unambiguously-resolved path endpoints on the map 2026-07-24 06:16:51 -04:00
MrAlders0n 913151c610 Show device clock drift on the node detail panel 2026-07-23 23:31:05 -04:00
MrAlders0n 23bacde2b8 Add public key prefix search to the nodes table 2026-07-23 23:10:31 -04:00
MrAlders0n 7bf30da5c1 Add top advertisers to Mesh stats and a Talkers leaderboard tab 2026-07-23 23:05:39 -04:00
MrAlders0n 88ae52bdf4 Show packet source and destination on the path map and analyzer 2026-07-23 22:53:02 -04:00
MrAlders0n 6af9d652aa Keep path map at a fixed height on narrow screens 2026-07-18 22:28:01 -04:00
MrAlders0n 02ec63cc0f Add path-map deep links, per-observer propagation, and tappable nodes 2026-07-18 13:37:42 -04:00
MrAlders0n 2132e78f28 Collapse the path map attribution to a bare (i) by default 2026-07-18 09:55:50 -04:00
MrAlders0n 01b722b5c5 Add 'view path on map' popup to the packet analyzer 2026-07-18 09:16:27 -04:00
MrAlders0n 11b06000b5 Back out frontend zero-frame filter; fixing at the source instead 2026-07-15 22:04:42 -04:00
MrAlders0n fb376901f9 Drop empty observer telemetry frames and show airtime as duration 2026-07-15 21:44:11 -04:00
MrAlders0n 65965ac8be Merge main into dev 2026-07-14 23:34:39 -04:00
MrAlders0n bc62d28581 Bump version to 1.2.1 2026-07-14 23:30:50 -04:00
MrAlders0n 1b42e023d8 Restore files clobbered by the main merge 2026-07-14 23:30:50 -04:00
MrAlders0nanddependabot[bot] dff9729583 v1.2.0 (#19)
* stats: node-types donut, multi-IATA filtering, preset split

 - node-types: new /stats/node-types endpoint + useNodeTypes; donutOption
   replaces the "Coming soon" card with a live donut
 - stats endpoints take iatas[] instead of a single iata, so multi-IATA
   regions filter instead of falling back to all (drops useStatsIata)
 - radio presets keep the node/observer split via stacked presetBarsOption
 - drop client-side telemetry ms-normalization (backend now emits epoch ms
   on both paths); charts pick delta-vs-raw counters off the response interval
 - MeshTab: range-driven charts lead, all-time charts follow; KPI window
   from overview.windowHours instead of a hardcoded 24h
 - ci: docker-publish builds a :dev image on dev-branch pushes

* feat: traces vs pings
feat: SNR for trace path in list
feat: known niehgbour count

* fix: github workflow, post images publically

* build(deps): bump undici from 7.27.2 to 7.28.0 (#9)

Bumps [undici](https://github.com/nodejs/undici) from 7.27.2 to 7.28.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.27.2...v7.28.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 7.28.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat: discover renderers, neighbor map lines, live packet flow

- Discover packets decoded: DISCOVER_REQ/DISCOVER_RESP render real fields
  (type-filter roles, tag, node-to-node request SNR) instead of a raw dump.
- Neighbor lines on the map: On/Selected/Off control draws links between nodes
  and their known neighbors.
- Live packet flow: a play button animates packets hop-to-hop between repeaters
  in real time (off by default).

* map: live mode dims nodes, flashes each packet's route

* map: shoot a comet along each packet's route in live mode

* map: rework live mode — packet dot, dashed trail, per-hop flash

* map: fade live-mode clusters more so dense ones stay see-through

* map: persist clustering + node-type, default neighbor lines to selected

* map: fade live-mode node markers more so overlaps stay see-through

* map: fade the live-mode node flash in sync with its packet trail

* nodes: let the mobile detail panel minimize without deselecting

* map: dim other nodes to spotlight a selected node and its neighbours

* map: colour a selected node's neighbour lines by obs count and freshness

* Add a neighbour graph under the renamed Analytics tab

* Focus the neighbour graph into an ego view on click

* Wrap the analytics sub-header so the range stays on-screen on mobile

* Use a dropdown for the analytics sections on mobile

* Gate the neighbour graph to a region and size labels by busyness

* Add a name search that spotlights matches and dims the rest of the mesh

* Add a copy button beside node and observer public keys

* Add a copy link to node and observer detail panels

Deep-linked ?node/?observer selections now survive load: the region
reset watches the raw selection instead of the async-resolved regionKey,
so slug expansion no longer wipes a restored panel.

* Add .env options for hiding tabs, MeshMapper themes, app name and a GitHub link

* Make VITE_ENABLED_THEMES an exclusive theme allowlist

* Add a .env option to skip the load splash

* Keep the packets list static while scrolled down instead of jumping on new packets

* Add Map deep-links for camera and settings with a copy-link button

* Filter packet history on the server when a single type, route or scope is selected

* Show loading feedback while packet history loads

* build(deps): bump echarts from 5.5.1 to 6.1.0 (#14)

* Fix: github workflow + stats tab + add traces vs pings (#10)

* stats: node-types donut, multi-IATA filtering, preset split

 - node-types: new /stats/node-types endpoint + useNodeTypes; donutOption
   replaces the "Coming soon" card with a live donut
 - stats endpoints take iatas[] instead of a single iata, so multi-IATA
   regions filter instead of falling back to all (drops useStatsIata)
 - radio presets keep the node/observer split via stacked presetBarsOption
 - drop client-side telemetry ms-normalization (backend now emits epoch ms
   on both paths); charts pick delta-vs-raw counters off the response interval
 - MeshTab: range-driven charts lead, all-time charts follow; KPI window
   from overview.windowHours instead of a hardcoded 24h
 - ci: docker-publish builds a :dev image on dev-branch pushes

* feat: traces vs pings
feat: SNR for trace path in list
feat: known niehgbour count

* fix: github workflow, post images publically

* build(deps): bump echarts from 5.5.1 to 6.1.0

Bumps [echarts](https://github.com/apache/echarts) from 5.5.1 to 6.1.0.
- [Release notes](https://github.com/apache/echarts/releases)
- [Commits](https://github.com/apache/echarts/compare/5.5.1...6.1.0)

---
updated-dependencies:
- dependency-name: echarts
  dependency-version: 6.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump version to 1.2.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
v1.2.0
2026-07-14 23:18:10 -04:00
MrAlders0n cfe6a8f0ea Merge branch 'main' into dev
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
2026-07-14 23:17:55 -04:00
MrAlders0n 493aedb41f Bump version to 1.2.0 2026-07-14 23:14:05 -04:00