Ghost is open source, so what Ghost(Pro) sells is running it: hosting, a CDN, backups, updates and newsletter sending. A personal stand-in is a weekend job: Markdown posts, a subscribe form with double opt-in, newsletters sent through an email API, RSS, and an import of your Ghost export. Paid tiers through Stripe and steady inbox placement are where the gaps open. If you like Ghost itself, the shorter way out is self-hosting it on a small server, keeping in mind that Mailgun is the only bulk sender Ghost supports.
Before you buildGhost(Pro) has no free plan, but Ghost itself is free: self-hosting it on a small VPS with your own Mailgun account keeps the editor, themes and members.
Build me a personal blog with an email newsletter to replace Ghost(Pro). Requirements: - Node.js 22 + TypeScript: a Hono server rendering plain HTML, no client framework. `npm start` runs it on http://localhost:4900. - Posts are Markdown files with front matter (title, slug, date, tags, excerpt, draft) in ./content/posts/, rendered with markdown-it; images live in ./content/images/. Home, post and tag pages, /rss.xml and /sitemap.xml. - Subscribers in better-sqlite3 at ./data/members.db. A subscribe form with double opt-in; every email carries a one-click unsubscribe link and a List-Unsubscribe header. - /admin behind ADMIN_PASSWORD from .env: drafts, preview, publish, and "send this post as a newsletter" with a test send to my own address first. - Sending through Resend's batch API (RESEND_API_KEY in .env), 100 recipients per call. Log every send per subscriber so a crashed run resumes without sending anyone the same post twice. - Import a Ghost export: turn each post's html field into Markdown with turndown, keep slugs and dates, copy images from the media export and fix their URLs. Import the members CSV after showing the column mapping, skipping anyone not subscribed to emails. - No accounts, no telemetry: content stays in plain files I can back up. - Out of scope: paid tiers, comments, a WYSIWYG editor, open and click tracking. - README: setup, SPF, DKIM and DMARC records, warming up a new sending domain, and Caddy in front for HTTPS.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Ghost(Pro).
Add paid memberships to the blog in this folder. Requirements: - One paid tier with monthly and yearly prices set in .env, sold through Stripe Checkout (STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET in .env). - A webhook at /hooks/stripe that verifies the signature and marks members paid or free on checkout, renewal, cancellation and failed payment. - Posts with `access: paid` in front matter show the excerpt and a sign-up box to everyone else; newsletters for paid posts go only to paid members. - Members sign in with an emailed magic link; a page links to Stripe's customer portal to manage billing. - Update the README with the Stripe setup and test-mode steps.
Add delivery tracking to the newsletter in this folder. Requirements: - A webhook at /hooks/resend (verify the signature with the secret in .env) that records delivered, bounced and complained events per subscriber. - Unsubscribe anyone with a hard bounce or a complaint automatically. - Show per-send counts on the admin page: sent, delivered, bounced, complained. - Out of scope: open and click tracking. - Update the README.
Add comments to the blog in this folder. Requirements: - Only subscribers can comment, after signing in with an emailed magic link. - Comments are stored in SQLite, plain text with links, max 2,000 characters, one level of replies. - New commenters go to a moderation queue in /admin; approved ones post directly after that. - Rate-limit to 5 comments per subscriber per hour. - Update the README.
Writers who earn from their audience want paid subscriptions without handing over 10% of revenue, and they don't want to run servers. Ghost(Pro) bundles email delivery, a CDN, analytics and backups that a self-hoster would pay for one by one.
Estimate · A small VPS is about $5 a month. Resend's free tier covers a small list; larger lists move to a paid email plan. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $18 | $15 | 1,000 members, 1 staff user, 1 newsletter, official themes only, 5 MB uploads, free custom domain. |
| Publisher | $35 | $29 | 3 staff users, 3 newsletters, 3 paid tiers, custom themes, integrations, Admin API and webhooks, 100 MB uploads. |
| Business | $239 | $199 | 10,000 members, 15 staff users, 10 newsletters, 10 paid tiers, priority support, 250 MB uploads. |
| Custom | custom | — | Unlimited members and staff, dedicated IP, uptime SLA, SSO, invoice billing. |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Paid memberships and tiers tied to Stripe, with no platform cut, Managed newsletter delivery, including bounces and spam complaints.
About $18 a month on the Starter plan, $216 a year (checked 2026-10-13).
Paid memberships and tiers tied to Stripe, with no platform cut; Managed newsletter delivery, including bounces and spam complaints; The Ghost editor, theme marketplace and member sign-in portal; Built-in analytics, comments and recommendations between Ghost sites; Someone else handling updates, backups, the CDN and uptime. If any of those matter to you, keep paying.
Yes: Ghost (self-hosted) (open source), WriteFreely (open source), listmonk (open source).