Stop renting software.

← All tools · newsletter / publishing

Open source alternatives to Substack

Here are 2 self-hostable options – free to run on your own server.

Ghost

★ 55.5kMIT
self-host: easy

TryGhost/Ghost

listmonk

★ 23.8kAGPL-3.0
self-host: easy

knadh/listmonk

Build it yourself with AI

Feasible: blog + email via SES; payments add effort.

Paste this prompt into Cursor, Claude Code, Codex or any coding agent to build a minimal self-hosted Substack clone, deployable with Docker on a VPS.

You are a senior full-stack engineer. Build a minimal, self-hosted clone of Substack (newsletter / publishing) that I can run on my own VPS. Keep it small, production-sane, and easy to maintain.

## Goal
Replace my paid Substack subscription for a single person or small team. MVP only — no billing, no enterprise features.

## Core features (build exactly these)
1. publication with posts (editor, drafts, scheduling)
2. email delivery of each post to subscribers
3. free vs paid posts with Stripe subscriptions
4. public archive + RSS
5. comments

## Stack
- Next.js (App Router, TypeScript) + Tailwind + shadcn/ui
- PostgreSQL with Drizzle ORM (migrations checked in)
- Auth: Better Auth (email + password, optional GitHub OAuth); every query scoped to the signed-in user/workspace
- Background jobs (if needed): pg-boss on the same Postgres
- File storage (if needed): S3-compatible (MinIO container)

## Data model (start here, extend only if required)
User, Publication, Post, Subscriber, Subscription, Comment
Use UUID primary keys, createdAt/updatedAt on every table, and foreign keys with sensible ON DELETE behavior.

## Deliverables
1. Working app with the features above and a clean, minimal UI
2. docker-compose.yml with app, postgres and Caddy (automatic HTTPS) — `docker compose up -d` must be all I run
3. .env.example documenting every variable; no secrets in code
4. Seed script with demo data
5. README: local dev, deploy on a fresh Ubuntu VPS (install Docker, set DNS A record, compose up), backups (pg_dump cron), and updating

## Rules
- Build in small steps; after each feature, run typecheck and the app, and fix errors before moving on
- Validate all input with zod; rate-limit public endpoints
- Write a few Playwright smoke tests for the main flow
- Ask me before adding any dependency beyond the stack above

For reference (study the approach, don't copy code): https://github.com/TryGhost/Ghost, https://github.com/knadh/listmonk

One self-hosted swap per week

A new SaaS teardown and its open-source replacement, every week. No spam.

We only use your email to send the SelfHostThis newsletter (stored with our email provider Resend, EU). Every email has a one-click unsubscribe link, and you can ask us to delete your data anytime. We use double opt-in. Datenschutz · Privacy policy