You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
✨ Mailer: central brand values via config.mailer.brand #4130
links as a { label: url } object (arrays replace on deep merge)
Export a getBrand() getter as the single source of the resolved values.
render injects brand, plus the legacy appName (= brand.name) and appContact (= brand.contact). Brand wins over caller-passed values for those two keys only.
Acceptance criteria
With no brand config, the output is identical to today's.
Setting mailer.brand.name changes {{appName}} in every mail, including templates that exist only in a downstream.
DEVKIT_NODE_mailer_brand_<field> env vars set brand values.
A partial brand override keeps the other defaults.
All brand values render escaped.
Tests
Fallbacks with an empty brand.
An override from a mocked config shaped like a downstream override.
merged via drain (Automerge: absent, --review: false) — PR #4165. Reviewer: CodeRabbit (1 finding fixed) + Claude fallback on final head (CodeRabbit rate-limited).
Activity
PierreBrisorgueil commentedon Oct 2, 2026
WIP — session 20261002T184249Z-9FAD36D0, branch feat/4130-mailer-brand, started 2026-10-02T18:42:49Z
PierreBrisorgueil commentedon Oct 2, 2026
merged via drain (Automerge: absent, --review: false) — PR #4165. Reviewer: CodeRabbit (1 finding fixed) + Claude fallback on final head (CodeRabbit rate-limited).
feat(mailer): overridable layout and partials (header, footer, button…