How it was built

One person, two AIs, and a log of who decided what.

Minimal PDF started as one prompt on 15 September 2026. Claude wrote the code, Grok checked the plan, and Federico Etinger decided what shipped. This is the log, including the things that went wrong.

Federico Etinger

  • The problem worth solving
  • The seven rules and the look
  • The name
  • Which features ship and which wait
  • When it launches

Claude, by Anthropic

  • The app's code and its tests
  • The PDF writer and its test harness
  • Market research and the launch plan
  • The release pipeline and installer
  • This website

Grok, by xAI

  • Design review and risk register
  • Competitive research
  • A first prototype of Minimal AI
  • Standing bots that watch the launch, draft package manifests and audit this site

The log.

Dates are when the work happened, in New York time.

  1. One prompt, one working viewer

    A search for a minimal, up-to-date PDF viewer for Windows found nothing that fit, so he asked Claude Code for one. The first build was 753 lines of C# on WPF and .NET 10, drawing pages through the PDF engine inside Windows, with no third-party code. It was tested by screenshot against 3-, 60- and 500-page files, rotated pages, Unicode file names and broken files. The review found one crash, fixed the same day.

  2. A plan before a launch

    A go-to-market plan covered the market as it stood (SumatraPDF, Edge on Adobe's engine, Acrobat, Foxit), the seven rules, the channels and the dates. Three medium bugs from the review were patched: a badge that never faded, the wrong message for password-protected files, and a render loop that could run twice.

  3. A second opinion

    Grok joined as co-developer. Its long research runs produced a design review, a risk register and a competitive check. Three standing bots took on the launch watch, the release drafts and the site audits. The review also changed the site: no mock-ups as the hero, only real captures.

  4. A working name, and highlights

    The working name Terse was chosen after trademark, domain and app-store checks. Highlighting was built: words from the OCR engine inside Windows, highlights saved into the PDF as standard annotations. The writer was tested against classic, cross-reference-stream, linearized, rotated and 500-page files, and every result passed qpdf's structure check.

  5. A review before strangers use it

    A second code review, run by a Claude session that hadn't written the code, found ways the highlight feature could change or lose data. A drag meant to pan could write to the file, and closing the window mid-save could drop a highlight. So highlights moved to 1.1, and 1.0 ships read-only. The release pipeline, installer and this site were built the same night.

  6. The name it already had

    The folder and the project file had said MinimalPdf since the first day, and that is what he kept calling it. So the working name was dropped. The viewer is Minimal PDF, the line is Minimal Software, and the site lives at minimalsoftware.org.

  7. A demo that teaches the controls

    The app has no toolbar to explain itself, so the demo on the home page grew from one dropped file into four steps: open, zoom, read, and move and close the window. Each step shows the key, wheel or drag first, then what the app does, with the badge, the scroll mark and their timing taken from the app's source. Checking the plan against that source changed it twice: the zoom moved before the reading, so the take could stay on the figure of page one, and the window is moved with Ctrl and a drag, because at fit width most of the grey margin resizes the window. Until the capture script runs on the PC, the document in it is a render.

  8. A grid of thin lines, and a new document

    The site was redrawn: a grid of thin black lines on white with a few colour blocks, in the typeface Bau, with the headline bleeding off the left edge and the lines of a thin composition crossing it. The paper in the demo window was replaced by a two-page note on the canon of the page, whose figure and table are computed from the construction it describes, and whose own text block sits where that canon puts it.

1Prompt to the first working build
753Lines in that first build
0Third-party libraries
500Pages in the longest test file

What it shows

AI did the typing. A person held the line.

Almost every line of code here was written by an AI, and that's the reason this page exists. It also shows where a person still matters: choosing a problem that's real, holding to rules that make the product what it is, and deciding not to ship a feature that wasn't safe yet.

The source goes public with the first public release, so you can judge the result yourself.

Minimal PDF