146 Commits
Author SHA1 Message Date
MrAlders0n 008b2afad8 Show an error with retry, not an empty list, when packets, channels, messages or adverts fail to load (#178) 2026-10-20 02:32:11 -04:00
MrAlders0n b8d404b63b Page by the exact cursor and wait out a busy server (#177)
* Send pageCursor next to cursor for packets, nodes and observers

* Page nodes by the exact cursor when the server sends one

* Page packets by the exact cursor when the server sends one

* Retry a busy 503 or a 429 after the server's Retry-After

* Bump version to 2.1.0

* Recover from an invalid pageCursor; cap 503 waits
2026-10-19 16:00:01 -04:00
MrAlders0n 4ab49c1407 Read the server version from /info instead of probing the observer directory (#176) 2026-10-19 03:33:43 -04:00
MrAlders0n f4098111e7 Load nodes 200 at a time and wait out a rate limit (#175)
Map and Nodes fetch a region at the server's 200 cap instead of 50, a
quarter of the requests. A 429 now pauses paging until Retry-After and
retries the refused page, instead of stopping with "Some nodes failed to
load".
2026-10-18 23:13:04 -04:00
MrAlders0n a8cd595b35 Give emoji in names and messages room to paint on 1x screens (#174)
Chrome on macOS lays an emoji out 1em wide but paints Apple's about 1.25em
wide at small sizes on standard-density screens, so it overlapped the next
letter (☠️Grunt, 🍓Strawberry). Each emoji in a node, observer or sender
name, and in channel messages, now sits in its own span that gets 0.3em of
extra room below 1.5x density. Retina screens render unchanged.
2026-10-18 19:56:43 -04:00
MrAlders0n 92bcc8ebc7 Speed up the Nodes table: mount only on-screen rows (#173)
* Speed up the Nodes table: mount only on-screen rows and sort with a shared collator

* Fit the Nodes table beside the detail panel and tidy virtualization

Name takes a 22% share and the table's floor drops to 52rem, so 1280 and
1366 px laptops no longer scroll sideways with a node open. Long names get
a title. Card dividers follow list position so heights stay put, cards and
rows cache sizes apart, getItemKey stays stable, and the table reports its
full row count to screen readers. Tests share one layout stub instead of a
global offsetHeight shim.
2026-10-18 19:52:56 -04:00
MrAlders0n bd5b8951e4 Live Map: hide all-node neighbour lines while Live is on (#172) 2026-10-18 15:13:58 -04:00
MrAlders0n 79f05a2ebd Live Map: keep nodes visible as dots and light crossed nodes on top (#171)
* Add live map lit-node and label helpers

* Add solid lit icons with a built-in ring

* Light crossed nodes as solid icons, newest on top

* Show idle repeaters and companions as dots in Live Map

* Disable the clustering control during Live Map

* Turn clustering off while Live Map is on

* Keep the live map helpers lint-clean

* Let a click on a lit icon win over the dot beneath it

* Tidy live map clicks, comments and filtered selection
2026-10-18 14:27:13 -04:00
MrAlders0n 0367ee5257 Search packet hashes server-side with hashPrefix 2026-10-14 09:13:50 -04:00
MrAlders0n 617478625d feat(nodes): show MeshMapper repeater details (#158) 2026-10-11 14:44:27 -04:00
Jesper B b453b8da8e Fix theme-aware chart colour selection (#147) 2026-10-10 10:10:26 -04:00
MrAlders0n e4760173c0 Sort top advertisers by flood or direct on the server, bump to 2.0.4 (#155) 2026-10-10 09:39:15 -04:00
MrAlders0n 8ac3e1bd4a Batch route search into two requests and gate old web versions (#152) 2026-10-09 22:20:23 -04:00
MrAlders0n a01ddcf4fb fix(observers): rank available traffic over rolling seven days 2026-10-05 08:40:59 -04:00
MrAlders0n 97fff7aa71 Add server-sorted observer directory pagination 2026-10-05 06:31:31 -04:00
MrAlders0n dc757cfb51 Fix channels page shifting and dropped bottom-nav taps on mobile (#146) 2026-10-03 14:21:06 -04:00
MrAlders0n 0924260dc5 Show activity before the first rollup as a gap (#138) 2026-10-02 19:22:20 -04:00
MrAlders0n acf46342a1 Fix issues from the 2.0.0 release review (#137) 2026-10-02 19:04:46 -04:00
MrAlders0n 4b9e48a35a Hourly observer and node sparklines on scope cards (#136) 2026-10-02 15:46:03 -04:00
MrAlders0n d951a7e362 Sparklines for most path entries and scope activity (#135) 2026-10-02 14:00:39 -04:00
MrAlders0n f6caab663c Add hourly sparklines to analytics stat cards (#134) 2026-10-02 13:37:26 -04:00
MrAlders0n 30a8f94dbd Wait for the selected region before loading lists (#133) 2026-10-02 12:13:41 -04:00
MrAlders0n 39e921c277 Serve analytics from hourly rollups and handle empty regions (#132) 2026-10-02 08:03:00 -04:00
MrAlders0n f9ffb564c7 Drop analytics refresh buttons and repeated titles (#131) 2026-10-01 18:58:26 -04:00
MrAlders0n 609dbc384f Translate the remaining hardcoded UI text (#129) 2026-10-01 17:55:54 -04:00
MrAlders0n e3f98efea9 Open the observer dashboard from Inspect observer (#128) 2026-10-01 16:57:04 -04:00
MrAlders0n e491a822c9 Plain wording across panels and fix retention-bound views (#127) 2026-10-01 16:36:11 -04:00
MrAlders0n bd32c0019f Fold route evidence into Route Detail with a recent packets list (#126) 2026-10-01 15:41:59 -04:00
MrAlders0n a252b953fe List keyed channels up front and load the rest on demand (#125) 2026-10-01 09:18:42 -04:00
MrAlders0n e6e680192a Open the observer dashboard as a mobile overlay (#121) 2026-10-01 07:50:46 -04:00
MrAlders0n a8a248fd9d Keep the packet drawer and windows open across tabs (#120) 2026-10-01 04:09:00 -04:00
MrAlders0n a2ed9f70aa Match the observation card to the theme (#118) 2026-09-30 23:17:20 -04:00
MrAlders0n 24c4abf6f4 Show the observer list beside the dashboard (#117) 2026-09-30 23:03:50 -04:00
MrAlders0n 487dca948c Collapse the analyzer's observations list by default (#116) 2026-09-30 23:03:19 -04:00
MrAlders0n b1ced5150c Clear map borders when the toggle is turned off (#115) 2026-09-30 22:44:52 -04:00
MrAlders0n 24b995bf12 Move channel scope filter into the header (#114) 2026-09-30 22:34:44 -04:00
MrAlders0n 35d117a636 Region-filtered scope lists (#113) 2026-09-30 22:09:37 -04:00
MrAlders0n 85e4d90cbe Analyzer: one observations list, transport scope breakdown (#112) 2026-09-30 21:18:10 -04:00
MrAlders0n e2d272e08e Drop the Observer section from Analytics (#111) 2026-09-30 16:09:13 -04:00
MrAlders0n fb0994bd05 One observations list in the packet analyzer (#110) 2026-09-30 15:43:44 -04:00
MrAlders0n 61ab6697d9 Labelled observer details and stacked header actions (#109) 2026-09-30 14:42:55 -04:00
MrAlders0n 31d01a8425 Shared observer sidebar and header actions (#108) 2026-09-30 14:36:17 -04:00
MrAlders0n b1f41dea1d Observer header details, channel row cleanup, tab order (#107) 2026-09-30 14:10:18 -04:00
MrAlders0n 63344af365 Polish observer cards and clock drift on phones (#106) 2026-09-30 13:47:10 -04:00
MrAlders0n 8d1f30d553 Bring back the Analytics observer tab and tidy analytics (#104) 2026-09-30 13:24:54 -04:00
MrAlders0n 00d859d9a2 fix(nodes): clear a node's position when nodeUpdate sends null (#103)
The server now nulls a location on an explicit 0/0 advert and the WS nodeUpdate
event mirrors that: omitted lat/lng keeps the current position, null clears it.
patchNodeSummary used ?? so a clear was ignored.
2026-09-30 11:29:35 -04:00
MrAlders0n 3e43cfd009 fix: follow up on last week's merges (#55-#101) (#102)
Bugs: clear compare params on tab change, recover channel live messages after a 429,
observer copy link keeps only region params, route table no longer navigates on region
change with nothing selected, map borders memo on data identity, live overview can't
resurrect a failed query, French relative times, no language write on first visit,
0/0 node locations hidden outside the map, path/signal stats use the shared retry rule.

i18n: node/packet/mesh/observer strings that were still hardcoded after #62.

Cleanup: formatUtc, ACTION_BUTTON_CLASS, observer-stats, useWindowedStats, observer-id;
observer pages use StatCard/Card/Field/Segmented/SearchBar/SelectDropdown; one details
chrome on the stats tabs; comment and translations-guide trims; localStorage stub for
Node 26 in the test setup.
2026-09-30 10:19:32 -04:00
MrAlders0n 39b85a9032 fix: follow up on the #75-#99 stack review (#101) 2026-09-30 08:35:07 -04:00
n30nex d259be512e feat: observer monitoring, retained evidence and channel scopes (#75-#99)
Lands the stacked web PRs #75, #79, #80, #81, #83, #85, #87, #89, #92, #95 and #99 in one squash. Server counterparts #166-#176 are merged. Remaining review items follow in a fix PR.
2026-09-30 08:03:13 -04:00
MrAlders0n 54b5093ac0 fix(packets): fold summaries into the endpoints cell (#73) 2026-09-25 11:37:57 -04:00