Terminal

Terminal

One screen, one selection, and every panel following it.

The terminal is a single fixed screen that never scrolls as a page. Panels scroll inside themselves. It is dense on purpose, because the point of it is that everything you need to judge one thing is visible at the same time.

Open it at /terminal.

The idea

One selection drives everything.

The board in the centre ranks wallets or NFT collections. Click a row and every panel to the right of that column retargets to whatever you picked. That single wire is the reason this screen replaced ten separate pages, and it is why the density is worth paying for.

Read left to right and the screen has three jobs.

ColumnAnswers
Left railIs the chain alive, and is our reading of it healthy
Centre boardWho is winning right now
Right columnsEverything about whatever you just clicked

The left rail is the pulse

Sequence number, confirmation lag, tokens tracked, feed state. All of it is real, none of it is a fixture, and it moves once a second whether or not the market is doing anything.

That matters more than it sounds. A dense panel of frozen numbers looks broken. The same panel next to a live rail looks alive even during a quiet minute, and you can tell the difference between a quiet market and a dead connection without having to guess.

When the engine is unreachable the screen does not hide it. Every panel renders its honest empty state and the header names the condition, reconnecting while there is hope and SERVER DOWN when there is nothing left to show.

The stream

The screen updates over one SSE subscription per tab. Nothing polls.

The first paint is server rendered from a real snapshot, so the market is already in the HTML before any JavaScript runs. There is no spinner and no layout shift. Then the browser takes over the same shape and keeps it current.

stream.ts
const stream = new EventSource("/api/ingest/stream");

stream.onmessage = (event) => {
  const snapshot = JSON.parse(event.data);
  render(snapshot.tokens, snapshot.collections, snapshot.wallets);
};

That path is the app's proxy, not the engine

/api/ingest/stream is this application's own route. It exists because EventSource cannot attach an Authorization header, so the engine's token has to stay on a server rather than travel to a browser. If you are building against the engine directly, the endpoint is /stream and it is covered in The Engine.

Budget from trade to screen is roughly half a second to a second. Against a screener that only moves when you reload, that gap is the entire product.

Reading the screen honestly

Three habits that will save you from misreading it.

Check for the chain top marker before you believe a token panel belongs to the wallet you clicked. When a wallet has nothing drawable, the screen falls back to the chain's busiest token and labels it. The label is small and it is load bearing.

A panel names its own window. The activity feed says how far back it reaches, the bottom bar carries DATA SINCE and UPDATED, and the wallet board dates itself. Numbers on this screen describe a window, not all of history, and each one tells you which window it means.

Empty is a state, not a failure. Panels here draw a dash rather than a zero when they do not know something. Zero is a claim that the answer is none.

The pages under this one