Agent Fleet Dashboard
Open full-size image ↗
Open full-size image ↗
Category: Internal tool / platform
Status: Live, active development
Time window: April 2026 → ongoing
Live URL: Internal (auth-gated to two Stratas operators) – stratas.space
Purpose
The internal operator console for Stratas' AI agent fleet – reconciles what each product costs, ships, and serves in a single dashboard the operators open daily. Now also the shared build backlog between the operators and their Claude Code sessions.
Who it is for
Stratas' operators. Not a multi-tenant SaaS – a two-user cockpit. The Dev tab extends that model: four writers (two humans + each operator's Claude Code sessions) sharing one backlog.
Stack
- Frontend: Vite + React 18 + Tailwind (Geist Mono aesthetic, no component framework)
- Backend: Vercel Node functions (
api/); daily finance-snapshot + Fiken-sync cron - Data: Supabase (deny-all RLS + two-user allowlist), bundled
agents.jsonfallback, Supabase realtime for backlog - LLM / AI: Anthropic SDK + Vercel AI SDK v5 (Claude Sonnet 4.6 for Insights chat)
- MCP: Remote MCP server at
/api/mcpexposing the backlog to Claude chat, Cowork, mobile, and Claude Code in any repo (mcp-handler2.x, 13 tools, per-operator token withcrypto.timingSafeEqual, 60 writes/minute budget) - Infra: Vercel, GitHub Actions weekly seed-sync from Obsidian vault
My contribution
Defined the daily operating needs, shaped the product catalogue and cost views, designed the integrations, and built the console. Added cost attribution through Langfuse, a finance panel that brings in Folio banking and Fiken bookkeeping, and a dev panel connected to Claude Code so work is synced, claimed and started from the dashboard. Deployed the product and refined it through daily use.
Notable capabilities
- Two-project Langfuse routing so client-billed and internal spend never blend into the same total
- Live per-product cost reads in under 500 ms with a 5-minute cache
- Reversible operator edits – sync-owned and operator-owned fields separated in the schema so a re-seed never overwrites edits
- Insights chat rate-capped at 50 calls/day per user, $20/day per workspace – enforced via a Langfuse tag filter
- Dev tab +
fleet_backlog– one shared Postgres table (migrations 0015–0021) that any of four writers (two operators + each operator's Claude Code sessions) can read and write through the dashboard, a CLI, or the MCP connector. Atomic claim RPC prevents two agents from picking up the same item; holder-only guard prevents one operator from closing out another's work. - Push-to-Claude-Code on backlog cards – formats a self-contained prompt with the backlog id and a
mark_donepointer, copies it to clipboard, so a fresh Claude Code session can be dropped into a repo and start work with full context - Live-session indicators – a still Claude logo on items held by a Claude session, bouncing only while the session is reported alive (five-minute liveness window, 30 s polling)
- Epic/story hierarchy enforced in SQL (
fleet_backlog_hierarchy_guard, two levels only), four groupings in the UI (Projects / Priority / Status / Epic), three densities persisted inlocalStorage - 13 products in the catalog with silent-nil on unknown products (misses a new product rather than misattributing it)
Outcome
Daily use by the operators; ~340+ commits over six months; zero misattribution incidents on the client/internal boundary since two-project routing shipped. Dev tab shipped 2026-09-24 (PR #130, 21 files / 2,191 insertions / migration 0015 at 173 lines) and became the operating backlog for the fleet within one session – every subsequent product change now flows through it.
Evidence
- Case studies: Related case study (daily cockpit) + Related case study (Dev tab + shared backlog via MCP)
- Repo: private (available on request)
- Key files:
api/langfuse.js,api/mcp.js,src/hooks/useFleetAgentMutations.js,src/lib/cost.js,src/lib/backlog.js,src/components/views/DevView.jsx,src/components/finance/LiveLangfuseSpend.jsx - Dev-tab PRs: #130 (ship), #133 (reopen), #155 (push-to-Claude), #159 (confetti on MCP close), #171/#173 (live-session indicator)
Skills demonstrated
react-18, vite, vercel-node-functions, supabase-rls, supabase-realtime, langfuse-cost-tracking, anthropic-sdk, vercel-ai-sdk, mcp-server-remote, mcp-handler, fleet-backlog-concurrency, atomic-claim-rpc, github-actions-cron, two-user-allowlist, dashboard-ux, cost-attribution, human-plus-agent-collaboration
Want to discuss the decisions behind it?
Over fifteen years of consulting and growth, and hands-on AI delivery from discovery to daily operations. I can share my CV and talk through how I connect business outcomes with systems that run.
Available for a chat. In person in Stavanger, or remotely worldwide.