mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-07-26 11:49:16 +00:00
cfb42af4e0
* fix(dashboard): replace Stack Health update badge with an icon The pill badge duplicated space already used by the stack name column. A CircleArrowUp icon after the name signals an update is available without competing with the existing ArrowUp/ArrowDown sort indicators in the same table. * fix(dashboard): add accessible name to update-available icon Icon-only indicators need an aria-label directly on the icon; title on a non-interactive span is not reliably announced by screen readers. * test(dashboard): cover the update-available icon's accessible name The icon-only indicator and its aria-label fix had no regression guard, unlike the equivalent update dot in StackRow. * refactor(dashboard): compute the update-available label once per row It was being derived twice (title and aria-label) from the same row.outdatedServices input. * fix: drop Community-tier pricing upsells from settings Community operators no longer see the "See pricing" link in Licensing or the "Need direct support?" callout in Support. The pricing link now only shows for an expired paid license needing to renew. * fix: make Resources images/volumes tables actually scrollable The tables were wrapped in a Radix ScrollArea sized with max-h-[62vh]. Radix's viewport uses height:100%, which cannot resolve against an ancestor whose computed height is auto (max-height alone isn't a definite height), so the viewport silently grew past the visible box and the extra rows were clipped with no way to reach them. Verified live: several image rows were permanently unreachable, with no working internal scrollbar and not enough outer page scroll to compensate. Switched to an explicit h-[62vh], which the viewport can resolve correctly, matching every other working ScrollArea in the codebase. Falls back to h-auto below the md breakpoint so the bespoke mobile layout keeps shrinking to content and scrolling via the outer page instead of gaining a fixed-height inner scroll box. * fix: apply ScrollArea definite-height fix across remaining lists Radix ScrollArea needs an explicit height, not max-height, or the viewport collapses and clipped rows become unreachable. Extend the Resources fix to security, settings, git, and create/import surfaces, and drop redundant outer wrappers where ModalBody already scrolls. * fix: migrate Networking tables to Radix ScrollArea Networks and Findings used native max-h + overflow-auto, which worked but broke glass scrollbar consistency with Resources and the design system. Switch them to ScrollArea with a definite height and the same mobile fallback as the other inventory tables. * fix: warn Classic bar users that the style is retiring soon When Appearance Navigation is set to Classic bar, show the same warn SettingsCallout pattern used for Constrained graphics. Preference is kept until removal; no alternate style is named in the copy. * fix: move Channels delivery retries below channel tabs Put channel configuration first and keep Delivery retries as a shared footer control under the Discord/Slack/Webhook/Apprise tabs. * fix: drop redundant More masthead from Smart bar overflow menu The trigger already reads More, so the dropdown masthead repeated the same label. Leave titled mastheads on Compact Navigate and Add quick link menus. * test: align Smart More E2E with masthead removal The overflow menu no longer shows a More heading. Assert the menu via the Logs item and lock that the redundant masthead stays gone. * fix: consolidate Fleet Map toolbar filters into a single row Adopt the same retractable search control used on Fleet > Overview and move the flag filters (missing deps, port conflicts, orphans, shared) onto the toolbar row right after the Graph/List selector. The node filter becomes a dropdown instead of individual toggle chips so it does not clutter the row as fleet size grows. * fix: move Networking Topology filters onto the search toolbar row Merge the ownership selector and boolean filter chips (include system, exposed, drift, missing external, shared) onto the same row as the stack/network search inputs, matching the Fleet Map toolbar layout. * fix: default the reclaimable-space banner off Resources > Docker & Storage's "Show reclaimable-space banner" toggle now defaults to off instead of on. Also flips the /settings fetch failure path to fail closed (hide the banner) to match the new default, instead of failing open. * fix: raise Compact launcher quick links cap from 5 to 7 * fix: add Discord link to Settings Support Self-serve Gives users a community chat channel alongside Documentation and GitHub Issues, using the official Discord mark since lucide-react has no brand icon for it. * fix: stop container NET I/O metric row height jump Give NET I/O more column share than CPU/MEM and keep metric values on one line with truncate so three-digit rates cannot grow the strip. * fix: elevate Doctor tab between Activity and Drift Make Compose Doctor easier to find in the anatomy strip by placing it with the ops judgment cluster, ahead of Dossier and inventory tabs.
105 lines
7.3 KiB
Plaintext
105 lines
7.3 KiB
Plaintext
---
|
|
title: Deep links and URLs
|
|
description: Bookmark, share, and refresh Sencho views with real browser URLs that survive Back and Forward.
|
|
---
|
|
|
|
Every major screen in Sencho has a stable address in the browser bar. Refresh the page, paste a link to a teammate, or use Back and Forward without losing your place.
|
|
|
|
## What gets its own URL
|
|
|
|
Sencho encodes the active node, the view you are on, and the deep state that view cares about.
|
|
|
|
| Destination | Example path | What it opens |
|
|
|-------------|--------------|---------------|
|
|
| Home dashboard | `/nodes/local/dashboard` | The home dashboard for the `local` node |
|
|
| Stack list (phone) | `/nodes/local/stacks` | The full-width stack list on a phone |
|
|
| Stack detail | `/nodes/local/stacks/radarr` | Radarr's stack detail (anatomy). Sidebar entry point |
|
|
| Compose editor | `/nodes/local/stacks/radarr/compose` | Radarr's compose.yaml Monaco editor |
|
|
| Env tab + file | `/nodes/local/stacks/radarr/env?env=.env.prod` | Radarr's env tab with a specific env file selected |
|
|
| Files browser | `/nodes/local/stacks/radarr/files` | Radarr's file browser (desktop; opens the compose editor instead on a phone) |
|
|
| Resources | `/nodes/local/resources` | Resources for the active node |
|
|
| Networking | `/nodes/local/networking` | Networking operator page for the active node |
|
|
| Security tab | `/nodes/local/security/images` | Security view on the Images tab |
|
|
| App Store | `/nodes/local/templates` | App Store on the active node |
|
|
| Logs | `/nodes/local/logs` | Cross-fleet log aggregation |
|
|
| Update | `/nodes/local/updates` | Fleet-wide update check |
|
|
| Console | `/nodes/local/host-console` | Host Console (admin role) |
|
|
| Console in a stack | `/nodes/local/host-console/radarr` | Host Console rooted in the Radarr stack directory |
|
|
| Audit | `/nodes/local/audit` | Audit history |
|
|
| Settings section | `/nodes/local/settings/nodes` | Settings on the Nodes section |
|
|
| Fleet tab | `/nodes/local/fleet/snapshots` | Fleet on the Snapshots tab (desktop) |
|
|
| Schedules filter | `/nodes/local/schedules?node=3` | Scheduled operations filtered to node `3` |
|
|
|
|
Fleet, Logs, Update, Schedules, and Audit are gated by role or license tier and are hub-only: their URLs redirect to the dashboard while a remote node is active. Console is also gated, but is reachable against any node, remote included. See [Multi-Node Fleet](/features/multi-node#what-top-level-views-show-when-a-remote-node-is-active) for the hub-only list and [RBAC & User Management](/features/rbac) for the full permission matrix.
|
|
|
|
Fleet tab URLs are stable slugs that do not always match the tab's on-screen label. For example the **Status** tab uses the `configuration` segment and the **Map** tab uses the `dependencies` segment.
|
|
|
|
Remote nodes use a slug derived from the node name and id (for example `/nodes/nas-box-42/dashboard`). The default local node keeps the short `local` slug.
|
|
|
|
## Stack detail vs compose editor
|
|
|
|
Clicking a stack in the sidebar opens **stack detail** at `/nodes/<node>/stacks/<stack>` (anatomy on the right). Opening the compose, env, or files editor appends that tab to the path:
|
|
|
|
- `/stacks/radarr`: detail
|
|
- `/stacks/radarr/compose`: compose.yaml editor
|
|
- `/stacks/radarr/env`: env editor
|
|
- `/stacks/radarr/files`: file browser (desktop)
|
|
|
|
Closing the Monaco editor returns you to the detail URL for that stack.
|
|
|
|
## Env tab URLs
|
|
|
|
Sencho encodes env file selection in the `?env=` query on the Env tab only:
|
|
|
|
- **Default file omitted:** when the stack's first env file is selected (usually `.env`), the URL is `/env` with no query parameter.
|
|
- **Non-default files use basenames only:** `?env=.env.prod`, never a server filesystem path.
|
|
- **Legacy bookmarks:** older links that used an absolute path in `?env=` still open the matching file by basename. Sencho normalizes the URL to basename form when the address bar updates.
|
|
- **Unknown basenames:** if `?env=` does not match any file on the stack, Sencho opens the default env file.
|
|
- **No env files:** a stack with no env file at all has no Env tab. Opening `/env` on it stays on the compose editor instead.
|
|
|
|
Compose and Files routes never carry `?env=`.
|
|
|
|
## Node slugs
|
|
|
|
- The primary local node is always `/nodes/local/...`.
|
|
- Every other node uses `/nodes/<name-slug>-<id>/...`, which stays stable when you rename the node (the id suffix is what Sencho resolves).
|
|
|
|
## Bookmarks and sharing
|
|
|
|
Copy the address bar after you land on a screen. Anyone with access to that Sencho instance and the right role can open the same view from the link. Sencho waits for permissions and license metadata to finish loading before it redirects a link you are allowed to see, so a valid paid or admin-only URL is not rewritten while metadata is still in flight.
|
|
|
|
If a link points at a stack that cannot be loaded (for example the node is offline), Sencho keeps the URL and shows a retryable error in the sidebar or on the phone stack detail screen instead of silently sending you home.
|
|
|
|
## Back, Forward, and refresh
|
|
|
|
- **Back / Forward** walk through the views you opened in order, including stack editor tabs where applicable.
|
|
- **Refresh** reloads the current URL and restores the same node, view, stack, and surface (detail vs compose/env/files editor) when the underlying data is available.
|
|
- **Unsaved edits** still block navigation. Sencho prompts before you leave a dirty compose or env buffer via Back, a sidebar link, or another stack.
|
|
|
|
## Phone layout
|
|
|
|
On a phone, Home and the stack list are distinct URLs even though both relate to stacks on desktop:
|
|
|
|
- `/nodes/local/dashboard` opens the home dashboard.
|
|
- `/nodes/local/stacks` opens the stack list.
|
|
|
|
On desktop, opening the stack list at `/nodes/local/stacks` canonicalizes to `/nodes/local/dashboard` because the sidebar stack list is part of the home layout on a wide screen.
|
|
|
|
Settings follows a similar split, but only on a phone: `/nodes/local/settings` opens the section list, and `/nodes/local/settings/<section>` opens a section directly. On desktop, `/nodes/local/settings` always normalizes straight to `/nodes/local/settings/appearance`; there is no bare section-list state to land on.
|
|
|
|
Fleet, Resources, Security, App Store, Logs, Update, Audit, and Schedules keep the exact same URL between desktop and phone, each rendering a phone-optimized screen at that path. Console also keeps the same URL on a phone (`/nodes/<node>/host-console`), but Host Console is a desktop-oriented terminal: open it on a wider screen for a full interactive session.
|
|
|
|
On a phone, `/nodes/local/stacks/<stack>/files` opens the compose editor instead. Sencho does not expose a separate file-browser URL on a phone.
|
|
|
|
## What is not in the URL
|
|
|
|
Some in-app state is intentionally not encoded:
|
|
|
|
- **Stack Anatomy sub-tabs** (Anatomy, Activity, Doctor, Drift, Dossier, Environment, and the rest) stay in memory only. Refresh returns you to the default Anatomy tab for that stack. A [Networking](/features/networking) finding's action can open a stack directly on its Doctor, Dossier, or Drift tab; this is in-app navigation, not a separate URL, so the same refresh behavior applies.
|
|
|
|
## Tips
|
|
|
|
- Use the global search palette (<kbd>Ctrl</kbd>+<kbd>K</kbd>) to jump anywhere; navigation still updates the URL when you pick a page, node, or stack.
|
|
- Deep links use stack directory names (the name you see in the sidebar), not internal compose filenames.
|
|
- Opening Sencho at `/` sends you to the active node's dashboard once you are signed in.
|