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.
Worth flagging: not every AI coding tool comes with this kind of economics. My recent test of seven AI coding agents found that most are wrappers that mark up the underlying model 3-4x. n8n + raw Claude API gives you the model at cost, which is why a 90% gross margin is even possible here.

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:






