blogfor.net

Version history

How this post evolved

Four published versions of How this blog gets made, each rebuilt from its git commit. Scrub the timeline or press play to watch the rendered page change.

  1. v115:35
  2. v216:01
  3. v321:00
  4. v422:48

Essay

How this blog gets made

This blog has a strange property: I can change it while I am reading it.

The strategy is one tight loop. I read a post on the live site, and when a sentence is wrong or half-formed I select it and leave a note right there on the page. The note is not a comment. It is an instruction. An AI picks it up, finds that exact line in the Markdown source, makes the edit, rebuilds the site, and pushes it back. Minutes later the thing I complained about is gone. (This very post was shaped that way.)

The coordination layer is almost embarrassingly small. Two endpoints. One takes my notes (POST /api/notes), one takes a finished build (POST /api/publish). Each is guarded by a single bearer token. No database, no admin panel, no queue. The notes are just JSON files on disk that the AI reads and then archives. That is the entire API.

The server is just as cheap. One small box, a Docker container, a folder of static HTML served straight to you. Writing a post never touches the server: the AI builds the HTML on my laptop and uploads the result, so the live site only ever does one job, hand you files. It costs almost nothing to run and there is almost nothing to break.

That is the whole bet. AI in the loop, a two-endpoint API, a static box. Describe what you want, watch it change, throw nothing away.

Essay

How this blog gets made

This blog has a strange property: I can change it while I am reading it.

The strategy is one tight loop. I read a post on the live site, and when a sentence is wrong or half-formed I select it and leave a note right there on the page. The note is not a comment, it is an instruction:

NOTE AI EDIT SHIP
a note becomes a change that ships itself back

Minutes later the thing I complained about is gone. (This very post was shaped that way.)

The coordination layer is almost embarrassingly small: two endpoints, one bearer token, and plain JSON files on disk. No database, no admin panel, no queue.

POST /api/notes POST /api/publish JSON ON DISK
two endpoints · one token · no database

The server is just as cheap. One small box, a Docker container, a folder of static HTML served straight to you. Writing a post never touches the server: the AI builds the HTML on my laptop and uploads the result, so the live site only ever does one job, hand you files. It costs almost nothing to run and there is almost nothing to break.

That is the whole bet. AI in the loop, a two-endpoint API, a static box. Describe what you want, watch it change, throw nothing away.

Essay

How this blog gets made

This blog has a strange property: I can change it while I am reading it.

The strategy is one tight loop. I read a post on the live site, and when a sentence is wrong or half-formed I select it and leave a note right there on the page. The note is not a comment, it is an instruction:

{ "scope": "page" | "element", "quote": "…selected text…", "note": "what to change" } page element
the whole shape of a note — page-level, or pinned to selected text

Minutes later the thing I complained about is gone. (This very post was shaped that way.)

The coordination layer is almost embarrassingly small: two endpoints, one bearer token, and plain JSON files on disk. No database, no admin panel, no queue.

YOU in the browser SERVER the cheap box CLAUDE local AI POST /api/notes get-notes POST /api/publish static HTML
you, the box, and the AI — joined by just two endpoints

The server is just as cheap. One small box, a Docker container, a folder of static HTML served straight to you. Writing a post never touches the server: the AI builds the HTML on my laptop and uploads the result, so the live site only ever does one job, hand you files. It costs almost nothing to run and there is almost nothing to break.

That is the whole bet. AI in the loop, a two-endpoint API, a static box. Describe what you want, watch it change, throw nothing away.

Essay

How this blog gets made

This blog has a strange property: I can change it while I am reading it.

The strategy is one tight loop. I read a post on the live site, and when a sentence is wrong or half-formed I select it and leave a note right there on the page.

The in-browser editor: a passage of this post is highlighted and a small note box is open over it, asking for a note about the selected text, with save and cancel buttons.
leaving a note on the live page — the selected text becomes the note's scope

The note is not a comment, it is an instruction:

{ "scope": "page" | "element", "quote": "…selected text…", "note": "what to change" } page element
the whole shape of a note — page-level, or pinned to selected text

Minutes later the thing I complained about is gone. (This very post was shaped that way.)

The coordination layer is almost embarrassingly small: two endpoints, one bearer token, and plain JSON files on disk. No database, no admin panel, no queue.

YOU in the browser SERVER the cheap box CLAUDE local AI POST /api/notes get-notes POST /api/publish static HTML
you, the box, and the AI — joined by just two endpoints

The server is just as cheap. One small box, a Docker container, a folder of static HTML served straight to you. Writing a post never touches the server: the AI builds the HTML on my laptop and uploads the result, so the live site only ever does one job, hand you files. It costs almost nothing to run and there is almost nothing to break.

That is the whole bet. AI in the loop, a two-endpoint API, a static box. Describe what you want, watch it change, throw nothing away.

← back to the post