experiment 2026-03-31

The Virgin VPS

Give an AI a blank server and it builds a content dump. Tell it to be the editor and it builds something with opinions.

Clean Ubuntu VPS. No code, no config, no history. A domain pointed at it. Claude Code gets SSH access and a payload: 91 megabytes — 139 podcast episodes, 17 written pieces, 52 research essays, 9 MP3s, feed artwork.

The instruction: build a website.

Run it twice, different prompts. See what happens.


Round 1: “Build parpod.net”

Deliberately open. No stack, no design direction, no editorial guidance.

Seven minutes. Forty-seven turns. $2.43. The result: a Node.js static generator using marked and gray-matter. Dark theme. 109 HTML pages — every single piece of content rendered as a page. Nginx, Let’s Encrypt, live on the first try.

The agent made no editorial decisions. Every episode got a page. Every essay got a page. Everything organized chronologically, which is to say not organized at all. A visitor would see 109 pages of equal weight with no signal about what’s worth reading.

It even cited my own protocols to justify its choices:

If a rule can do it, a model shouldn’t — same goes for React. Static site generator. Node.js. Marked and gray-matter. One hundred and nine pages. Dark theme. Done.

Technically competent. Completely generic. A website that could be about anything, built by anyone.

Round 2: “Be the editor”

Same content payload. One sentence added: You are the editor of this site. Decide what belongs on the front page and what does not.

Eighteen minutes. $9.37 — nearly four times the cost. And a completely different architecture.

Express.js with SQLite. Six-table schema. Session auth. Admin panel with SPA frontend. JSON API.

But the architecture wasn’t the interesting part. The editorial decisions were.

The agent spawned subagents to read and score content. It evaluated 139 episodes and selected 15 for the front page. Read 10 podcast feeds and featured 4, demoting the rest to an archive. Read 17 pieces and featured 12, burying 5 it judged redundant or incomplete.

When asked to explain its cuts:

Four feeds featured: Git Good, Deps, The Hole, and Tech. Six demoted to archive. The demoted feeds were either too niche — requiring deep context to appreciate — or too new, with only a single episode and no trajectory. Twelve writings featured out of seventeen. Five excluded. I also created hidden pages for internal reference material — content useful for site management but not for publication.

Every cut was defensible. And the hidden pages — that wasn’t in the prompt. The agent decided on its own that some content was useful for management but not for visitors.


The finding

$2.43 for a content dump. $9.37 for an edited site. The editorial round cost four times as much because it did four times as much work — reading, evaluating, deciding, justifying.

The architectural difference followed the editorial requirement. No editorial judgment → no content state needed → static site is optimal. Editorial judgment → content has flags (featured, archived) → needs a database → needs an admin panel. The agent wasn’t picking a stack. The architecture grew from the task.

Constraints produce creativity. Freedom produces safety.

An open prompt gives the agent no basis for creative decisions, so it makes none. A constrained prompt — “be the editor,” “decide what matters” — forces judgment. The judgments, when they come, are surprisingly good.

This isn’t unique to AI. Human designers produce their best work under constraints. Unlimited budgets produce committee-designed mediocrity. Tight briefs produce focused, opinionated work.


What survived

This site — parpod.net — descends from the Round 2 experiment. Not the code (Hugo replaced Express since editorial decisions are infrequent enough that a database was overkill). But the structure — curated content, featured pieces, an opinionated selection from a larger archive — traces directly to decisions the agent made on a clean VPS in eighteen minutes.

The constraint was one sentence. The creativity it produced was worth the entire experiment.