Email

Email is the product. Two pipelines coexist, and they do not share the same rules.
Marketing and transactional are separate on purpose. Marketing mail goes out through Amazon SES from HTML templates you author. Transactional mail (login links, password resets) goes out through Resend from React Email components in the codebase.

The two pipelines

Templates you author, sent in bulk
  • A template is an HTML file — the design lives in the template, not in the app
  • Merge tags {{name}} are resolved per recipient at send time
  • Sent through Amazon SES, batched against the sending quota
  • Every send is logged per recipient, with click and open tracking
  • An unsubscribe link is mandatory and verified before sending
Used by: campaigns, sequences

Why HTML templates for marketing

An email client is not a browser. Outlook renders through the Word engine, Gmail strips <style> blocks, and dark mode rewrites your colours. Email HTML means nested tables, inline styles and vendor hacks — and that is exactly what tools like Mailchimp export. Storing the template as HTML means you can paste a template from anywhere and it works, and that two templates can look nothing alike. The application imposes no layout of its own.
The unsubscribe link is verified, not injected. If the rendered HTML does not contain the unsubscribe URL, the send is refused with an explicit error. Nothing is silently appended to your markup — the link has to be in your template.

Authoring a template

The template editor shows the HTML on the left and the live rendering on the right. Saving converts recognised Mailchimp merge tags to the product syntax and reports the ones that are not supported. See Merge Tags Cheat Sheet for the full list of tags, what they resolve to, and what happens to unsupported ones.

Driving it from outside

Everything above is reachable over HTTP with an API key: contacts and tags with the Audience API, templates, rendering and campaigns with the Content & Send API.

Environment

# Marketing — Amazon SES
AWS_REGION="eu-west-3"
AWS_ACCESS_KEY_ID="..."
AWS_SECRET_ACCESS_KEY="..."

# Transactional — Resend
RESEND_API_KEY="..."
EMAIL_FROM="noreply@yourdomain.com"

NEXT_PUBLIC_APP_URL="https://yourdomain.com"