Alerts tab, Docker tab, nine new skins including HUD, a colour for every machine

Alerts: rules over sensors, watched fleet-wide from the hub; ntfy and webhook channels;
firing count on the rail. Docker: containers by stack with live use, start/stop/restart,
following logs, inspect, images/volumes/networks. Skins: HUD, Nord, Gruvbox, Catppuccin
(+Latte), Dracula, Tokyo Night, Solarized (+Light). Accents: per-machine colour.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Mitchell-Johnson
2026-09-19 15:07:15 -07:00
co-authored by Claude Fable 5.1
parent 63fcba6077
commit cb1617c2b8
17 changed files with 1185 additions and 15 deletions
+3 -2
View File
@@ -4,9 +4,9 @@ import { ReactNode } from 'react'
// for the roadmap.
export interface Group { id: string; label: string; icon: ReactNode; soon?: boolean }
interface Props { groups: Group[]; view: string; header?: ReactNode; onView: (id: string) => void }
interface Props { groups: Group[]; view: string; header?: ReactNode; badges?: Record<string, number>; onView: (id: string) => void }
export default function Rail({ groups, view, header, onView }: Props) {
export default function Rail({ groups, view, header, badges, onView }: Props) {
return (
<nav className="rail">
{header}
@@ -17,6 +17,7 @@ export default function Rail({ groups, view, header, onView }: Props) {
<span className="gicon">{g.icon}</span>
<span>{g.label}</span>
{g.soon && <span className="badge">soon</span>}
{!!badges?.[g.id] && <span className="rail-badge" title={`${badges[g.id]} firing`}>{badges[g.id]}</span>}
</button>
</div>
))}