Console
Watch what the Gateway did, and manage what can call it. Eight 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
Usage
Spend from the priced ledger; requests, error rate, p50/p95 and failures from the trace. By model, provider, key or client.
Logs
One row per Gateway request, newest first, with the full trace row behind it.
Clients
Split spend by the client each call was for, cap it with a budget, and export a monthly statement.
API keys
Minting, scopes, who can manage a key, rotation, and how a key is stored.
Models
The rate card for this account: what your key can call, at what price, and what “auto” picks.
Webhooks
Signed POSTs to your endpoint when a client nears its budget, a Gateway call fails, or a day of usage closes — retried on failure. Paid plans.
Settings & billing
Profile, organization members and roles, billing, and your own provider keys.
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 eight 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.
supabase/migrations/20260908_api_keys_and_request_traces.sql. On a deployment where that has not been applied, both say so plainly rather than rendering an empty dashboard that looks like zero traffic.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.