Console
Watch what the Gateway did, and manage what can call it. Nine surfaces, grouped by whether you are looking or acting.
The Console lives at /dashboard. Every surface has its own URL, so a link to the thing you are looking at is a link somebody else can open, and the browser back button works. The sidebar, the header title and the command palette all read one list — src/app/dashboard/nav.ts — so a surface cannot exist in one and be missing from another.
The grouping is the whole idea. Monitor is read-only: what happened, what it cost, what broke. Operate is what this account can reach — a credential, the model catalogue behind it, a callback. Account is you and your organization.
The surfaces
| Surface | Path | The question it answers |
|---|---|---|
| Overview | /dashboard | What has this account done lately, and what is left of the allowance? |
| Usage | /dashboard/usage | What did it cost, is it working, and whose fault is a failure — by model, key or client? |
| Logs | /dashboard/logs | Show me the individual requests, and the whole trace row behind one. |
| Clients | /dashboard/clients | Which client was this spend for, and is any of them near its budget? |
| API Keys | /dashboard/keys | Which credentials exist, what can each one do, and is anything still using it? |
| Models | /dashboard/models | What can this key call, at what price, in which tier? |
| Webhooks | /dashboard/webhooks | Where should a budget alert, a failed call or a day's usage be sent? |
| Settings | /dashboard/settings | Who is on this organization, and which provider keys are its own? |
The pages
Everything that reads the ledger is org-scoped
Overview, Usage, Logs and API Keys all read the whole organization and narrow with a filter. An organization is the unit a bill and an incident belong to.
Command palette
Press ⌘K (or Ctrl+K) anywhere in the Console. It opens a search box over the nine surfaces above.
Matching is a plain substring over the label, the hint and a keyword list, so p95 finds Usage and secret finds API Keys. Arrow keys move, Enter runs, Escape closes.
The Console does not replace the response headers. Everything Usage and Logs know about a request was written from the same code path that set x-lobstack-request-id on the response, so a caller and an operator are looking at the same event from two sides. That mapping is set out on the Usage page.