# Give a site its own mail

**Source file.** Frank's view: [branded-mail.html](branded-mail.html)

The recipe for a site's own branded mail, `invitations@domain`, never `@gmail`, free, no mail server. Written 02-08-2026 during the Vox Populi build. The full recipe lives in the skill: [branded-mail](/Users/unctad/.claude/skills/branded-mail/SKILL.md). Visual map: [index.html](../index.html).

---

## Never run a mail server

A fresh mail server has no reputation. It lands in spam on day one. So a free relay sends the mail AS the domain instead, and DNS records tell the world the domain allowed it. Claude does every step except opening the accounts.

## The pieces

| Piece | Role | Cost |
|---|---|---|
| Brevo (brevo.com) | Sends mail as `name@domain`, 300 a day free | 0 |
| Registrar DNS API | SPF + DKIM records that prove the sender | 0 |
| Backend mailer, one function | The app calls one `send_email()`; the driver is config | 0 |
| Reply-To → Frank's Gmail | Replies work, zero receiving setup | 0 |
| ImprovMX, later, optional | Free forwarding if the domain must also receive | 0 |

## The recipe, seven steps

1. **Frank's one manual step.** He opens the free Brevo account himself and hands over the key. Stored as `BREVO_API_KEY` in `6 - Private/keys/keys.env`, never echoed.
2. **Declare the domain in Brevo.** The API answers with the DNS records Brevo wants.
3. **Set those records at the registrar** (GoDaddy, tested working 02-08-2026): the Brevo TXTs, and one merged SPF record, never two.
4. **Authenticate, then create the sender**: `invitations@<domain>`.
5. **Wire the backend.** One `send_email()`, driver picked from env: SMTP if set, else Brevo, else AgentMail.
6. **Prove it.** One real mail, sent from the app's own flow, lands in Frank's inbox with the branded sender, no spam flag.
7. **Write the account down**: which sites send through it, quota used, where the key lives.

## Guardrails

- One Brevo account for every site. A new site is one more authenticated domain, never a new account.
- 300 mails a day, shared. Say the paid-tier cost before any bigger send.
- Never two SPF records on one domain. Merge the includes into one.
- Read the existing DNS records before writing. Add, never blind-overwrite.

## Status

02-08-2026: recipe proven on Vox Populi, [voxpopuli.one](https://voxpopuli.one), the project folder is [6 - Private/SCRC/VoxPopuli/](/Users/unctad/Claude/6 - Private/SCRC/VoxPopuli/). Brevo account creation was Frank's pending step at write time; this note updates once the first branded mail lands in his inbox.

## Where this comes from

- [branded-mail skill](/Users/unctad/.claude/skills/branded-mail/SKILL.md), the full recipe, guardrails and status this page teaches
- [6 - Private/SCRC/VoxPopuli/](/Users/unctad/Claude/6 - Private/SCRC/VoxPopuli/), first application
- [reference-api-keys-location.md](/Users/unctad/.claude/projects/-Users-unctad-Claude/memory/reference-api-keys-location.md), where every key lives
