Substack is a good front door and a bad landlord. It got you writing and it got you readers — genuinely worth something. But the deal underneath is the same one every platform offers: they hold your subscriber list, they sit between you and your readers' credit cards (and take around 10% of every paid subscription), and the day their incentives stop matching yours, you discover how little of "your" audience you can actually take with you.
Owning your stack means the opposite: your writing lives at your domain, your subscriber list is a file you hold, and paid subscriptions go through your Stripe account. If you ever want to move — to a different tool, a different host, a different anything — you just do, and your readers never notice. That independence used to require a developer. It no longer does.
Here's the shift: you can install a free AI assistant that runs in your computer's terminal, describe what you want in plain English — "spin up a simple site for my writing at my own domain" — and it does the technical part while you watch and approve. This guide is the map. It hands the deep steps to your assistant and keeps you in plain English the whole way.
- Your domain
- ~$10–12 a year (e.g.
yourname.com). This is the one cost worth paying for real — it's the address everything else points at. - Hosting the site
- $0. A static site on Cloudflare Pages is free at the scale any writer needs.
- The newsletter
- $0 to start (Buttondown's free tier covers your first ~100 subscribers; alternatives noted below). Grows with your list, not with a platform's appetite.
- Paid subscriptions
- Stripe takes ~2.9% + 30¢ a charge — versus Substack's ~10% on top of card fees. On a real list that gap is rent you stop paying.
- The AI assistant
- $0 if you don't already pay for one (we'll use Google's free Gemini CLI). If you pay for ChatGPT or Claude, you'll use what you've got.
- What you need to know
- How to copy, paste, and click a few dashboards. No code.
The portable core — the part that is the independence
Everything else in this guide is swappable. These four things are the spine. Keep them in your name and portable, and no platform — including the tools we recommend below — can ever hold you hostage. We'll set each one up, but read this first so you know what you're protecting:
- Your domain
- Bought at a registrar that's separate from where your site is hosted (we use Porkbun). A domain you control can be re-pointed at any host, any time, in minutes. This is your portable address.
- Your list
- Your subscribers as an exportable CSV you download regularly. A newsletter tool that lets you export the list any time can never trap you; one that doesn't is just Substack with extra steps.
- Your content
- Your posts as plain Markdown files on your own computer, not locked inside a proprietary editor. Markdown opens anywhere, forever.
- Your Stripe
- The payment account in your legal name, connected directly to your tools — so the money relationship with your readers is yours, not sublet from a platform.
First, tell us your setup
(Pick your computer and your AI. The agent steps below rewrite themselves to match. Many steps happen in your browser — buying the domain, the host and Stripe dashboards — so those are the same for everyone.)
Pick your computer and your AI above to see your exact steps.
You picked the free route. We'll use Gemini CLI, Google's free terminal assistant.
You already pay for ChatGPT, so we'll use Codex CLI, the terminal assistant that comes with your plan.
You already pay for Claude, so we'll use Claude Code, the terminal assistant that comes with your plan.
Step 1 — Install your AI helper
This happens in the Terminal, a plain text window where you type instructions to your computer. You'll only paste a line or two.
Open the Terminal: press Cmd + Space, type Terminal, hit Enter.
Open the Terminal: click Start, type Terminal, hit Enter. (A blue window — that's PowerShell, and it's what you want.)
Gemini CLI needs a free helper called Node.js first (just plumbing — install once, forget it). Go to nodejs.org, download the "LTS" version, run the installer (Continue → Continue → Install). Then in Terminal:
npm install -g @google/gemini-cli Start it by typing gemini. The first run opens your browser to sign in with your Google account — free.
Gemini CLI needs a free helper called Node.js first (just plumbing — install once, forget it). Go to nodejs.org, download the "LTS" version, run the installer (Next → Next → Install). Then in your Terminal window:
npm install -g @google/gemini-cli Start it by typing gemini. The first run opens your browser to sign in with your Google account — free.
Claude Code has a one-line installer — no Node.js needed.
curl -fsSL https://claude.ai/install.sh | bash Start it by typing claude, and sign in with your paid Claude account when prompted.
Claude Code has a one-line installer — no Node.js needed.
irm https://claude.ai/install.ps1 | iex Start it by typing claude, and sign in with your paid Claude account when prompted.
Codex CLI has a one-line installer — no Node.js needed.
curl -fsSL https://chatgpt.com/codex/install.sh | sh Start it by typing codex, and choose "Sign in with ChatGPT".
Codex CLI has a one-line installer — no Node.js needed.
irm https://chatgpt.com/codex/install.ps1 | iex Start it by typing codex, and choose "Sign in with ChatGPT".
You now have an assistant running in your terminal. From here, owning your stack is mostly a conversation with it — plus a few dashboards only you can click through.
Step 2 — Buy your domain (the one thing worth paying for)
Your domain is your portable address. Buy it at a registrar kept separate from your host — we use Porkbun — so you can always re-point it elsewhere. About five minutes, in your browser (the AI can't buy it for you; it's your name and card).
- Go to porkbun.com, search for the name you want, and buy it (~$10–12/yr). A
.comis the safe default. - Turn on the free WHOIS privacy it offers, so your home address isn't in a public registry.
- That's all for now. We'll point it at your site in Step 4 — keep the Porkbun tab open.
Step 3 — Spin up your site and go live today
Now the early win. You'll have your assistant create a simple, fast website for your writing and put it online — free — on Cloudflare Pages. Make sure your assistant is running (you typed geminiclaudecodex), then paste:
Create a simple, fast personal website for my writing that I fully own. Use a static site generator (Astro is a good default) so my posts are plain Markdown files I control. Requirements:
1. A clean home page that lists my posts, and individual post pages. Calm, readable typography — this is for writing, not a storefront.
2. Posts live as Markdown files in a folder on my computer, so I can write in any editor and never get locked in.
3. Set it up to deploy free on Cloudflare Pages, and walk me through connecting it step by step.
4. Add one example post so I can see it work end to end.
Explain each part in plain English before you run it, and show me how I add a new post later (just drop in a Markdown file). Your assistant will scaffold the site, create the example post, and walk you through the free Cloudflare Pages connection (you'll click through a signup and authorize it — a few minutes). When it finishes you'll have a live site at a temporary your-site.pages.dev address. Now make it yours:
The site is live on Cloudflare Pages. Now connect my own domain to it. My domain is [yourname.com], registered at Porkbun. Walk me through exactly which DNS records to add at Porkbun (and where to click in Cloudflare Pages to add the custom domain), confirm HTTPS turns on automatically, and tell me how to know it worked. It'll tell you the exact records to paste into Porkbun's DNS panel. DNS can take a few minutes to an hour to take effect. When it does, your writing is live at your own name, on the open web, owned by you. That's the milestone. Everything below is growth, and none of it is urgent.
If you stop reading here, you've already won the important part: a real page, at your domain, that no platform can take from you or take a cut of. Bookmark this guide and come back for the newsletter and paid subscriptions whenever you're ready.
Step 4 — The framework of prompts (Substack parity, one capability at a time)
Substack is really five features in a trench coat: a site, a newsletter, paid subscriptions, an RSS feed, and a migration path in. You've got the site. Here's a labeled prompt for each remaining piece — with the guardrail that keeps it safe and the tripwire to watch for. Do them in any order, on any day.
Newsletter signup (with double opt-in)
Pick a newsletter tool that lets you export your list — that's the whole test. Buttondown is a clean, indie-friendly default (free to ~100 subscribers); Listmonk is free and self-hosted if you want maximum control; Resend if you're comfortable a bit more technical. Then:
Add an email newsletter signup form to my site, using [Buttondown]. Requirements:
1. Turn on double opt-in (subscribers confirm via a click in their inbox) — this protects my sender reputation and keeps the list clean and consenting.
2. Put a tasteful signup form on my home page and at the end of each post.
3. Show me where in [Buttondown] I export my full subscriber list as a CSV, because I want to download it regularly and own it.
Explain the consent flow before you wire it up. Guardrail: double opt-in isn't bureaucracy — it's what keeps you out of spam folders and keeps your list real. Tripwire: if a newsletter tool can't show you a one-click full-list CSV export, stop and pick a different one. Inability to leave is the only feature that matters here.
Sending an issue to your list
I've written a new post (the Markdown file at [path]). Help me send it to my newsletter subscribers through [Buttondown]: turn the post into a clean email, let me preview and send a test to myself first, and only then send to the list. Remind me how to see opens/clicks without tracking individuals more than necessary. Guardrail: always send the test-to-yourself before the real send — it's the cheap insurance against a typo'd link going to everyone. Tripwire: never import-and-blast; see the migration footgun below.
Paid subscriptions (your Stripe, your money)
Set up paid subscriptions on my site using my own Stripe account (in my name — I'll create it at stripe.com). I want readers to be able to pay for a subscription that unlocks paid posts. Walk me through: creating the Stripe product/price, adding a Checkout flow to my site, and gating certain posts behind it. Store my Stripe keys securely (the secret key in a file only my account can read, never committed to my site's code or synced anywhere). Explain the security of where each key lives before you wire it in. Guardrail: the Stripe secret key is the keys-to-the-cash-register — it must never land in your site's public code or a synced note. A good assistant puts it in a locked local/host environment file and tells you where. Tripwire: if your assistant suggests pasting the secret key into a frontend file, say no and ask it to use a server-side/environment approach.
Migrating your Substack — the real footgun
Substack lets you export your posts and your subscriber list (Settings → Export). Bringing them over is mostly smooth, with one genuine danger:
Help me migrate from Substack. I've downloaded my Substack export (posts + subscribers CSV) to [path]. Do this carefully:
1. Convert my exported posts into Markdown files for my new site, preserving titles, dates, and links. Show me a couple before doing all of them.
2. Import my subscriber CSV into [Buttondown] as ALREADY-CONFIRMED subscribers — and CRITICALLY, do NOT trigger a welcome email or any send to the imported list. I do not want to email my whole audience by accident during a migration.
3. After import, show me the subscriber count so I can confirm it matches, and tell me exactly how I'd send my first real issue when I'm ready (as a deliberate, separate action). RSS, extra pages, analytics-without-surveillance
Round out my site: (1) add an RSS feed so readers can follow in any reader and other tools can syndicate me; (2) add an About page and a simple contact link; (3) add privacy-respecting analytics that count visits without tracking individuals or installing surveillance cookies (Cloudflare Web Analytics or Plausible are good options). Keep it lightweight. Guardrail: RSS is what keeps the open web open — it's how readers follow you without an algorithm in the middle. Keep it. Tripwire: skip any analytics that needs a cookie banner; the privacy-respecting ones don't.
If you'd rather not assemble the pieces
The path above is the most independent and the cheapest, and it's the one we'd choose. Two honest off-ramps if it's more than you want:
"Substack-in-a-box" — Ghost. If you'd rather have membership, newsletters, and Stripe built into one tool that feels close to Substack, Ghost is the answer (it's open-source, so you still own everything). The trade: it costs money to host and is a bit more to run. Your assistant can stand up a Ghost instance and connect your domain — same portable-core rules apply: own the domain, export the list, connect your Stripe.
"Just do it for me" — a managed option. If the DIY route isn't worth your time at all, the sensible move is to pay someone to run an owned stack for you — your domain, your list, your Stripe, their hands on the technical upkeep. That's exactly the gap our EndUserGeek managed-publishing service fills: independence without the assembly. Same outcome — you own the four — without touching a terminal.
Keep yourself free (the five-minute habits)
Independence isn't a one-time setup; it's a couple of small habits:
- Export your list on a schedule
- Download the subscriber CSV every month and keep it with your backups (see our backups guide). A list you hold a copy of can never be held hostage.
- Keep posts in Markdown, on your machine
- Your writing should exist as files you own first, published copies second — never only inside a tool.
- Domain and Stripe stay in your name
- Never let a host "manage" your domain or proxy your payments. Those two being yours is what makes everything else swappable.
- Don't hard-couple to one vendor's magic feature
- Use the convenient features, but if a tool's killer feature would trap your content or list, treat it as a nice-to-have, not a foundation.
You can be live at your own domain this afternoon and at full Substack parity within a few unhurried sessions — for the price of a domain, with an AI assistant doing the technical lifting while you stay in plain English and approve each step.
The platforms aren't evil; they're just landlords. Owning your stack — domain, list, content, Stripe — turns your writing from something you rent into something you own. Point your agent at one step, approve it, repeat. That's the whole trick.
Part of a series on getting an AI assistant to do the useful, slightly-technical work you've been avoiding. See also: never lose your stuff again.