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-slugThen 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:
- Vercel preview protection โ one toggle in Vercel project settings. Best if you're on Vercel Pro.
- Cloudflare Access โ free up to 50 users, supports SSO. Works for any host.
- 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
fetchJsonto 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:
- 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"} ``
- Aggregator.
npm run data:aggregate-usagerolls the log intodata/usage.jsonwith 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.tsandai-ops-dashboard.config.dev.tsside 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
- getting-started.md โ Start here if you haven't.
- panels.md โ Write your own panel.
- deployment.md โ Ship it.