Loading page…
Loading page…
HARBORLINE runs on one shell. ConsoleFrame pins the node masthead — wordmark, network meta, harbor beacon — over the section rail, then hands the flush content region to the page. Every console panel below stacks inside it, each supplying its own padding and bottom keyline.
The shell with nothing but a stub tier. The beacon reports the node's link; the meta line carries network and version straight off the node-status fixture.
Content region
Panels stack here, flush to the frame — the shell adds no padding of its own.
<ConsoleFrame
active="status"
harbor={status.harbor}
meta={`Node console · ${status.network} · v${status.version}`}
>
<NodeStatGrid status={status} />
<SyncPanel percent={status.syncPercent} series={series} />
</ConsoleFrame>--ch-bg--ch-surface--ch-border--ch-fg--ch-radius-xl--ch-font-family-displayThe rail iterates CONSOLE_NAV — Status and Connection today. On a live screen the active leaf carries aria-current="page"; widen ConsoleSection to add a berth. Every rail on this page is inert scenery, so nothing here navigates.
Content region
The status berth is lit.
On a live screen this berth links to /surfaces/console/status.
Content region
The connection berth is lit.
On a live screen this berth links to /surfaces/console/connection.
<ConsoleFrame active="connection" meta="Node console">…</ConsoleFrame>
{/* scaled clones and specimens: */}
<ConsoleFrame active="connection" meta="Node console" inert>…</ConsoleFrame>--ch-primary--ch-fg-muted--ch-focus--ch-radius-mdThe two server-rendered tiers of the status screen. Both are propped, so a degraded node reads the same way a healthy one does.
Four headline figures — a synced node, a degraded one, and a node still dialing, whose last block reads an em dash because it has no tip yet.
Chain sync
Sync history · 30-min intervals
Chain-sync progress beside its 12-hour history — 24 fixture points at 30-minute intervals.
Peers · 8 connected
The mono caption every console panel opens with.
<NodeStatGrid status={nodeStatuses.degraded} />
<SyncPanel percent={99.1} series={series} interval="30-min intervals" />
<PanelLabel>Peers · 8 connected</PanelLabel>--ch-border--ch-fg--ch-fg-muted--ch-primary--ch-font-family-monoThe client island: cell renderers cannot cross the server boundary, so the columns live in the island and only rows come in as props. Sortable by latency; 5 of 8 endpoints run over Tor.
Endpoint | Transport | Direction | Agent | Since |
|---|
The first three fixture rows — all Tor — cropped to a short scroll; peer-01 has held since 11:40 UTC.
<PeersTable peers={peers} height={420} />--ch-surface--ch-border--ch-accent--ch-fg-mutedWhat the connection screen adds: the Connect control across its four states, and the mono transcript of the dial.
Connection log
<ConnectButton state="loading" />
<ConnectionLog
entries={[{ at: "14:05:22", line: "dial …onion:8333" }]}
/>--ch-primary--ch-success--ch-accent--ch-font-family-monoThe assembled status screen — shell, rail, stats, sync — on the flat dark stage, scaled to fit.
Chain sync
Sync history · 30-min intervals