https://github.com/forkwright/epistole
Sovereign newsletter service for fleet web properties — axum + fjall + maud + lettre
https://github.com/forkwright/epistole
Last synced: 3 days ago
JSON representation
Sovereign newsletter service for fleet web properties — axum + fjall + maud + lettre
- Host: GitHub
- URL: https://github.com/forkwright/epistole
- Owner: forkwright
- License: agpl-3.0
- Created: 2026-05-06T20:18:55.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-05-25T08:54:34.000Z (19 days ago)
- Last Synced: 2026-05-25T10:27:25.073Z (19 days ago)
- Language: Rust
- Size: 117 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# epistole
Sovereign newsletter service for fleet web properties. ἐπιστολή - "letter sent."
Replaces Buttondown for any typikon-consuming site that wants a self-hosted newsletter. Configure the target domain in your instance config (see DEPLOY.md).
## What it is
A standalone Rust service:
- **public**: `/subscribe`, `/confirm`, `/unsubscribe`, `/archive`
- **operator**: `/send` (auth-gated; renders Markdown to HTML to SMTP relay to ledger)
- **storage**: fjall LSM-tree (subscriber list, send history, delivery ledger)
- **deliverability**: SMTP relay through Postmark or Mailgun - DKIM/SPF/DMARC live on the relay outbound IP, not on the host
## Stack
| Concern | Crate |
|---|---|
| HTTP framework | `axum` |
| Persistence | `fjall` |
| HTML templates | `maud` |
| SMTP | `lettre` |
| TLS | `rustls` |
| Errors | `snafu` |
| Tracing | `tracing` |
| Secret handling | `secrecy` |
## Status
Phase 1 - subscriber flows, archive, and operator send functional. SMTP delivery to subscribers tracked at [#3](https://github.com/forkwright/epistole/issues/3).
- Full subscriber lifecycle: `/subscribe` -> confirm link -> `/confirm` -> `/unsubscribe`
- Archive: `/archive` lists past sends; `/archive/{id}` renders individual issues
- Operator: `POST /send` (bearer-gated) stores newsletter records; delivery pending SMTP integration
- Systemd unit and full reverse-proxy deploy runbook in [DEPLOY.md](DEPLOY.md)
- Subscriber-import tool and `` contact form cutover are follow-up items
See `CLAUDE.md` for boundaries and conventions.
## License
AGPL-3.0-or-later. See [LICENSE](LICENSE).