Give satellite passes their own page under Tools #50

Merged
sjg merged 1 commits from feat/satellite-predictions-page into main 2026-08-07 00:06:00 +02:00
Owner

Closes #47.

Pass predictions were a third view inside the Weather Satellite Decoder card on
the Digital modes tab — reached by opening a decoder panel, then switching
views. Knowing when a bird comes over is a planning question; it had nothing to
do with the FT8 and WEFAX panels it sat beside.

What moved

They are now their own page at /satellites, reached from Tools alongside
Statistics, Recorder, Settings and About — the occasional destinations that
live behind that menu instead of taking a slot in the operating strip.

The prediction code leaves sat.ts for its own plugin that loads with the
page, so the decoder card no longer carries it. The card keeps Live and
History; its Predictions button is gone.

Nav placement

Adding a sixth button to the strip wrapped the phone nav onto two rows and cost
the desktop strip its labels at 1280px, so the tab is hidden from the strip the
same way its four peers already are. Measured against main, the visible strip
and the icons-only threshold are identical at 390px and 1280px.

Lifecycle

The countdowns tick once a second, so they stop when the page is hidden, and
each visit reloads — passes go stale while the page is closed. The old cleanup
hook hanging off the decoder sub-tab bar is gone with the view it cleaned up.

Server

/satellites gets an index route in api/assets.rs, so a deep link or a
refresh serves the SPA shell rather than a 404 — the same handler every other
tab route has.

Verification

A new browser test (tests/satellite-predictions.mjs, wired into
npm run test:browser) covers the move: the page renders current and upcoming
passes at its own address, the countdown ticks, leaving clears it, returning
reloads, the tab is behind Tools rather than in the strip, and the decoder card
no longer offers Predictions. The fixture learned to serve /sat_passes.

typecheck, lint, 47 unit tests, the browser suite, cargo clippy --all-targets
and cargo fmt --check are all clean. browser-smoke.mjs fails identically on
main on this machine (a map layout assertion), so it is untouched by this
change.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SyX26FCpMQxiBoC7r5K1A7

Closes #47. Pass predictions were a third view inside the Weather Satellite Decoder card on the Digital modes tab — reached by opening a decoder panel, then switching views. Knowing when a bird comes over is a planning question; it had nothing to do with the FT8 and WEFAX panels it sat beside. ## What moved They are now their own page at `/satellites`, reached from **Tools** alongside Statistics, Recorder, Settings and About — the occasional destinations that live behind that menu instead of taking a slot in the operating strip. The prediction code leaves `sat.ts` for its own plugin that loads with the page, so the decoder card no longer carries it. The card keeps Live and History; its Predictions button is gone. ## Nav placement Adding a sixth button to the strip wrapped the phone nav onto two rows and cost the desktop strip its labels at 1280px, so the tab is hidden from the strip the same way its four peers already are. Measured against `main`, the visible strip and the icons-only threshold are identical at 390px and 1280px. ## Lifecycle The countdowns tick once a second, so they stop when the page is hidden, and each visit reloads — passes go stale while the page is closed. The old cleanup hook hanging off the decoder sub-tab bar is gone with the view it cleaned up. ## Server `/satellites` gets an index route in `api/assets.rs`, so a deep link or a refresh serves the SPA shell rather than a 404 — the same handler every other tab route has. ## Verification A new browser test (`tests/satellite-predictions.mjs`, wired into `npm run test:browser`) covers the move: the page renders current and upcoming passes at its own address, the countdown ticks, leaving clears it, returning reloads, the tab is behind Tools rather than in the strip, and the decoder card no longer offers Predictions. The fixture learned to serve `/sat_passes`. typecheck, lint, 47 unit tests, the browser suite, `cargo clippy --all-targets` and `cargo fmt --check` are all clean. `browser-smoke.mjs` fails identically on `main` on this machine (a map layout assertion), so it is untouched by this change. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01SyX26FCpMQxiBoC7r5K1A7
sjg added 1 commit 2026-08-06 23:24:09 +02:00
[fix](trx-frontend-http): give satellite passes their own page
CI / lint (pull_request) Successful in 6m30s
CI / test (pull_request) Successful in 8m31s
CI / frontend (pull_request) Successful in 4m30s
CI / reuse (pull_request) Successful in 5s
e52c4839c9
Pass predictions were a third view inside the Weather Satellite Decoder card,
under Digital modes — a planning tool filed behind a decoder toggle, beside the
FT8 and WEFAX panels it has nothing to do with.  Nothing about knowing when a
bird comes over belongs there.

Move them to /satellites, reached from Tools alongside Statistics, Recorder,
Settings and About: occasional destinations that live behind that menu rather
than taking a slot in the operating strip.  Adding a sixth strip button wrapped
the phone nav onto two rows and cost the desktop strip its labels at 1280px, so
the tab is hidden from the strip exactly the way its four peers already are —
the nav is byte-for-byte what it was.

The prediction code moves out of sat.ts into its own plugin that loads with the
page, so the decoder card no longer carries it.  Countdowns stop when the page
is hidden and each visit reloads, since passes go stale while it is closed.
The server grows a /satellites index route so a deep link or a refresh serves
the SPA shell rather than a 404.

Closes #47

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SyX26FCpMQxiBoC7r5K1A7
Signed-off-by: Stan Grams <sjg@haxx.space>
sjg merged commit f396e8f235 into main 2026-08-07 00:06:00 +02:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sjg/trx-rs#50