Component-level design docs live under specs/designs/, organized by category:
specs/designs/
├── 00-foundation/ — core server infrastructure (server lifecycle, auth, config)
├── 01-data/ — external data sources (Git, Kubernetes)
├── 10-layout/ — overall UI designs
└── 11-models/ — model page designs
The UI maintains a stable set of domain models — its canonical, backend-agnostic representation of each resource, used by all forms and stores. They are an intermediate representation: they translate to and from the Custom Resources of whichever backend the deployment targets — the platform's own operator, or a community standard such as kagent or KServe. Field-level detail is defined in the individual entity design specs.
Every major resource type exists in two variants that the UI must handle:
The UI unifies each pair into a single entity concept with a variant discriminator. Form fields and validation rules differ by variant.
Two major paths are supported:
The platform is designed for shared use across multiple teams. Each team operates within a workspace — an isolated namespace that owns its own models, tools, knowledge bases, skills, memories, and agents. Workspace membership and permissions are managed through the workspace settings.
Home
├── Playground
│ ├── Session list
│ └── [Session] → Active chat session with a selected agent
├── Usage
│ ├── Cost dashboard
│ └── Cost settings
├── Utilities
│ ├── Agent test
│ ├── Knowledge base test
│ ├── Tool (MCP) test
│ └── Model test
├── Workloads
│ ├── Agents
│ │ ├── Agent list
│ │ ├── New agent
│ │ └── [Agent]
│ │ ├── Detail & status
│ │ └── Edit
│ ├── Memories
│ │ ├── Memory list
│ │ ├── New memory
│ │ └── [Memory]
│ │ ├── Detail & status
│ │ └── Edit
│ ├── Skills
│ │ ├── Skill list
│ │ ├── New skill
│ │ └── [Skill]
│ │ ├── Detail & definitions
│ │ └── Edit
│ ├── Knowledge Bases
│ │ ├── Knowledge base list
│ │ ├── New knowledge base
│ │ └── [Knowledge Base]
│ │ ├── Detail & documents & status
│ │ └── Edit
│ ├── Tools
│ │ ├── Tool list
│ │ ├── New tool
│ │ └── [Tool]
│ │ ├── Detail & status
│ │ └── Edit
│ ├── Models
│ │ ├── Model list
│ │ ├── New model
│ │ └── [Model]
│ │ ├── Detail & status
│ │ └── Edit
│ └── Stacks
│ ├── Stack list
│ ├── New Stack
│ └── [Stack]
│ ├── Detail & status
│ └── Edit
├── Workspace settings
└── User settings
The shell is a three-column layout:
┌──────────┬─────────────────────────────────┬───────────┐
│ │ Top bar │ │
│ ├─────────────────────────────────┤ │
│ Sidebar │ │ Assistant │
│ │ Main content │ panel │
│ │ │ │
│ │ │ │
└──────────┴─────────────────────────────────┴───────────┘
shadcn-svelte is the component library. Components are installed into $lib/components/controls/ via the shadcn-svelte CLI and customized in place. Do not wrap shadcn components in extra abstraction layers — edit them directly when customization is needed.
shadcn-svelte uses bits-ui for headless primitives and is fully compatible with Svelte 5 Runes.
Dark theme with a Glassmorphism aesthetic: frosted-glass panels floating over a gradient mesh background. Card, dialog, and popover surfaces use backdrop-filter blur with semi-transparent fills. The background is a deep navy with subtle radial gradient accents.
Three glass levels of increasing blur and opacity: background panels → cards/forms → dialogs/popovers.
Lucide via lucide-svelte. Slightly muted at rest, full opacity on hover/active.