Perk-a-cola redesign + surface RCON map/gametype/roster/health

Themes the fleet manager around the Electric Cherry perk-a-cola from Mob of
the Dead — cherry-red art-deco label with electric cyan discharge. New
design tokens (Alfa Slab One + Inter + JetBrains Mono, self-hosted), full
redesign of layout/dashboard/cards/detail page, tokens pass on
deployments/betas/pipeline/beta/diff, cherry+lightning favicon.

Lights up server data that RCON was already fetching but the UI dropped.
parsePlayerRoster() extracts num/score/ping/guid/name from both status
dialects. Worker persists last_map/last_gametype/last_roster/last_seen_at/
last_error (new columns with idempotent boot-time ALTERs) and emits them
over SSE. Fleet cards now show health dot, map · gametype, top-3 roster
preview, and last-seen. Detail page adds a sortable full roster with
distinct empty-lobby vs offline states. New health classifier
(online/stale/offline) drives the visual state.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-09-12 08:20:54 -04:00
co-authored by Claude Opus 4.7
parent 854f5532a9
commit 9bff47a9a4
29 changed files with 1636 additions and 356 deletions
+16 -1
View File
@@ -1,10 +1,25 @@
import { writable } from 'svelte/store';
import { browser } from '$app/environment';
export interface RosterPlayer {
num: number | null;
score: number;
ping: number;
guid: string | null;
name: string;
}
export type Health = 'online' | 'stale' | 'offline';
export interface ServerStatus {
server: string;
players: number | null;
name?: string;
map: string | null;
gametype: string | null;
roster: RosterPlayer[] | null;
health: Health;
lastSeenAt: string | null;
lastError: string | null;
}
export const statusByServer = writable<Map<string, ServerStatus>>(new Map());