04-Apr-2026 — Mobile-friendly templates, GDPR link fix, and data-driven override model #213

build 574commit 1368240


Emails now readable on mobile devices

Broken GDPR link fixed

Site-specific image overrides for welcome email

Technical Details

Fully data-driven override discovery

Override definitions are NOT hardcoded in code. Instead, the system scans template HTML for {{override.KEY}} markers at runtime and dynamically generates override slots in the admin UI. This is essential for rollout to 500+ groups — each group's admin UI automatically reflects whatever markers exist in the current template, with no code changes or deployments needed.

Responsive CSS — DRY injection

Base vs override template model

Override discovery pipeline

  1. Admin selects a template in Email Configurations
  2. Frontend calls templateDiff endpoint
  3. Server fetches template HTML from Brevo, scans for {{override.*}} markers via extractOverrideKeys()
  4. Returns discovered keys in TemplateDiffResponse.overrideKeys
  5. Frontend renders an image upload slot per key using overrideKeyToLabel() for display labels
  6. Webmaster uploads images via CMS ImageCropperAndResizerComponent
  7. Values stored in NotificationConfig.templateOverrides (MongoDB)
  8. At send time, applyTemplateOverrides() replaces markers with img tags or default placeholders

Files changed

Follow-up fixes and polish