Mail Merge
A signed-in user onboards their own SMTP server, uploads a CSV, composes a plain-text email with merge-field autocomplete, previews and test-sends the merge, then fires a background batch that sends one personalized email per row — with live per-recipient progress and a saved record of exactly what was sent and to whom.
Why it exists: Self-serve mail merge without vendor lock-in. You bring your own SMTP, your own data, and your own spreadsheet. No shared sending infrastructure, no rich-text vendor dependencies, and a durable plaintext record of every email that went out.
Stack: Next.js 16, React 19, Clerk auth, Drizzle ORM, SQLite with WAL, AES-256-GCM encryption, background workers, and Docker/Coolify for deployment.
Key features:
- Per-user SMTP onboarding with live verification
- CSV upload with automatic column detection
- Merge-field editor with live preview
- Test-send before live batch
- Background worker with idempotent per-recipient sending
- Per-row attachments with safety checks
- Campaign history and delivery records
Repository: github.com/robindarlington/mail-merge