Docs

Dashboard

Every console page reads your org database or the gateway. Search, inbox, and badges are live.

The dashboard is the Next.js app on port 3010 (bun --filter @opendoor/dashboard dev). Sign-in is a real session cookie. There is no demo tenant with fake charts.

Chrome

ControlWhat it does
⌘KCommand palette: real pages, /api/models/available, /api/keys
InboxUnresolved policy violations, pending model approvals, recent audit rows
Help / Docs/docs on this site
Sidebar badgesCounts from /api/nav/counts (deployments, open violations, pending approvals)
AccountYour user name/email from users, not “Your Account”

Pages and their source

PageSource of truth
Overviewrequests (30 days), key count, first enabled catalog model in the snippet
Models/api/models/available — enabled catalog + running deployments + local Ollama tags
PlaygroundSame catalog; sends to the gateway with a real key
MediaImage / video test page at /dashboard/playground/media
StudioImage UI at /dashboard/studio/api/studio/* → gateway /v1/images/generations
API keys/api/keys create/list/revoke; model checklist is the live catalog
Usage/api/usage aggregates
Pricing (in-app)pricing_rules + GPU SKUs
Public /pricingSame tables, no login
Deployments/api/deployments — local GPU or GCP
BillingStripe customer, credits ledger, checkout
AI assistants/api/ai-assistants + catalog modelId (required)
TeamMembers + invitations
SettingsOrg SSO / domain / notification flags
Support/dashboard/support → Linear issue + PostHog support_ticket_created
Provider keys/dashboard/settings/byok/api/byok (organization_provider_keys, never the raw secret)
GovernancePolicies, violations, approvals, compliance, sector packs
Audit logsaudit_logs
WorkflowsGraph editor. Run executes tools (web search, code execution jail, images, files, embeddings). human_review pauses a persisted run for Approve / Reject.

Try on a model opens /dashboard/playground?model=<id>. Creating a key can store it for the playground and link there.

Empty is empty

If you have not seeded or ingested models, the catalog APIs return { models: [] }. The playground will not send. Assistants will not save without a modelId. That is intentional — we do not invent GPT-4o rows.

Seed and ingest:

bash
bun --env-file=.env run scripts/seed.ts bun run ingest:open-models

Then refresh Models.