Server4Agent
Back to blog

I asked an AI agent for an internal sales dashboard

A build-in-public demo: an AI agent turns a plain-English request into a hosted internal sales dashboard with charts, filters, and a private URL.

Created Jul 11, 2026 8 min read

Every team I have worked with has wanted the same dashboard: this week's numbers, the trend against last month, and a short list of things that need attention. And every team has either lived in a spreadsheet or waited for a BI seat that never got approved. So I gave the request to an assistant connected to a Server4Agent server and watched what came back.

This is the third in a series of build-in-public demos, after the Stripe webhook debugger and the customer feedback board. Same rules as before: a plain-English prompt, no stack decisions from me, and an honest account of what worked and what did not.

What I asked for

> Build me an internal sales dashboard. It should read our orders data, show revenue by week, top products, and average order value, and let me filter by month. Keep it private, this is internal.

I attached a CSV export of orders, the kind of file every ops inbox already has. No schema, no chart library preferences, no mockup.

What the agent built

The first version came back in one session, at a private URL only I could open:

  • A revenue-by-week bar chart with the current week highlighted.
  • A top-products table with unit and revenue columns, sortable.
  • Three stat tiles at the top: revenue this month, orders this month, average order value.
  • A month filter that redrew everything without a page reload.
  • An upload control to replace the data with a fresh export.

The last item was the one I did not ask for but should have. The agent decided on its own that a dashboard fed by a one-time CSV would go stale, so it added a way to refresh the data. That single decision moved the result from a chart of old numbers to a tool with a future.

The build, step by step

  • The agent created a private project on my server, so the dashboard had a stable URL before a line of code existed.
  • It inspected the CSV, worked out the columns, and built a small data layer around them.
  • It scaffolded the dashboard app, wrote the aggregation logic, and wired the charts and filters.
  • It ran the app inside its workspace, loaded the real file, and checked the totals against a manual sum before telling me it was done.
  • It handed back the private URL with a note about which assumptions it had made, including how it treated refunds.

Step four matters more than it sounds. The agent validated its own aggregation against the raw data in its persistent workspace, which is exactly the kind of check that separates a working tool from a plausible-looking one.

The review loop

The private URL made review honest. I found that refunds were counted as negative orders in one chart but excluded from another, and the month filter defaulted to the calendar month instead of our fiscal one. I described both in a follow-up prompt. The agent fixed the refund handling, made the fiscal month the default, and the URL never changed. That loop, iterate in private until it is right, is the whole point of private-by-default projects.

We kept the dashboard private in the end. Unlike a status page, an internal revenue view should never be public, and nothing about shipping it required flipping it. Sharing happened by keeping it where it was and letting the team log in.

What I would change

  • The charts were functional but dense. A second pass on spacing and labels took one more prompt.
  • I would want the dashboard to pull from our billing system directly instead of CSV uploads. That is the natural next iteration: the same project can grow a small ingest endpoint, the way the webhook to Slack lead alert template catches events instead of waiting for exports.
  • Access was all-or-nothing. For a bigger team I would ask for a read-only view for most people and an admin view for ops.

Why this matters

Dashboards are the canonical example of work that is too small for the roadmap and too useful to skip. They also compound: once the orders dashboard exists, the weekly metrics digest can read the same data, and the next request builds on a workspace that already understands your numbers.

If you have a CSV and a question, that is enough to start: connect your assistant and ask for the view you have been living without.

FAQ

How long did it take?

One session for the first version, one follow-up round for the refund and fiscal-month fixes. The URL never changed across iterations.

Did the agent see our real data?

It worked on the export I attached, inside the project's own workspace. The project stayed private throughout, and the workspace is isolated to my server.

Could this connect to live data instead of CSVs?

Yes. The same project can grow an ingest endpoint or a scheduled fetch. Starting from a CSV was a choice to keep the demo honest, not a limitation.

What happens when an engineer wants to take it over?

The project is a real workspace with files and git history. An engineer opens it in the browser IDE, reads the code, and extends it, no rebuild required.

Related reading

External references