Infrastructure
Email architecture
Two pieces: Resend handles outbound transactional mail from no-reply@getnimbus.net, Cloudflare Email Routing handles inbound for every named address on the zone and forwards to the founder's Gmail.
Outbound
Resend
RESEND_API_KEY + RESEND_FROM_EMAIL + RESEND_FROM_NAME set in Vercel. SPF + DKIM verified on the zone.
Inbound
Cloudflare Email Routing
Catch-all + per-address rules → forwarded to fooglegiber@gmail.com. Receive-only by design; sending stays in Resend.
Address map
| Address | Direction | Via | Purpose |
|---|---|---|---|
| no-reply@getnimbus.net | Outbound | Resend | Transactional: receipts, password reset, 2FA codes, signup verify |
| support@getnimbus.net | Both | CF→Gmail / Resend | Customer support — replies via /dashboard/support tickets |
| abuse@getnimbus.net | Inbound | CF→Gmail | Abuse + DMCA reports |
| security@getnimbus.net | Inbound | CF→Gmail | Responsible disclosure |
| press@getnimbus.net | Inbound | CF→Gmail | Press inquiries |
| jobs@getnimbus.net | Inbound | CF→Gmail | Open application |
| enterprise@getnimbus.net | Both | CF→Gmail / Resend | Enterprise deal qualification |
| partners@getnimbus.net | Inbound | CF→Gmail | Partner program inquiries |
| hi@getnimbus.net | Inbound | CF→Gmail | Generic inbound |
DNS records on getnimbus.net
# Cloudflare Email Routing — required MX
@ MX 10 route1.mx.cloudflare.net.
@ MX 21 route2.mx.cloudflare.net.
@ MX 35 route3.mx.cloudflare.net.
# SPF — Resend + Cloudflare Email Routing
@ TXT "v=spf1 include:_spf.mx.cloudflare.net include:amazonses.com ~all"
# DKIM — Resend domain key (record name + value provided in Resend dashboard)
resend._domainkey TXT "v=DKIM1; k=rsa; p=<resend_public_key>"
# DMARC — alignment + reporting
_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@getnimbus.net"Adding a new inbound address
- Cloudflare dashboard → getnimbus.net → Email → Email Routing → Routing rules
- Click Create address
- Address:
whatever@getnimbus.net - Action: Send to an address → pick destination
- Save. Propagates in <60 seconds.
Adding a new outbound sender
- Update
RESEND_FROM_EMAILin Vercel env - Or override per-call: pass
fromparam tosendTransactional() - Verify the address in Resend dashboard if it's a new domain
Operational tips
- Don't keep catch-all on forever. Spammers will hit random addresses. Once you've enumerated the addresses you actually use, disable the catch-all and rely on per-address routing.
- DMARC starts at p=quarantine, not reject. Watch two weeks of reports, then tighten to p=reject.
- Outbound from Gmail is not supported. Gmail's send-as feature requires SMTP credentials Cloudflare Email Routing does not expose. Always route outbound through Resend.