Reference notes. Source retained; historical claims may need rechecking.
Give a site its own mail
Source file. Frank's view:
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. Visual map:
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
- 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.
- Declare the domain in Brevo. The API answers with the DNS records Brevo wants.
- Set those records at the registrar (GoDaddy, tested working 02-08-2026): the Brevo TXTs, and one merged SPF record, never two.
- Authenticate, then create the sender:
invitations@<domain>.
- Wire the backend. One
send_email(), driver picked from env: SMTP if set, else Brevo, else AgentMail.
- Prove it. One real mail, sent from the app's own flow, lands in Frank's inbox with the branded sender, no spam flag.
- 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
It works, since 15-08-2026. Account SCRC (free, 300 a day), key in keys.env. voxpopuli.one is declared in Brevo; the two DKIM CNAMEs and one SPF TXT are written at GoDaddy beside the existing DMARC record, and Brevo verified them. First mail sent from invitations@voxpopuli.one and delivered. The Brevo driver is in mailer.py (SMTP → Brevo → AgentMail).
One step remains: the key on the live Vox Populi server plus a restart, so the product sends through Brevo. That is a production write and needs an interactive session.
On colleagues: the free plan holds one user, the owner. A colleague whose site sends through our software needs no login at all, because the account belongs to the software, not to the person. Extra people who want to open Brevo themselves cost about $9 a month each.
The recipe was first proven on Vox Populi,
voxpopuli.one, 02-08-2026.
Where this comes from
- branded-mail skill, the full recipe, guardrails and status this page teaches
- 6 - Private/SCRC/VoxPopuli/, first application
- reference-api-keys-location.md, where every key lives