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_requestedSingle-use link, clear expiry, no marketing noise.
invoice.payment_failedPersonalised dunning with direct link to update payment method.
trial.ending_soonDays remaining, current plan, upgrade CTA.
team.invitedBranded invite with role context and accept CTA.
subscription.updatedConfirmation 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 currencyCreate a template, connect it to an event, see it render in seconds.