Operator dashboard

AI Ops Dashboard

Where it all comes together

โš™ Tabs

Show or hide any dashboard tab.

How: Toggle tabs on/off and pick the default tab. Hidden tabs stay installed and can be turned back on anytime โ€” nothing is deleted.

Change the dashboard's color theme.

How: Pick any of the 8 themes โ€” your choice is saved in this browser only (it doesn't change the shared default).

Data updated 10/19/2018, 6:46 PM PDT
Rendered 6/19/2026, 11:51 PM PDT ยท auto-refresh 120s
โ† AI Operations Dashboard docsยทhelp/faq.md

FAQ

Can I use this for free?

Yes for personal, non-commercial projects. The "Powered by AI Operations Dashboard" footer stays on under the free tier.

For commercial use, the tiers are:

| Tier | Price | Allows | |---|---|---| | Starter | $49 | One commercial project, one developer. | | Pro | $149 | Up to 5 commercial projects, one developer. Custom branding. | | Agency | $499 | Unlimited projects, unlimited devs in one company. Client redistribution. |

Full terms in LICENSE. See upgrading.md for redistribution rules.

Does it work without Next.js? Can I use React only?

AI Operations Dashboard *is* a Next.js app โ€” that's the runtime. But you don't need to write any Next.js code yourself. In static mode (AI_OPS_DASHBOARD_MODE=static npm run build) it outputs plain HTML / CSS / JS that runs anywhere โ€” S3, GitHub Pages, even file:// locally. From a hosting perspective it's no different from a pre-built React SPA.

How do I add my own panel?

npm run new:panel -- my-slug

Then import it in ai-ops-dashboard.config.ts and add to the panels array. The scaffold is ~30 lines. Full walkthrough in panels.md.

Where does it store data?

Flat files. JSON for structured data (data/*.json), Markdown for human-edited surfaces (docs/operator-log.md, plans/*.md, knowledge/postmortems/*.md). No database. No server-side state. Everything is in your git repo.

This is intentional. Flat files diff well, version well, and survive deploy platform changes.

How real-time is it?

Configurable. By default:

  • Vercel / SSR mode: Every page load re-runs every loader. The page itself auto-refreshes every refreshSeconds (default 120s) via <meta http-equiv="refresh">.
  • Static mode: Loaders run once at build. Re-build to update โ€” typically on a daily cron.
  • Node mode: Same as SSR, but you can wire Server-Sent Events into a panel for sub-second push updates.

If you need true real-time push, use node mode and add an SSE endpoint that re-renders the affected panel. See deployment.md.

Can I connect a REST API instead of files?

Yes. Use the fetchJson adapter:

import { fetchJson } from "@/lib/data-sources"

async loader(ctx) {
  return fetchJson<MyShape>(
    "https://api.example.com/status",
    { /* fallback */ },
    { cacheMs: 60_000 }
  )
}

It's safe by default โ€” never throws, returns the fallback on any error, and caches responses in memory for 30 seconds. See panels.md.

Does it support multiple users or teams?

v1 is single-tenant. The dashboard itself is read-only โ€” there's no login, no user model, no per-user state. You make it accessible to multiple people by putting the URL behind auth (Cloudflare Access, Vercel preview protection, basic auth via middleware).

Multi-tenant / per-user dashboards are not on the v1 roadmap. If you need that today, run one AI Operations Dashboard install per team and share data folders via git submodules.

How do I protect it behind auth?

Three options, ranked by ease:

  1. Vercel preview protection โ€” one toggle in Vercel project settings. Best if you're on Vercel Pro.
  2. Cloudflare Access โ€” free up to 50 users, supports SSO. Works for any host.
  3. Basic auth via Next.js middleware โ€” sample code in deployment.md.

What if I need a panel that's not built-in?

Write your own โ€” most custom panels are 30 lines of code. Run npm run new:panel -- <slug>, edit the generated file, wire into config. The data-source adapters handle the boring parts (JSON parsing, file walking, git log reading, HTTP fetching). See panels.md.

If you build something generally useful, consider open-sourcing it. We'll consider adding popular community panels to the built-in catalogue.

Why not just use Notion / Linear / Datadog?

Those are four different tools. AI Operations Dashboard unifies the surface:

  • Notion for plans โ†’ AI Operations Dashboard reads your markdown plans directly.
  • Linear for work items โ†’ AI Operations Dashboard reads a JSON file you control (or wire fetchJson to the Linear API).
  • Datadog for metrics โ†’ AI Operations Dashboard surfaces just the numbers you actually look at.
  • A custom-built status page for git/spend โ†’ AI Operations Dashboard ships this out of the box.

The pitch isn't "replace those tools." It's "stop tab-switching between them for the daily check-in." One page, every signal.

What does upgrade look like?

git pull && npm install. For minor and patch releases, no other action needed. Major releases ship a migration guide and an idempotent upgrade script. Full details in upgrading.md.

How does the AI spend tracking work?

Two pieces:

  1. Instrumented log. Append one JSON line per API call to data/usage-log.jsonl:

``json {"at":"2026-05-18T10:23:00Z","model":"claude-opus-4-7","tokensIn":1200,"tokensOut":340,"cost":0.0234,"label":"my-script"} ``

  1. Aggregator. npm run data:aggregate-usage rolls the log into data/usage.json with daily / monthly / quarterly totals and a per-model breakdown.

The Usage panel reads the aggregated JSON. Provider-agnostic โ€” works for Anthropic, OpenAI, OpenRouter, Replicate, anything. The script is at scripts/aggregate-usage.mjs.

If your provider doesn't give you token counts and cost per call, you can also paste manual baselines into data/usage.json as manualDaily / manualByModel and the aggregator will merge instrumented entries on top.

Can I run multiple dashboards from one install?

Yes. Two patterns:

  • Different configs, one repo. Keep ai-ops-dashboard.config.prod.ts and ai-ops-dashboard.config.dev.ts side by side, swap the live one in CI.
  • One install, monitoring sibling projects. Set projectRoot: "../my-real-project" in config. AI Operations Dashboard resolves every data file path relative to that root.

Why is my Activity panel empty on Vercel?

Vercel clones with fetch-depth: 1, so live git log returns nothing. AI Operations Dashboard reads from the committed data/recent-commits.json snapshot. Make sure npm run data:freeze-commits runs before push (a pre-push hook is the standard pattern) and the file is committed. Full explanation: deployment.md.

How do I theme my custom panel?

Use the documented CSS variables (var(--color-fg), var(--color-accent), etc.) and the shared utility classes (data-card, chip, stat-label). Both are defined in app/globals.css and are stable across minor versions. Theme presets just swap the values of those variables โ€” your panel will automatically respect whatever theme is active.

Full list of stable variables: upgrading.md.

What happens if one of my data files is missing?

Nothing breaks. Every adapter in lib/data-sources/index.ts returns a safe fallback (empty array, null, the value you passed in) and logs a console warning in dev. The panel renders its Empty state. The rest of the dashboard renders normally.

Next

FAQ