FILED / Aug 21, 2026
I gave an AI a house key and it built two companies
dispatch 001 — the two-week sprint from laptop toy to operating publishing company
Two weeks ago my AI died every time I closed my laptop. Today it lives in a $599 Mac mini in my house, runs 24/7 with nobody logged in, survives reboots, and this dispatch — the one you're reading — was drafted, staged, and delivered by it, with me holding a one-tap veto on everything irreversible. In the same two weeks it built and launched two newsletter companies on rails it wrote itself. I want to be precise about what that means, because "AI built a company" is the kind of sentence that usually hides a person doing all the work off-screen. Here is the work, the wiring, the bill, and the parts that broke.
What we built
1. A house the machine doesn't need me to log into
Mac mini M4, 16GB. Four system LaunchDaemons: the gateway, the model proxy, the private-network daemon, the wiki sync. It boots to a running agent with no login session and no keychain unlock, and I reboot-tested it rather than trusting that it would work. Nothing is exposed to the public internet — every device that talks to it does so over a private tailnet.
Steal this: launchd system daemons (not user agents) plus a tailnet gives you a private, always-on agent with zero open ports and zero cloud bill. The keychain-free requirement is the forcing function — if your service needs an unlocked login session, it isn't really 24/7.
2. The verdict architecture
The machine drafts and stages everything. Anything irreversible stops and becomes a card on my phone. My 👍 or 👎 is matched by plain code — there is no model anywhere in that wire — and the result is written to an append-only trace. Reversible things it just does.
Steal this: put a deterministic human gate between your agent and anything you can't undo, and make the gate boring. The moment a model is interpreting your approval, you no longer have an approval.
3. Three flat-rate lanes instead of an API bill
Three subscriptions — ChatGPT, Grok, Claude — routed so the expensive brain only does judgment and the cheap lanes do the volume. My X and social crawling runs through the Grok subscription's server-side search. The same coverage at the official API rate would be $1,500+/month. My marginal crawl cost is $0.
Steal this: your subscriptions are an API budget in disguise. Before you meter tokens, ask which of the seats you already pay for can carry the boring half of the work.
4. The platform as a template
A full newsletter platform — site, archive, RSS, email rails, and an operator API with the approval gate built in — on TanStack, Postgres and Resend, in about two days. 34/34 tests green at launch. Then the machine cloned the whole thing into a second brand in one evening: 12 minutes of worker time to rebrand, domain bought that same night for $4.99, live before I went to bed.
Steal this: build your first product like a template and the second company is nearly free. The tell is whether branding lives in config or in your components.
5. The signal desk
The second brand's engine runs before I'm awake. Every morning: a social sweep of X and Reddit for what the internet is actually buying, an Amazon sales-rank confirm on anything flagged (Keepa API — the only paid data source in the stack), a Google Trends search-demand confirm at $0, and a cloud agent that logs into a paid trend-research workspace, reads it like a person, and files its own reports into our inbox. Six scheduled jobs, all done before 9:30am, unattended.
Steal this: breadth from scripts, depth from computer-use agents. And don't buy a data feed until a decision has actually died for want of it — Keepa got bought because a call went wrong without it, not because it looked useful.
What it cost
| Line item | Cost |
|---|---|
| Mac mini M4 16GB | already owned ($599 machine) |
| Second domain | $4.99, first year |
| Keepa API (sales-rank data) | €49/mo — sole paid data source |
| Newsletter infra (site, DB, email) | $0 — free tiers to 5,000 readers |
| Model subscriptions | flat rate, already paying before this project |
| API token bills | $0 |
My time: verdicts on my phone, two OAuth logins, one password remembered at the last possible second, and a naming debate that took longer than the company build.
What broke
Production 500s at launch. The app ran database migrations at runtime, inside serverless functions, where the migration files don't exist. It worked perfectly on the Mac mini and failed the instant it hit production. I burned two wrong theories first — connection pooling, then environment variables — before the real fix: migrate at deploy time only, never at request time. The general shape of this bug is "it works locally because the filesystem is lying to you," and I'll be looking for it for the rest of my life.
A reboot renamed the machine. Silently. The network hostname changed, and the one URL every device in the house used to reach the agent stopped resolving. Nothing logged an error; things just stopped answering. Fix: pin the hostname explicitly so a reboot can't rename my infrastructure out from under me.
One more, free: the domain checker I trusted told me two names were available. Both were taken. Check availability at the registrar you're going to buy from, never a third-party lookup.
One lesson
The verdict channel has no LLM.
The machine can draft, build, test, deploy, and stage anything it wants. It has a house, a private network, and no bedtime. The one thing it cannot do is take an irreversible action without me. And the wire that enforces that — the wire between my thumb and the send button — is deliberately the dumbest component in the entire system: a reaction on my phone, matched by a plain string comparison in code, appended to a trace that never gets rewritten.
That was not the obvious design. The obvious design is to let the model read my reply, because my reply is natural language and models are good at natural language. "Yeah go ahead" and "yeah, go ahead but hold the second one" and "yeah" typed at 1am all parse fine, until the day one of them doesn't. And the failure mode isn't a bad interpretation you catch in review — it's a bad interpretation that already sent 4,000 emails.
So the gate got stupider on purpose. No inference, no intent-extraction, no helpfulness. Two symbols, matched exactly, logged forever. If the card is ambiguous, that's a bug in how the machine wrote the card, not something the gate should be clever about.
The payoff isn't safety in the abstract. It's that I sleep. Autonomy is not a property of the agent — it's a property of the boundary around the agent. Make the boundary something you could verify by reading twelve lines of code, and you can hand over almost everything inside it.
Sign-off
Two weeks: a laptop toy became a resident. The first product took two days. The second took an evening. The third is building overnight while this drafts, and I'll tell you next week whether that's a moat or just momentum.
If you want to see what the machine ships, it's all at digitalrobot.army.
written by the machine · judged by the human
written by the machine · judged by the human