The fleet Overview area (Overview/Updates/Improvements/Backups/Migrate) now
lives at /apps/overview* instead of /overview*, reflecting that it belongs to
App Center. The Backups tab is therefore /apps/overview/backups, and the old
standalone Backup Center page is removed entirely:
- apps feature owns /apps/overview* (covered by the existing /apps* route); its
mount() dispatches /apps/overview -> fleet Overview before the grid check.
- _legacyRedirect() rewrites old short URLs so bookmarks/links keep working and
the address bar shows the canonical path:
/overview[/tab] -> /apps/overview[/tab]
/backup[/sub] -> /apps/overview/backups[/sub]
/updater, /peers redirects retargeted to /apps/overview*
- Removed the standalone backup feature: components/backup/{index.js,feature.json},
its manifest entry, the /backup route registrations and the dead handleBackup().
The BackupPage classes stay — the Overview Backups tab embeds them.
- Repointed every backups/overview link: the admin dashboard's 'Open backup
center', the app-card 'Open backup center' button + snapshot-overflow link,
the sidebar Overview entry, the improvements deep-link, and the Migrate
'go to locations' deep-link.
Also drop the redundant inline Check button from the Security empty state
(same rationale as Improvements: the host auto-scan repopulates it and the
header carries a manual Check).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
79 lines
2.0 KiB
JSON
79 lines
2.0 KiB
JSON
{
|
|
"version": 1,
|
|
"note": "Hand-committed page manifest — the authoritative source of pages (feature-registry tries /api/features/list first, then falls back here; that live scan endpoint is deferred — see docs/architecture/webui-architecture.md). 'module' is the feature's self-registering index.js; the kernel loads these from here so they no longer need <script> tags in index.html. 'handler' names the LibrePortalSPAClean method kept as the fallback during the strangler migration; 'navId' is the topbar element id for active-state highlighting.",
|
|
"features": [
|
|
{
|
|
"id": "dashboard",
|
|
"routes": [
|
|
"/",
|
|
"/dashboard"
|
|
],
|
|
"module": "/components/dashboard/index.js",
|
|
"handler": "handleDashboard",
|
|
"navId": "nav-dashboard",
|
|
"nav": {
|
|
"label": "Dashboard",
|
|
"order": 10
|
|
},
|
|
"order": 10
|
|
},
|
|
{
|
|
"id": "apps",
|
|
"routes": [
|
|
"/apps",
|
|
"/apps*",
|
|
"/app",
|
|
"/app*"
|
|
],
|
|
"module": "/components/apps/index.js",
|
|
"handler": "handleApps",
|
|
"navId": "nav-app-center",
|
|
"nav": {
|
|
"label": "App Center",
|
|
"order": 20
|
|
},
|
|
"order": 20
|
|
},
|
|
{
|
|
"id": "admin",
|
|
"routes": [
|
|
"/admin",
|
|
"/admin*"
|
|
],
|
|
"module": "/components/admin/index.js",
|
|
"handler": "handleAdmin",
|
|
"navId": "nav-config",
|
|
"nav": {
|
|
"label": "Admin",
|
|
"order": 40
|
|
},
|
|
"order": 40
|
|
},
|
|
{
|
|
"id": "tasks",
|
|
"routes": [
|
|
"/tasks",
|
|
"/tasks*"
|
|
],
|
|
"module": "/components/tasks/index.js",
|
|
"handler": "handleTasks",
|
|
"navId": "nav-tasks",
|
|
"nav": {
|
|
"label": "Tasks",
|
|
"order": 60
|
|
},
|
|
"order": 60
|
|
},
|
|
{
|
|
"id": "updater",
|
|
"routes": [
|
|
"/updater",
|
|
"/updater*"
|
|
],
|
|
"module": "/components/updater/index.js",
|
|
"navId": "nav-updater",
|
|
"order": 30
|
|
}
|
|
]
|
|
}
|