Long-form posts
Built on a Primo page type — define a post’s shape once (title, body, date), and the writer publishes from the browser. Rich text where it belongs, structure where it counts.
A newsletter website template built for long-form.
Field Notes is a complete writer & newsletter site — long-form posts, RSS, and email capture — built from Svelte blocks with typed fields. Posts are a Primo page type: define the shape once, and the writer publishes the next one from the browser, never breaking the model.

Built on a Primo page type — define a post’s shape once (title, body, date), and the writer publishes from the browser. Rich text where it belongs, structure where it counts.
A subscribe section ready to point at Beehiiv, Substack, or ConvertKit. Swap the link, keep the design — the ask sits at the end of every read.
Posts as structured content, not hand-rolled HTML — the clean source an RSS feed and an archive page both read from.
Click any text on the rendered page and type. A typo fix, a new headline, an updated bio — edited in place, written straight to the source.
The post model lives in fields.yaml next to the component. You own the schema; the writer owns the words.
A complete, self-contained site — Svelte components in your repo, MIT-licensed. No framework lock-in, no hidden runtime.
Scaffold the starter into your workspace, point your agent at the repo, push. Then hand the writer the browser.
One command scaffolds a Primo workspace — your sites, as plain files.
$ npx primo-cli init my-workspace
Creates the full newsletter site in your repo — blocks, pages, content, config.
$ primo new notes --template writer
Point any CLI agent at the repo. Set the type, the voice, the layout; wire the subscribe link.
$ claude "tune the typography for long reads"
Files sync to the server. The writer publishes the next post in the browser — on the rendered page, in the fields you defined.
$ primo push
MIT · open source · works with any CLI agent. The –template flag for one-command starter forks is rolling out — today, fork by pulling the starter site and pointing your agent at it.
Build it with an agent. Hand it to the writer.
One command to spin up a workspace. Point any agent at the repo, then hand your client the browser.
MIT · open source · free forever