The sending side of a newsletter is a small app: a subscriber table, a template, an unsubscribe link, a queue and an SMTP call. The weekend goes on what gets the mail delivered: SPF, DKIM and DMARC records, bounce and complaint handling, double opt-in, the legal footer and a slow warm-up of a fresh sending domain. MailerLite also bundles a visual editor, forms, landing pages, automations and a shop for digital products, which a personal build mostly leaves out. Listmonk shows how far self-hosting takes you.
Before you buildMailerLite Free keeps 250 subscribers and 2,500 emails a month, which is plenty for a small list. Self-hosting only pays off once the monthly bill is above what the effort is worth to you.
Build me a self-hosted newsletter tool to replace MailerLite. Requirements:
- Node.js 22 + TypeScript: Fastify with server-rendered pages (Eta) and a little vanilla JS.
`npm start` serves the admin at http://127.0.0.1:4950/admin and the public signup,
confirm and unsubscribe pages under /s/.
- Storage: better-sqlite3 in ./data/news.db: subscribers (email, status pending, active,
unsubscribed, bounced or complained, source, consent text, confirmed_at), tags, campaigns, a send
queue and an events table.
- Signup: an embeddable HTML form and a hosted page with double opt-in through an HMAC-signed
confirmation link; a CSV export of every subscriber record on request.
- Campaigns: write in Markdown (`marked`) with {{first_name}} merge fields, rendered into a
responsive template with `mjml`, plus a generated plain-text part. Preview, send a test to
yourself, then send to a tag or everyone. Links go through /c/<token> to count clicks; open
tracking is off by default.
- Sending: `nodemailer` over SMTP_URL from .env (SES, Postmark or Mailgun SMTP). A queue with
SEND_PER_SECOND, retries with backoff, and List-Unsubscribe plus List-Unsubscribe-Post headers.
- Unsubscribe and bounces: a one-click unsubscribe endpoint, and a webhook for Amazon SES
bounce and complaint notices (verify the signature with `sns-validator`) that marks the
address and never mails it again.
- One admin password in .env (signed cookie). No accounts, no telemetry, local-first; the only
outbound calls go to your SMTP provider.
- Out of scope: landing pages, a drag-and-drop editor, automations, paid products, A/B tests.
- README: the DNS records to add (SPF, DKIM, DMARC), a warning to start small and warm up a new
sending domain, and the postal-address footer many countries require.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 MailerLite.
Add a welcome sequence to the newsletter tool in this folder. Requirements: - One sequence of up to five emails, each with a delay in days after confirmation, edited in the admin as Markdown like campaigns. - Schedule the first email at confirmation; a worker checks the queue every minute and respects SEND_PER_SECOND. - Unsubscribed, bounced or complained addresses stop the sequence immediately. - Show how many subscribers are in each step. Update the README.
Add a CSV importer to the newsletter tool in this folder. Requirements: - `npm run import -- subscribers.csv` reads a MailerLite subscribers export (email, name, status, groups) and prints a dry-run summary before writing anything. - Map groups to tags; map unsubscribed, bounced and spam-complaint statuses to the matching local status, and never import them as active. - Skip duplicates so running it twice is safe, and write skipped rows to ./data/import-skipped.csv. - Update the README with the MailerLite export steps.
Add segments and a hosted signup page to the newsletter tool in this folder. Requirements: - Saved segments built from tag, signup date range, source and click on a given campaign, shown with a live subscriber count. - Send a campaign to a segment; the sent record keeps the rule it used. - A signup page at /s/<slug> with a title, text, an optional image upload and one email field, styled with plain CSS; add a honeypot field and rate limit by IP. - Update the README.
Deliverability is the product. MailerLite's shared sending setup, domain authentication and account review keep newsletters reaching inboxes, and its editor and automations let a non-technical owner run a list without servers.
Estimate · A $5 VPS or a tunnel, plus SES at roughly cents per thousand emails. The build is token usage on your agent plan. Time goes into DNS and warm-up, not code.
Checked 2026-10-19 against MailerLite's docs: 1, 2, 3, 4, 5, 6
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 250 subscribers, 2,500 emails a month, 2 seats, 3 active automations, 3 forms, 1 landing page, 1 website, 1 digital product or booking, community support. |
| Comfort | $12 | $10.80 | Up to 500 subscribers at this price; 3 seats, 50 automations, 10 forms, 10 websites and landing pages, 5 digital products or bookings, templates and API access, logo removal, email support. |
| Power | $25 | $22.50 | Unlimited monthly emails (fair use), unlimited seats, automations, forms, sites and products, multiple automation triggers, live chat and email support. |
| Enterprise | custom | — | For 200,000+ subscribers: custom sending volume, dedicated success manager, deliverability support, onboarding and audits. |
Free covers up to 250 subscribers and 2,500 emails a month, with 2 seats, 3 automations, 3 forms, 1 landing page and 1 website.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: MailerLite's shared sending reputation and abuse screening, so you start cold, The drag-and-drop email editor, landing pages and website builder.
About $12 a month on the Comfort (up to 500 subscribers) plan, $144 a year (checked 2026-10-19).
MailerLite's shared sending reputation and abuse screening, so you start cold; The drag-and-drop email editor, landing pages and website builder; Multi-step automations with several triggers and the 100+ ready-made integrations; Digital products, bookings and open and click reports out of the box; Support by email or live chat when mail stops arriving. If any of those matter to you, keep paying.
Yes: listmonk (open source), Keila (open source), Mautic (open source).