Skip to content

Site search

Type to search Pages

Docs

Emails

Transactional emails

View as .md

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.

A catalog entry
{
  "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.