Back
LiveIn daily use by the person it was built for

Shortlist

An AI workflow built for one non-technical user to run herself

Most internal AI tooling dies somewhere between the demo and the desk. It needs a key someone has to provision, a server someone has to own, or a login the person it was built for never quite adopts. Shortlist was an experiment in removing all three constraints: a consultant reviews long documents and keeps structured notes on each one, by hand, at volume. This turns that into one workflow she runs herself.

She double-clicks a launcher. The tool reads the source documents, extracts the fields that matter, scores each one against a consistent rubric, asks clarifying questions the documents imply rather than assuming, and writes a formatted sheet into her own Google Drive. Then she keeps working in the tool she already used.

The constraint that shaped the build

The interesting engineering problem here was not the extraction. It was that the person using this is not technical, does not want to manage an API key, and should never receive a usage bill she did not expect.

So every model call shells out to the Claude Code CLI running under her own subscription on her own machine. There is no API key to provision, no per-token billing to monitor, and no server to host or secure. Any stray key in the environment is stripped from the child process, so a leftover credential cannot silently hijack auth or billing. An API path exists as a fallback, but the subscription path is the product.

The same reasoning drove the output. An export nobody opens is not a deliverable, so the result is written directly into her Google Drive as a formatted sheet with a frozen header, sized columns, and a filter row. A spreadsheet download exists as a no-auth fallback, and the button goes quiet once the Google path is configured.

What it does

The handoff

A tool only counts if the person it was built for can operate it without the person who built it. Shortlist ships as a double-click launcher that starts the backend, serves the built frontend as static files from the same process, and self-updates. No Node install, no terminal, no second process to remember. Setup is documented in her language, not mine, including the one-time Google authorization. That handoff, not the model call, was the part that took the most iteration.

Built with

FastAPINext.jsClaude Code CLIGoogle Sheets APIOAuthCross-platformNon-technical handoff