Rutter written sailing directions
Editor's cut · Build recap

How Minn Admin got built

Minn Admin is a from-scratch replacement for the WordPress admin, built as a single-page app. This reads one day of that build, the day its writing editor took shape. Almost every instruction arrived with a screenshot.

minnadmin.com

11
Sessions
200
Headings
106
Landmarks
10.2M
Tokens out
Fable 5
Model
The chart · the passage plotted

The route, plotted

Eight waypoints across four days, from a clean install to a shipped release. Hover any marker to read the direction that set it, and how it steered the build.

48°24′N 004°29′W
Departure / made port Heading (a direction given) Landmark (evidence handed over) A tack (course correction)
Jul 5 · Session 6e4c6b85

A day of relentless iteration

32 headings · 465 agent actions · 24 landmarks

By day three the app already stood up, themed and routing. This day was about the writing experience. The author opened not with a fresh idea but by handing the agent its own notes, a live post to work against, and a short list of exact pain points.

Heading 2 · 01:21

I'd to work on editor improvements. Anything in our notes? If so feel free to work on them. Here are a few pain points… When using the "/" to pick a block, I have to use my mouse to pick one. I'd like to be able to continue typing to select one of them.

That is the method in one message. Point at a real artifact, list what is wrong, and let the agent work the list. From there, nearly every instruction rode in on a screenshot.

Six landmarks, captioned Editor-recovered
1 · 01:21

The Minn Admin editor in dark mode. A custom toolbar sits above the post, and typing "/" opens a block inserter offering custom blocks like Image and Timeline.

2 · 02:45

The same post rendered on the public site in light theme, so the custom stats-dashboard block could be checked for editor-to-frontend parity.

3 · 09:51

A bespoke "conversation" block that renders a Claude Code session as a styled chat transcript. The editor grew several custom block types.

4 · 10:53

Removing an image fired a jarring native browser confirm, "Remove this image from the post?". This prompt is what triggered the call to build a custom media editor.

5 · 11:06

An image block carrying a full illustration, with a side inspector for alt text and caption. Getting image handling to feel native took a run of screenshots.

6 · 11:41

The embed block wired to an X status, its inspector set to a Twitter provider, still refusing to preview until the parser was fixed.

A screenshot turns "this is broken" into a shared, precise fact. A typical one:

Heading 9 · 03:04

Found a bug. When I attempt to put an image here: [Image #4] It shows up above that position for some reason, not where the marker was typed out. [Image #5]

The most consequential instruction of the day was not a fix. It was a decision to stop borrowing from WordPress and build the piece properly:

Heading · 11:14
◂ a tack

Rather then bounce out to WordPress Edit Media, can we build our own version of the media editor?

The author also reversed himself without ceremony. Spell check was turned off, then a few hours later turned back on:

Heading 29 · 12:38
◂ a tack

I think I was wrong about spell check. Can we revert that? It seems like the block editor is cleaver and only sometimes shows the spellcheck marks.

With an agent, a reversal costs a sentence, so trying the wrong thing first is cheap. By evening the editor had crossed a line:

Heading 27 · 12:17

The editor is starting to feel like something I can really use over the default block editor… it already feels lightyears ahead. What do you think? Maybe we could write a longterm plan for the Minn Admin Editor?

The wake · Jul 3 → Jul 6

What came next

Minn Admin came together in four days. The session openers trace the shape: stand it up, give it a real design, sharpen the editor, then ship and extend.

Jul 3

Start from zero. "I have a clean WordPress site here locally." A fresh install, nothing to port.

Jul 4

Give it a real design. "I'd like to create this as a custom theme… Use the claude_design MCP." The look came from a design file, not hand-written CSS.

Jul 4

Review and merge. Accept the pull request from the previous session, then keep building on it.

Jul 5

Sharpen the editor. A full day on the writing experience. Custom blocks, image handling, embeds, and a lot of screenshots.

Jul 5

Add the management surfaces. "Can we add filters to plugins and themes?" The admin beyond the editor.

Jul 5

Make it work on mobile. A responsive pass over the single-page app.

Jul 6

Ship, then chase a prod bug. "I just deployed v0.7.0 and discovered a bug on my production site." Shipped software, real feedback.

Jul 6

Extend it. A research project for a potential plugin adapter. The platform starts reaching past itself.

Reading the direction

What to borrow

Minn Admin is a UI-heavy build, and the direction shows it. If you want to shape a polished interface with an agent, these are the moves that carried this one.

Point at a reference, not a request

The author aimed the agent at a live post URL and a screenshot for nearly every change. "Fix this" had an exact target. One day of the build carried 24 screenshots, and the whole build carried 106.

Build the piece you keep hitting

When WordPress's own media dialog got in the way, the instruction was not to style it. It was to replace it: "can we build our own version of the media editor?" Own the surfaces you touch every day.

Reversals are cheap, so explore

Spell check went off, then back on once it proved wrong. With an agent, changing your mind costs a sentence, so it is fine to try the wrong thing first and learn from the screenshot.

Formalize once it sticks

Only after the editor felt usable did the author add Playwright tests and bake the version bump into the release process. Tooling followed conviction, not the other way around.

Sailing directions

If you built this again

Knowing what a day of screenshots taught this editor, here is how you would start a similar one. Copy a prompt and adapt it.

Opening prompt
I want to build a custom writing editor to replace the WordPress block editor, served as a single-page app. Use this design file as the source of truth: <design-url>. Support markdown shortcuts (** for bold, backticks for inline code), a slash "/" block inserter I can navigate entirely by keyboard, a word count with a read-time estimate, and custom blocks. Build our own media handling rather than leaning on WordPress's dialogs. Set up Playwright tests early.

Front-loads the markdown, keyboard, and custom-media decisions the original build reached one screenshot at a time.

Set the workflow
I will paste a screenshot for nearly every change. Whenever I show you the editor and the rendered frontend together, keep them visually identical. If a change is a small taste call, just make it. You do not need to ask.

Names the screenshot-driven loop and the editor-frontend parity rule up front, instead of discovering them.

Before the first release
Add a step to the release process that bumps the version and updates the changelog automatically, so I never do it by hand. Then cut v0.1.0.

Bakes in the release automation the original build only added after several manual releases.

This recap is the output of an editor pass over the project's agent transcripts. A deterministic extract (command-center flow --editor) pulls the direction, the agent trace, and the embedded screenshots from the most representative session. A single model pass captions each image and writes the narrative.

Every quoted heading is verbatim, typos and all. Landmark captions were recovered from images embedded in the transcript, then summarized. The originals are never reproduced or shared.

← Back to the Harbor