'use client' import { useState } from 'react' import { Panel } from '@/components/cluster/Panel' import { SlotMeter } from '@/components/cluster/SlotMeter' import { models, namespaces, nodes, type Node } from '@/lib/clusterMock' function Cells({ filled, total, tone = 'flux' }: { filled: number; total: number; tone?: 'flux' | 'rose' }) { return (
{Array.from({ length: total }, (_, i) => ( ))}
) } function NodeCard({ node, active, onSelect }: { node: Node; active: boolean; onSelect: () => void }) { const isGpu = node.gpu > 0 return ( ) } export default function TopologyPage() { const [selected, setSelected] = useState('worker-1') return (
{/* Thesis: the constraint that shaped everything downstream. */}

Surface B — Topology

Four nodes. One GPU. Eight sequence slots for everything that thinks.

Every workload below runs on hardware sitting in one room. The scarcest thing in it is inference capacity, so that is the number this page keeps in front of you.

{nodes.map((n) => ( setSelected(n.name)} /> ))}
    {namespaces.map((ns) => { const short = ns.running < ns.total return (
  • {ns.name} {ns.running}/{ns.total}
  • ) })}
    {models.map((m) => (
  • {m.name} {m.ready ? 'ready' : 'down'}

    {m.replicas}× replica · {m.seqPerReplica} seq · {m.contextTokens.toLocaleString()} ctx

  • ))}
    {['node and pod addresses', 'container arguments', 'image tags and digests', 'source repository URLs', 'Secret names', 'condition messages'].map((x) => (
  • {x}
  • ))}

Fields are built by explicit construction, so anything not listed as public never enters the response.

) }