oberflaeche v4: Uebersicht als Startseite, KI-Box und Homelab mit Monitoring, Homelab-Updates je Geraet mit Alle aktualisieren, Protokoll, Einstellungsseite, neues Tab-Symbol

- Startseite "Alles auf einen Blick": Gesamtlage, je Bereich Messwerte mit Verlauf, wer welche Updates hat
  (Kurzform, Klick fuehrt in den Bereich), Hinweise, als Naechstes und zuletzt eingespielt
- Menue: Uebersicht, KI-Box (Cockpit, Updates, Modelle, Monitoring), Homelab (Cockpit, Updates, Monitoring,
  Protokoll), Einstellungen; Bereichsfarben Indigo und Violett; alte Adressen /updates und /modelle leiten weiter
- Homelab-Updates je Geraet: App-Version laeuft -> neu (mit Grund, wenn sie wartet), Pakete, Rueckweg, Knoepfe;
  Alle aktualisieren mit Plan in der Rueckfrage und Fortschritt; Cockpit zeigt die Gesundheit der Geraete
- Einstellungen als Seite: KI-Box, Homelab (Arcane-Schluessel, Docker echt/Probelauf, Ausfuehrer), Meldungen,
  Software-Stand
- Diagramme: Verlauf mit Fadenkreuz, Legende und Tabellenansicht, Kennzahlen mit Linie; Farben geprueft
- Tab-Symbol: favicon.ico/.svg, apple-touch-icon, Manifest-Icons

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 22:18:56 +02:00
co-authored by Claude Opus 5.5
parent bf1153cb66
commit 1104200a30
37 changed files with 2244 additions and 493 deletions
+57 -18
View File
@@ -1,42 +1,81 @@
import { createRootRoute, createRoute, createRouter, lazyRouteComponent, Navigate } from "@tanstack/react-router"
import {
createRootRoute, createRoute, createRouter, lazyRouteComponent, Navigate, redirect,
} from "@tanstack/react-router"
import { Absturz } from "./Absturz"
import { Shell } from "./Shell"
import { StartSeite } from "@/views/Start"
import { UebersichtSeite } from "@/views/Uebersicht"
const wurzel = createRootRoute({
component: Shell,
// Alte Lesezeichen (/ideen, /wissen, /cockpit …) führen einfach zum Start.
// Alte Lesezeichen (/ideen, /wissen, /cockpit …) führen einfach zur Übersicht.
notFoundComponent: () => <Navigate to="/" />,
})
// Der Start ist der Normalfall und kommt im ersten Bündel mit; Updates und Modelle
// werden erst beim ersten Besuch nachgeladen (Budget der CI-Ampel: 140 KB gzip).
const start = createRoute({ getParentRoute: () => wurzel, path: "/", component: StartSeite })
const updates = createRoute({
getParentRoute: () => wurzel,
path: "/updates",
// Die Übersicht ist der Normalfall und kommt im ersten Bündel mit; alle anderen Seiten werden erst beim
// ersten Besuch nachgeladen (Budget: 140 KB gzip für den Einstieg).
const uebersicht = createRoute({ getParentRoute: () => wurzel, path: "/", component: UebersichtSeite })
// Bereich KI-Box
const box = createRoute({
getParentRoute: () => wurzel, path: "/box", component: lazyRouteComponent(() => import("@/views/Start"), "StartSeite"),
})
const boxUpdates = createRoute({
getParentRoute: () => wurzel, path: "/box/updates",
component: lazyRouteComponent(() => import("@/views/Updates"), "UpdatesSeite"),
})
const modelle = createRoute({
getParentRoute: () => wurzel,
path: "/modelle",
const boxModelle = createRoute({
getParentRoute: () => wurzel, path: "/box/modelle",
component: lazyRouteComponent(() => import("@/views/Modelle"), "ModelleSeite"),
})
const boxMonitoring = createRoute({
getParentRoute: () => wurzel, path: "/box/monitoring",
component: lazyRouteComponent(() => import("@/views/Monitoring"), "BoxMonitoringSeite"),
})
// Der Bereich Homelab (Proxmox-PC) — getrennt von der KI-Box, mit eigenem Cockpit und eigenen Updates.
// Bereich Homelab
const homelab = createRoute({
getParentRoute: () => wurzel,
path: "/homelab",
getParentRoute: () => wurzel, path: "/homelab",
component: lazyRouteComponent(() => import("@/views/Homelab"), "HomelabSeite"),
})
const homelabUpdates = createRoute({
getParentRoute: () => wurzel,
path: "/homelab/updates",
getParentRoute: () => wurzel, path: "/homelab/updates",
component: lazyRouteComponent(() => import("@/views/Homelab"), "HomelabUpdatesSeite"),
})
const homelabMonitoring = createRoute({
getParentRoute: () => wurzel, path: "/homelab/monitoring",
component: lazyRouteComponent(() => import("@/views/Monitoring"), "HomelabMonitoringSeite"),
})
const homelabProtokoll = createRoute({
getParentRoute: () => wurzel, path: "/homelab/protokoll",
component: lazyRouteComponent(() => import("@/views/HomelabProtokoll"), "HomelabProtokollSeite"),
})
const einstellungen = createRoute({
getParentRoute: () => wurzel, path: "/einstellungen",
component: lazyRouteComponent(() => import("@/views/Einstellungen"), "EinstellungenSeite"),
})
// Frühere Adressen der KI-Box (bis 24.09.2026) leiten weiter — Lesezeichen und Links bleiben gültig.
const altUpdates = createRoute({
getParentRoute: () => wurzel,
path: "/updates",
beforeLoad: () => {
throw redirect({ to: "/box/updates" })
},
})
const altModelle = createRoute({
getParentRoute: () => wurzel,
path: "/modelle",
beforeLoad: ({ location }) => {
throw redirect({ to: "/box/modelle", hash: location.hash || undefined })
},
})
export const router = createRouter({
routeTree: wurzel.addChildren([start, updates, modelle, homelab, homelabUpdates]),
routeTree: wurzel.addChildren([
uebersicht, box, boxUpdates, boxModelle, boxMonitoring, homelab, homelabUpdates, homelabMonitoring,
homelabProtokoll, einstellungen, altUpdates, altModelle,
]),
defaultPreload: "intent",
defaultErrorComponent: Absturz,
})