← Zach Donnenfield
No. 03 systems product

Seven tools analysts can change without me

Seven internal tools that replaced recurring spreadsheet analysis, built so an analyst can stand up a new report type without code, without a deploy, and without me.

Role
Solo. Architecture, build, design system, rollout.
Period
2025 to 2026
Team
Analysts across customer reporting, research and outbound were the users, and the source of every report type.

7

Standalone tools

0

Build steps to deploy one

Internal tools die of friction, not of missing features.

The path

  1. Analyst opens a tool
  2. data processed in the browser
  3. results leave only on an explicit AI call

The problem

Teams ran their recurring analysis in spreadsheets. Every new kind of report meant another manual pass and another one-off file, so the work could not scale past the people doing it.

What I built

They cover recurring reporting, research, and outbound. The AI calls run through a workflow engine, and one tool answers plain-English questions against analytics over MCP, so an analyst can ask instead of assembling a query.

Long-running jobs are treated as production systems rather than scripts: chunked processing queues, automatic retry, circuit breakers, and pause and resume backed by IndexedDB, so a job that dies partway through does not start over.

Data is processed in the browser and stays there, except on an explicit AI call. The aggregation engines are deterministic and check themselves against a known-good reference at startup, so a number that drifts gets caught by the tool and not by whoever receives the report.

All seven share one design system: WCAG AA contrast, managed focus, reduced-motion support, and print and PDF report views.

What changed

Recurring analysis moved off spreadsheets and onto tools that produce the same answer every time, and the reports they generate go to real enterprise customers.

The part I care about is the part that removed me. Adding a new report type stopped being a request routed through the person who built the thing and became a JSON file an analyst writes and imports. That was the design goal from the start.

The pattern

Two decisions did most of the work here, and neither is an AI decision.

Report types are defined in JSON that analysts import and export, so adding one needs no code and no deploy. And each tool is a single HTML file with no build step and no backend dependency for its core features, which makes deploying one trivial and trying one free. That is most of why they got used at all.

The call

Decided

Report types are JSON that analysts import and export, and each tool is a single HTML file with no build step.

Instead of

One proper application with a backend, accounts, a shared database, and a real deploy pipeline.

What it cost

No shared server-side state, so the tools do not know about each other. Some code is repeated across all seven. An analyst can break their own config and has to fix it themselves.

How it's built

  1. What an analyst opens

    • Seven zero-build HTML tools
    • Shared design system
    • Print & PDF report views
  2. Orchestration & jobs

    • LLM orchestration via workflow engine
    • Plain-English analytics Q&A
    • Chunked queues, retry, pause & resume
    • Job persistence across reloads
  3. Deterministic aggregation

    • Client-side aggregation engines
    • Startup self-check against a known-good reference

Stack