Prerequisites
- Rust 1.98 — rustup.rs
- Topcoat CLI —
cargo install topcoat-cli --version 0.10.0 --locked - Bun — bun.sh (for Tailwind CSS)
- PostgreSQL and an SMTP catcher such as Mailpit
Quick Start
1
Create your env file
bash
cd app
just bootstrapThis copies .env.example to .env with a fresh SESSION_SECRET. Set DATABASE_URL to your database and SMTP_HOST/SMTP_PORT to Mailpit.
2
Turn sending on locally
Add SENDING_ENABLED=true to .env. Without SES_* keys, every email goes to the SMTP relay, so Mailpit catches campaigns, welcome and confirmation emails.
3
Build CSS and run
bash
bun install
PORT=8080 just serveOpen http://localhost:8080 and sign in with a code from Mailpit. Migrations run at startup.
4
Send your first issue
Create a newsletter, subscribe on its archive page (/archive/<slug>), then write a campaign and press Send now.
Checks
bash
cargo clippy -p oxidt-mail -p mail-core --all-targets -- -D warnings
DATABASE_URL=postgres://... cargo test -p oxidt-mail -p mail-coreThe database tests need a role allowed to CREATE DATABASE: each test gets its own migrated database.