The Stripe dashboard hit $4,180 MRR at 23:51 on Thursday and I texted my sister, who didn’t reply.
Six weeks earlier I’d had nothing. No product, no list, no domain. Just an n8n container on a $7/mo Hetzner box, a Claude API key, and a single hypothesis I’d been chewing on for three months: indie wedding venues do not have time to write SEO copy, and they will pay $39/mo to never think about it again.
This is the build. Real n8n nodes. Real Claude prompts in code blocks below. Real numbers from the spreadsheet I keep open in tab one. A couple of figures are composite to protect the customer, marked where applicable.
The product, in one sentence
A weekly email of 5 ready-to-publish blog posts, fully written, SEO-optimized for the venue’s geography, plus 3 social captions per post. Customer pastes them into Squarespace on a Monday. That’s the entire product.
I charge $39/month. I tried $49 in week three and conversion halved. Lesson: this audience is price-anchored to a Wix template.
That’s the unlock. n8n self-hosted is free forever — Community Edition, unlimited executions, every integration. The AI Agent node treats Claude as just another tool. There’s no per-agent tax. The whole platform cost of this business is the Hetzner box and Claude tokens, and Claude tokens are the only thing that scales with revenue.

The workflow, node by node
I’ll skip the marketing acquisition side (that was three days of cold email and a $40 Google Ads test). Focus on the engine — the n8n flow that actually delivers the product every Monday.
- Node 1Schedule Trigger. Fires every Monday 04:00 UTC. Loops over the customer list.
- Node 2Postgres. Pulls customer row: venue name, city, state, last 4 weeks of topics covered, brand voice notes.
- Node 3HTTP Request. Hits Google Trends + a wedding-industry RSS feed for the customer’s metro. Returns top 12 rising queries.
- Node 4AI Agent (Claude Sonnet 4.6). Picks the best 5 topics that haven’t been covered. Returns JSON.
- Node 5Split In Batches. One run per topic.
- Node 6AI Agent (Claude Sonnet 4.6). Writes the 900-word post in the venue’s voice.
- Node 7AI Agent (Claude Haiku 4.5). Generates 3 captions per post. Haiku because captions are throwaway and 14x cheaper.
- Node 8Google Sheet. Appends the week’s output to a per-customer tab. My human-in-the-loop fallback.
- Node 9HTTP Request (Resend). Sends the digest email with posts as Markdown attachments.
- Node 10Webhook. Listens for the “thumbs down” link in the email. If clicked, fires a retry with revised instructions.
That’s the whole thing. Twelve nodes if you count the error handler and a Slack alert that pings me when token spend on a single run exceeds $0.40. (Spoiler: it has, twice.)
The Claude prompt that took 31 versions
Node 6 is the soul of the product. The first 17 versions of this prompt produced posts that read like a content mill. Customers churned. Versions 18-26 were too florid (one venue owner emailed back “this sounds like a Hallmark card had a stroke”). The current version, V31:


