Emails
Transactional emails
How Mandavo sends brand-themed transactional email — one component, a JSON catalog of 42 messages, and a live preview.
One component, every email
Every message Mandavo sends — welcome, email verification, password reset, security alerts, invitations, receipts, digests — is rendered by a single React Email component from the venture's brand tokens. There is no per-email template to fork: the look is inherited from your brand, in light and dark, exactly as the site is.
The copy for each email lives in one JSON catalog, content/<venture>/transactional.json. Each entry is a list of typed blocks — headings, paragraphs, call-to-action buttons, one-time codes, receipts, key/value tables — that the component knows how to render.
The catalog
The catalog ships 42 emails across six categories: onboarding & activation, security & authentication, users/access & invitations, collaboration & activity, billing & payments, and lifecycle & system. Each email carries a stable id, a category, a subject, an optional preheader, and its blocks.
Adding or editing an email is a content change, not a code change. Give it an id, drop it in the catalog, and it renders through the same component as everything else.
{
"id": "welcome",
"cat": "onboarding",
"name": "Welcome",
"trigger": "Account created",
"subject": "Welcome to {{brand_name}}, {{user_first_name}}",
"blocks": [
{ "type": "h", "text": "You're in." },
{ "type": "p", "text": "Your {{brand_name}} workspace is ready — register your first agent and issue a scoped credential in minutes." },
{ "type": "cta", "label": "Open your workspace", "href": "{{workspace_url}}" }
]
}Merge fields
Dynamic values use {{double_braces}} and are substituted when the email is sent, so a subject like "Welcome to {{brand_name}}, {{user_first_name}}" resolves per recipient.
You supply only the fields specific to the trigger. Brand identity and the standard footer links — workspace, notification preferences, unsubscribe, security, and help URLs — are filled in automatically from the venture's brand and site configuration.
Preview the whole catalog
The design-system portal renders every email against the active brand at /system/emails, in light and dark — the fastest way to see how a copy or token change lands before you ship it.
It reads /api/email-preview?id=<id>&theme=light|dark under the hood, which returns the rendered HTML for a single email.
Always in your brand
Because emails render from brand tokens, the preview shows them in the colours, type, and shape of the venture you're building — there is no separate email theme to maintain.