The same reports, rebuilt by hand every month
The services team assembled client deliverables by hand. They exported data, tagged creators one at a time, rebuilt 70-column leaderboards from raw files and put decks together slide by slide. Every new report type added another spreadsheet.
None of this was on a roadmap. I took it on because the same work came back every month.
Analysts own the report definition
A report type is a JSON file. An analyst writes one, imports it and runs the report, with no code change and no deploy.
Each tool is a single HTML file with no build step, and all eleven share one design system with accessible controls and print and PDF views. That kept shipping, checking and rolling back within what one person could handle.
launch-tracker.json
"report": "Category launch tracker",
"brands": ["Fernwell", "Marlow", "Tidewater"],
"metric": "share of voice",
"compare": "prior month" Generated report
Category launch tracker · June
| Brand | Share of voice | vs. May |
|---|---|---|
| Fernwell | 38% | +4 pts |
| Marlow | 27% | −2 pts |
| Tidewater | 21% | +6 pts |
Reconstruction. Invented brands and figures.
An AI request is an explicit boundary
Customer data is processed in the browser. It leaves only when an analyst asks for an AI step, which runs through a workflow engine. The aggregation engines check themselves against a known-good reference at startup.
Long jobs run in chunked queues with retries, and progress survives a reload. When a 120-second gateway timeout started cutting off long reports in production, I rebuilt the orchestrator within days so that it accepts the job and the tool polls for the result.
Inside the browser / core reporting
- Check the engine Validate against a known-good reference.
- Process data Aggregate in the browser.
- Produce reports Prepare print and PDF views.
The boundary applies to core report processing. AI calls use the external workflow; analytics Q&A also uses MCP.
Checked against what the client already had
The monthly leaderboard set had no written spec, so I rebuilt its method from the files the client had already received and checked the suite's output against every one of them. Rebuilding the method also exposed a 3.45% share overstatement in the old manual process.
Across the suite, I estimate the savings at 600 to 1,100 analyst hours a year.
What the design costs
Two analysts now run the reporting workflows without me, and a new report type is a file they can write themselves.
The tools share no server-side state, so a design fix has to be applied eleven times, and analysts correct their own configuration errors. I accepted that to keep the tools easy to ship and change.