Generic provider templates are hard to maintain
Inline HTML in SendGrid or Postmark is hard to version, preview or hand off to a designer.
Patterns for every product email your SaaS needs — managed outside your codebase, triggered by events, rendered with your brand.
Inline HTML in SendGrid or Postmark is hard to version, preview or hand off to a designer.
Personalisation — plan name, amount, expiry date — requires custom interpolation code per template.
Supporting multiple languages means duplicating templates and keeping them in sync by hand.
Templates spread across services, mailers and background jobs make auditing and updating a chore.
Map each domain event to a template. Add locale variants and plan-specific versions without duplicating logic.
Template variables like {{ user.name }} or {{ data.amount }} are resolved from your event JSON at render time.
Templates live in else.events. Update copy without a deployment, preview with test data before going live.
All templates are MJML-based — rendered to responsive HTML that works in Gmail, Outlook and Apple Mail.
user.password_reset_requested Single-use link, clear expiry, no marketing noise.
invoice.payment_failed Personalised dunning with direct link to update payment method.
trial.ending_soon Days remaining, current plan, upgrade CTA.
team.invited Branded invite with role context and accept CTA.
subscription.updated Confirmation for upgrades, downgrades and cancellations.
Variables are resolved from your event payload at render time. No contact database required.
{{ user.name }} Recipient display name {{ user.email }} Recipient email address {{ app.name }} Your SaaS product name {{ action_url }} CTA deep-link — password reset, billing page, invite acceptance {{ expires_at }} Expiry for links or trial windows, formatted at render time {{ plan.name }} Plan tier — Free, Pro, Enterprise {{ invoice.amount }} Invoice or payment amount with currency Create a template, connect it to an event, see it render in seconds.