feat(dashboard): service health widget, Cmd+K palette, CI runs, pinned shortcuts
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
<script>
|
||||
import Sidebar from "./components/Sidebar.svelte";
|
||||
import CommandPalette from "./components/CommandPalette.svelte";
|
||||
import Dashboard from "./routes/Dashboard.svelte";
|
||||
import Gitea from "./routes/Gitea.svelte";
|
||||
import Files from "./routes/Files.svelte";
|
||||
@@ -29,6 +30,36 @@
|
||||
"transmission",
|
||||
]);
|
||||
|
||||
const navItems = [
|
||||
// Main
|
||||
{ id: "dashboard", label: "Overview", section: "main", description: "System stats, service health, CI runs" },
|
||||
{ id: "litellm", label: "LiteLLM", section: "main", description: "LLM proxy and model management" },
|
||||
{ id: "opc", label: "OPC", section: "main", description: "Open Project Console — kanban and agents" },
|
||||
{ id: "files", label: "Files", section: "main", description: "NAS file browser" },
|
||||
{ id: "terminal", label: "Terminal", section: "main", description: "SSH terminal to NAS" },
|
||||
{ id: "security", label: "Security", section: "main", description: "WebAuthn passkeys and TOTP" },
|
||||
// Media
|
||||
{ id: "transmission", label: "Transmission", section: "media", description: "BitTorrent client" },
|
||||
{ label: "Navidrome", section: "media", remoteHref: "https://music.jimmygan.com", description: "Music streaming" },
|
||||
{ label: "Jellyfin", section: "media", remoteHref: "https://media.jimmygan.com", description: "Media server" },
|
||||
{ label: "Audiobookshelf", section: "media", remoteHref: "https://books.jimmygan.com", description: "Audiobooks & podcasts" },
|
||||
{ label: "Immich", section: "media", remoteHref: "https://photos.jimmygan.com", description: "Photo and video backup" },
|
||||
{ label: "t-youtube", section: "media", remoteHref: "https://yt.jimmygan.com", description: "YouTube subscription reader" },
|
||||
{ label: "Media Management", section: "media", remoteHref: "https://media.jimmygan.com", description: "Media library management" },
|
||||
// Tools
|
||||
{ id: "chat-digest", label: "Chat Digest", section: "tools", description: "Telegram group summaries" },
|
||||
{ id: "conversations", label: "Code Sessions", section: "tools", description: "Claude Code session browser" },
|
||||
{ id: "gitea", label: "Repos", section: "tools", description: "Gitea repository list" },
|
||||
{ label: "Gitea Web", section: "tools", remoteHref: "https://git.jimmygan.com", description: "Gitea web interface" },
|
||||
{ label: "Hermes", section: "tools", remoteHref: "https://hermes-agent.nousresearch.com/docs", description: "Hermes Agent docs" },
|
||||
{ label: "Stirling PDF", section: "tools", remoteHref: "https://pdf.jimmygan.com", description: "PDF tools" },
|
||||
{ label: "Vaultwarden", section: "tools", remoteHref: "https://vault.jimmygan.com", description: "Password manager" },
|
||||
{ label: "n8n", section: "tools", remoteHref: "https://n8n.jimmygan.com", description: "Workflow automation" },
|
||||
{ label: "Speedtest", section: "tools", remoteHref: "https://speed.jimmygan.com", description: "Network speed test" },
|
||||
// Settings
|
||||
{ id: "settings", label: "Settings", section: "tools", description: "Dashboard configuration" },
|
||||
];
|
||||
|
||||
let page = $state("dashboard");
|
||||
let dark = $state(false);
|
||||
let sidebarOpen = $state(false);
|
||||
@@ -177,6 +208,7 @@
|
||||
{:else}
|
||||
<div class="flex h-screen overflow-hidden bg-surface-50 dark:bg-surface-900">
|
||||
<Sidebar bind:page {dark} {toggleTheme} {logout} bind:sidebarOpen {allowedPages} {allowedSidebarLinks} {userRole} {sidebarOrder} onOrderChange={handleOrderChange} />
|
||||
<CommandPalette items={navItems} onNavigate={(id) => page = id} />
|
||||
<main class="flex-1 overflow-auto">
|
||||
<div class="max-w-[1400px] mx-auto p-6 lg:p-8">
|
||||
<!-- Mobile hamburger -->
|
||||
|
||||
Reference in New Issue
Block a user