← Back

AI Systems

Customer Health Console

2026-07-07

The agent proposes, the operator approves

A Customer Success team watching a portfolio of accounts doesn't need another dashboard to read. It needs to ask a question and get back the accounts that matter, the reason they're slipping, and a plan it can act on. So I built a console where the operator asks in plain English and an AI agent does the reasoning, but never the deciding.

Drive the live demo →

The data is invented: a portfolio of B2B SaaS accounts with health scores, adoption, engagement and support signals, no real customers. The dashboard is the easy half. The half worth building is the command bar.

The Customer Health Console dashboard: a portfolio of twelve B2B SaaS accounts, each showing a health score, adoption, SLA breach rate and engagement, above a sticky stats bar summarising the portfolio

Ask the portfolio a question

Type "which accounts are at churn risk and why?" and a multi-step agent:

The decision that mattered

The agent's effects on the interface, highlighting cards and drafting the plan, travel as typed tool calls, not text the client has to parse back out of prose. One contract: everything the agent does, from reading data to changing the UI, is a tool. That is what keeps the trace honest and the interface reliable when the model improvises.

And the human stays in the loop. The agent proposes, the operator approves. A wrong action from an LLM loop, taken automatically in front of a customer, is expensive, so the loop drafts and never executes. Approve or edit is a deliberate step, not an afterthought.

Built to fail quietly

The agent is bounded: a step cap, an output cap, an input limit and a timeout, so a runaway loop can't run up a bill or hang the page. Errors stream back as a calm line, never a stack trace. And with no API key configured, the command bar simply hides and the dashboard still works, so the thing degrades to something useful rather than something broken.

Stack

Next.js and React on the front, Tailwind for the design system, the Vercel AI SDK driving a multi-step Claude tool loop on a Node route. Deployed on Vercel. Mock data, no backend.

Building something where this would help? I'm easy to reach.