Adopt design comps: dark system, new landing/auth, dashboard shell + canvas

Re-skins the whole app to the dark design comps and wires the new surfaces to
the backend (the /api proxy + auth + schemas are unchanged).

Design system:
- globals.css: remapped @theme tokens to the comp palette (#08080a base, coral
  #ff6f61, status cyan/green/amber/purple/teal); token names preserved
- MeshMark: triangle + 3-node brand glyph; cm-flow/cm-blink/cm-halo keyframes
- marketing flipped light → dark

Backend (migration 0012):
- agents.model_binding (persisted on team deploy) + GET /api/claws/{id}/runtime-config
- routine_runs table + scheduler journaling + GET /api/routines/runs
- GET /api/claws/{id}/compartments (anatomy aggregate)
- GET /api/structure/stats (workspace counts)

Frontend:
- Landing: full dark marketing page (hero constellation, deploy ladder,
  12-topology taxonomy, recursive execution, compare/Pareto, safety, self-host)
- Auth: dark split-panel AuthShell + comp LoginForm + Clerk SignIn themed dark
- Dashboard shell: TopBar (breadcrumb + live stats + deploy + user) + StatusBar
  (runner/sandbox/doors); rail slimmed to 60px + 252px context column
- ConstellationCanvas (radial recursive) replaces the graph view in StructureCanvas;
  selecting a claw opens ComputerPanel (apps/now-running/dock); RoutinesPanel
- Claw anatomy view (/claws/[id]/anatomy) from compartments + runtime-config

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Omar Sobh
2026-06-19 04:12:16 -07:00
co-authored by Claude Opus 4.8
parent 3eca4ed70c
commit 540c74f42e
41 changed files with 2253 additions and 406 deletions
+30
View File
@@ -44,6 +44,36 @@ pub struct StructureNode {
pub children: Vec<StructureChild>,
}
/// Workspace-wide hierarchy counts for the breadcrumb + status bar.
#[derive(Serialize)]
pub struct StructureStats {
pub org_count: usize,
pub company_count: usize,
pub team_count: usize,
pub claw_count: usize,
pub running_now: i64,
}
/// `GET /api/structure/stats` — counts across the whole workspace hierarchy.
pub async fn stats(
State(state): State<AppState>,
Authed(user): Authed,
) -> Result<Json<StructureStats>, ApiError> {
let ws = user.workspace_id;
let orgs = cm_db::repo::orgs::list_for_workspace(&state.pool, ws, 1000).await?;
let companies = cm_db::repo::companies::list_for_workspace(&state.pool, ws, 1000).await?;
let teams = cm_db::repo::teams::list_for_workspace(&state.pool, ws, 1000).await?;
let claws = cm_db::repo::agents::roster(&state.pool, ws).await?;
let running_now = cm_db::repo::topology_runs::count_active(&state.pool, ws).await?;
Ok(Json(StructureStats {
org_count: orgs.len(),
company_count: companies.len(),
team_count: teams.len(),
claw_count: claws.len(),
running_now,
}))
}
/// `GET /api/structure/{level}/{id}` — one level of the recursive hierarchy.
pub async fn node(
State(state): State<AppState>,