| name | update-email-templates |
| description | Update Authgear email templates using the correct source files, translation files, and commit order. Use when editing email wording, email structure, or subject lines. |
Update Email Templates
Follow this workflow whenever updating email templates.
Scope Rules
- Only edit source template files:
resources/authgear/templates/en/messages/*.txt.gotemplate
resources/authgear/templates/en/messages/*.mjml.gotemplate
- Do not edit generated template files directly:
resources/authgear/templates/en/messages/*.txt
resources/authgear/templates/en/messages/*.mjml
- In
*.txt.gotemplate and *.mjml.gotemplate, use translations from:
resources/authgear/templates/en/messages/translation.json
- Always edit English templates only at source stage.
- Do not manually update non-
en locales in source-edit commits.
- Email subject translations are defined in:
resources/authgear/templates/en/translation.json
Workflow
- Edit source templates first:
resources/authgear/templates/en/messages/*.txt.gotemplate
resources/authgear/templates/en/messages/*.mjml.gotemplate
resources/authgear/templates/en/messages/translation.json (body/content translations)
resources/authgear/templates/en/translation.json (subject translations)
- Generate
.mjml from .mjml.gotemplate:
go run ./scripts/generatemjml/main.go -i resources/authgear/templates
- Commit source edits and generated
.mjml in one commit.
- Before regenerating non-English translations, delete the changed keys from all non-
en locale files so the generator knows to recreate them:
- For
en/messages/translation.json changes, delete the top-level key (e.g. UsageAlert, not UsageAlert.Alert.Title) from all non-en messages/translation.json files:
make templates-translation-json-del-key KEY=<TopLevelKey>
- For
en/translation.json subject changes, delete the changed key from all non-en translation.json files:
make translation-json-del-key KEY=<key>
- Run once per changed top-level key.
- In a separate commit, generate non-English translations:
make -C scripts/python generate-translations
- Requires being logged in to Claude:
claude login
- If not logged in, stop and ask the user to run
claude login first.
- Finally, generate HTML emails:
Commit Boundaries (Required)
- Commit 1:
- Source edits (
*.gotemplate, en/messages/translation.json, optional en/translation.json)
- Generated
.mjml
- Commit 2:
- Generated non-English translations (
make -C scripts/python generate-translations)
- Commit 3:
- Generated email HTML artifacts (
make html-email)
Do not combine generated artifacts (.html, .txt, non-en translations) in the same commit as source *.gotemplate edits.