From 245b7f633f1ae03ee7b41b82b1898a5dc933c557 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:30:17 +0500 Subject: [PATCH 01/12] docs: separate email template delivery scope --- docs/WORK_LOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/WORK_LOG.md b/docs/WORK_LOG.md index 00ba6d9..2ab0cec 100644 --- a/docs/WORK_LOG.md +++ b/docs/WORK_LOG.md @@ -7,6 +7,16 @@ claims as completed work. ## Current status +- Current chunk: extract the three branded Supabase email templates into a + separate ready-for-review PR from `origin/develop` (`a6e81f1`) on + `codex/branded-auth-email-templates`. Keep Resend delivery preparation in + [draft PR #187](https://github.com/Coding-Moves/one-concept/pull/187). + Template installation is independent of purchasing a domain or an app release. +- Preserve the original focused template commits; add a provider-independent + installation guide, verify the final HTML, and narrow the draft to delivery. + No SMTP settings, live templates, notifications, or production release are + changed by this repository-only chunk. Inbox activation remains a manual step. + - Implemented and validated [#151](https://github.com/Coding-Moves/one-concept/issues/151), shared daily Gemini generation budget, on `codex/151-shared-generation-budget` from refreshed `origin/develop` (`65eb21d`). Published From d88f4321039c91d2ebe05723b5f0725d931ca71d Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 22:07:35 +0500 Subject: [PATCH 02/12] feat: add branded signup confirmation email --- backend/email-templates/confirm-signup.html | 57 +++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 backend/email-templates/confirm-signup.html diff --git a/backend/email-templates/confirm-signup.html b/backend/email-templates/confirm-signup.html new file mode 100644 index 0000000..b744ce3 --- /dev/null +++ b/backend/email-templates/confirm-signup.html @@ -0,0 +1,57 @@ + + + + + + + Confirm your email — One Concept + + + + +
+ One small step before your first concept. Confirm your email to get started. +
+ + + + +
+ + + + + + + + + + + +
+

One Concept.

+

by Coding Moves

+
+

WELCOME ABOARD

+

A little curiosity.
Every day.

+

Confirm your email to finish creating your One Concept account. Your next small discovery is waiting.

+ + + + +
+ Confirm my email +
+

After confirming, open the app on your phone and sign in.

+

Button not opening? Copy this link into your browser:

+

+ {{ .ConfirmationURL }} +

+
+

Didn't create this account? You can ignore this email.

+

One day. One concept. One small step forward.

+
+ +
+ + From f03e3caecdcdbba164d6a636f60eabc9ab107301 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 22:07:53 +0500 Subject: [PATCH 03/12] feat: add branded password recovery email --- backend/email-templates/reset-password.html | 57 +++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 backend/email-templates/reset-password.html diff --git a/backend/email-templates/reset-password.html b/backend/email-templates/reset-password.html new file mode 100644 index 0000000..d0a975e --- /dev/null +++ b/backend/email-templates/reset-password.html @@ -0,0 +1,57 @@ + + + + + + + Reset your password — One Concept + + + + +
+ Choose a new password for your One Concept account. +
+ + + + +
+ + + + + + + + + + + +
+

One Concept.

+

by Coding Moves

+
+

ACCOUNT RECOVERY

+

A fresh password.
A new start.

+

We received a request to reset your One Concept password. Use the button below to choose a new one.

+ + + + +
+ Reset my password +
+

After saving your new password, return to the app and sign in. If this link has expired, request a new one with Forgot password in the app.

+

Button not opening? Copy this link into your browser:

+

+ {{ .ConfirmationURL }} +

+
+

Didn't request a reset? You can ignore this email. Your password will stay the same.

+

One day. One concept. One small step forward.

+
+ +
+ + From db0c71492663cee2b32ecccad968e23471792b85 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 22:08:39 +0500 Subject: [PATCH 04/12] refine: keep authentication email copy focused on account actions --- backend/email-templates/confirm-signup.html | 8 ++++---- backend/email-templates/reset-password.html | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/email-templates/confirm-signup.html b/backend/email-templates/confirm-signup.html index b744ce3..7056453 100644 --- a/backend/email-templates/confirm-signup.html +++ b/backend/email-templates/confirm-signup.html @@ -10,7 +10,7 @@
- One small step before your first concept. Confirm your email to get started. + Confirm your email to finish creating your One Concept account.
@@ -26,8 +26,8 @@

WELCOME ABOARD

-

A little curiosity.
Every day.

-

Confirm your email to finish creating your One Concept account. Your next small discovery is waiting.

+

Confirm your email

+

Use the button below to confirm your email and finish creating your One Concept account.

@@ -45,7 +45,7 @@

Didn't create this account? You can ignore this email.

-

One day. One concept. One small step forward.

+

This is an account email from One Concept by Coding Moves.

diff --git a/backend/email-templates/reset-password.html b/backend/email-templates/reset-password.html index d0a975e..4d4a335 100644 --- a/backend/email-templates/reset-password.html +++ b/backend/email-templates/reset-password.html @@ -26,7 +26,7 @@

ACCOUNT RECOVERY

-

A fresh password.
A new start.

+

Reset your password

We received a request to reset your One Concept password. Use the button below to choose a new one.

@@ -45,7 +45,7 @@

Didn't request a reset? You can ignore this email. Your password will stay the same.

-

One day. One concept. One small step forward.

+

This is an account email from One Concept by Coding Moves.

From 8e811cd66599bb79f3e4206432a76bd7c37b47cd Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 22:16:17 +0500 Subject: [PATCH 05/12] fix: scale authentication email spacing with enlarged text --- backend/email-templates/confirm-signup.html | 24 ++++++++++----------- backend/email-templates/reset-password.html | 24 ++++++++++----------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/backend/email-templates/confirm-signup.html b/backend/email-templates/confirm-signup.html index 7056453..f693277 100644 --- a/backend/email-templates/confirm-signup.html +++ b/backend/email-templates/confirm-signup.html @@ -9,7 +9,7 @@ -
+
Confirm your email to finish creating your One Concept account.
@@ -19,33 +19,33 @@
-

One Concept.

-

by Coding Moves

+

One Concept.

+

by Coding Moves

-

WELCOME ABOARD

-

Confirm your email

-

Use the button below to confirm your email and finish creating your One Concept account.

+

WELCOME ABOARD

+

Confirm your email

+

Use the button below to confirm your email and finish creating your One Concept account.

- Confirm my email + Confirm my email
-

After confirming, open the app on your phone and sign in.

-

Button not opening? Copy this link into your browser:

-

+

After confirming, open the app on your phone and sign in.

+

Button not opening? Copy this link into your browser:

+

{{ .ConfirmationURL }}

-

Didn't create this account? You can ignore this email.

-

This is an account email from One Concept by Coding Moves.

+

Didn't create this account? You can ignore this email.

+

This is an account email from One Concept by Coding Moves.

diff --git a/backend/email-templates/reset-password.html b/backend/email-templates/reset-password.html index 4d4a335..af88376 100644 --- a/backend/email-templates/reset-password.html +++ b/backend/email-templates/reset-password.html @@ -9,7 +9,7 @@ -
+
Choose a new password for your One Concept account.
@@ -19,33 +19,33 @@
-

One Concept.

-

by Coding Moves

+

One Concept.

+

by Coding Moves

-

ACCOUNT RECOVERY

-

Reset your password

-

We received a request to reset your One Concept password. Use the button below to choose a new one.

+

ACCOUNT RECOVERY

+

Reset your password

+

We received a request to reset your One Concept password. Use the button below to choose a new one.

- Reset my password + Reset my password
-

After saving your new password, return to the app and sign in. If this link has expired, request a new one with Forgot password in the app.

-

Button not opening? Copy this link into your browser:

-

+

After saving your new password, return to the app and sign in. If this link has expired, request a new one with Forgot password in the app.

+

Button not opening? Copy this link into your browser:

+

{{ .ConfirmationURL }}

-

Didn't request a reset? You can ignore this email. Your password will stay the same.

-

This is an account email from One Concept by Coding Moves.

+

Didn't request a reset? You can ignore this email. Your password will stay the same.

+

This is an account email from One Concept by Coding Moves.

From 2f645867fe53b3b8cdebaaf236a9b86a088a94bf Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:06:59 +0500 Subject: [PATCH 06/12] design: simplify signup email with One Concept masthead --- backend/email-templates/confirm-signup.html | 76 ++++++++------------- 1 file changed, 30 insertions(+), 46 deletions(-) diff --git a/backend/email-templates/confirm-signup.html b/backend/email-templates/confirm-signup.html index f693277..6ceac40 100644 --- a/backend/email-templates/confirm-signup.html +++ b/backend/email-templates/confirm-signup.html @@ -3,55 +3,39 @@ - Confirm your email — One Concept - + - -
- Confirm your email to finish creating your One Concept account. -
- - - - +
One last step to finish setting up your account.
+
- - - - - - - - - - - -
-

One Concept.

-

by Coding Moves

-
-

WELCOME ABOARD

-

Confirm your email

-

Use the button below to confirm your email and finish creating your One Concept account.

- - - - -
- Confirm my email -
-

After confirming, open the app on your phone and sign in.

-

Button not opening? Copy this link into your browser:

-

- {{ .ConfirmationURL }} -

-
-

Didn't create this account? You can ignore this email.

-

This is an account email from One Concept by Coding Moves.

-
- -
+
+ + + + + +
+

One Concept.

+

by Coding Moves

+
+

Confirm your email.

+

Confirm this address to finish setting up your account.

+ + +
+ Confirm email +
+

Then return to the app and sign in.

+
+

If you didn’t sign up, you can ignore this email.

+

Button not working? Copy this link into your browser:

+

+ {{ .ConfirmationURL }} +

+
+ +
From 941fe9078c179a5d2b21fd0f75fca58348796aea Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:07:34 +0500 Subject: [PATCH 07/12] design: align password recovery email with concise account layout --- backend/email-templates/reset-password.html | 76 ++++++++------------- 1 file changed, 30 insertions(+), 46 deletions(-) diff --git a/backend/email-templates/reset-password.html b/backend/email-templates/reset-password.html index af88376..df0ce86 100644 --- a/backend/email-templates/reset-password.html +++ b/backend/email-templates/reset-password.html @@ -3,55 +3,39 @@ - Reset your password — One Concept - + - -
- Choose a new password for your One Concept account. -
- - - - +
Choose a new password for your One Concept account.
+
- - - - - - - - - - - -
-

One Concept.

-

by Coding Moves

-
-

ACCOUNT RECOVERY

-

Reset your password

-

We received a request to reset your One Concept password. Use the button below to choose a new one.

- - - - -
- Reset my password -
-

After saving your new password, return to the app and sign in. If this link has expired, request a new one with Forgot password in the app.

-

Button not opening? Copy this link into your browser:

-

- {{ .ConfirmationURL }} -

-
-

Didn't request a reset? You can ignore this email. Your password will stay the same.

-

This is an account email from One Concept by Coding Moves.

-
- -
+
+ + + + + +
+

One Concept.

+

by Coding Moves

+
+

Reset your pass­word.

+

A password reset was requested for your account. Choose a new password below.

+ + +
+ Reset password +
+

Once it’s saved, return to the app and sign in.

+
+

If you didn’t request this, ignore this email. Your password won’t change.

+

Button not working? Copy this link into your browser:

+

+ {{ .ConfirmationURL }} +

+
+ +
From b27865e6f4efb4b9e7e377a15b6c5df21fdd85b5 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:09:56 +0500 Subject: [PATCH 08/12] fix: keep recovery heading words together at normal text sizes --- backend/email-templates/reset-password.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/email-templates/reset-password.html b/backend/email-templates/reset-password.html index df0ce86..d607e54 100644 --- a/backend/email-templates/reset-password.html +++ b/backend/email-templates/reset-password.html @@ -17,7 +17,7 @@

by Coding Moves

-

Reset your pass­word.

+

Reset your pass­word.

A password reset was requested for your account. Choose a new password below.

From 41bdd9c75ee2f75b60a4f495fe2e70b3bd9b5610 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:11:15 +0500 Subject: [PATCH 09/12] feat: link email branding to Coding Moves GitHub organization --- backend/email-templates/confirm-signup.html | 2 +- backend/email-templates/reset-password.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/email-templates/confirm-signup.html b/backend/email-templates/confirm-signup.html index 6ceac40..784094f 100644 --- a/backend/email-templates/confirm-signup.html +++ b/backend/email-templates/confirm-signup.html @@ -14,7 +14,7 @@

One Concept.

-

by Coding Moves

+

by Coding Moves

Confirm your email.

diff --git a/backend/email-templates/reset-password.html b/backend/email-templates/reset-password.html index d607e54..3367efd 100644 --- a/backend/email-templates/reset-password.html +++ b/backend/email-templates/reset-password.html @@ -14,7 +14,7 @@

One Concept.

-

by Coding Moves

+

by Coding Moves

Reset your pass­word.

From 50d065d171635e81970f880fff57463862be1b73 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:27:21 +0500 Subject: [PATCH 10/12] feat: add branded password changed notification email --- backend/email-templates/password-changed.html | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 backend/email-templates/password-changed.html diff --git a/backend/email-templates/password-changed.html b/backend/email-templates/password-changed.html new file mode 100644 index 0000000..46897df --- /dev/null +++ b/backend/email-templates/password-changed.html @@ -0,0 +1,34 @@ + + + + + + Your password was changed — One Concept + + + +
A security update for your One Concept account.
+ + +
+ + + + + +
+

One Concept.

+

by Coding Moves

+
+

Pass­word changed.

+

Your One Concept password was changed.

+

If you made this change, no further action is needed.

+
+

Didn’t make this change?

+

Open One Concept and use Forgot password on the sign-in screen to reset your password.

+

Contact support immediately.

+
+ +
+ + From 4ccba837a948c0ab4278f24faa4832c097d3adc6 Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:31:37 +0500 Subject: [PATCH 11/12] docs: add independent Supabase template installation guide --- README.md | 1 + backend/README.md | 6 ++++ docs/CODEBASE_MAP.md | 1 + docs/EMAIL_TEMPLATES.md | 68 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 docs/EMAIL_TEMPLATES.md diff --git a/README.md b/README.md index 4a5a9db..8df529b 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ link's build current automatically. - [Architecture](docs/ARCHITECTURE.md) — how the pieces fit, selection, reminders, security - [Roadmap](docs/ROADMAP.md) — shipped phases and what's next - [Backend](backend/README.md) — API endpoints, auth, running locally +- [Email templates](docs/EMAIL_TEMPLATES.md) — branded Supabase emails and installation - [Deployment](mobile/DEPLOYMENT.md) — EAS builds, OTA updates, release runbook ## Contributing diff --git a/backend/README.md b/backend/README.md index 0bcd6bb..fd723d0 100644 --- a/backend/README.md +++ b/backend/README.md @@ -29,6 +29,7 @@ backend/ │ │ └── users.py profile bootstrap (safety net for the DB trigger) │ └── api/v1/ health, topics, daily ├── migrations/ # plain SQL, applied in filename order +├── email-templates/ # account email HTML installed manually in Supabase Auth ├── tests/ # 25 tests: token verification, selection, HTTP ├── Dockerfile # what Railway builds └── .env.example # copy to .env — never commit the filled copy @@ -106,6 +107,11 @@ confusion attacks, both of which are covered by tests. `user_id` is taken from the verified token's `sub` claim and from nowhere else. No endpoint accepts a user id as a parameter. +Supabase Auth sends signup, recovery, and enabled security notifications using +the project's configured sender. See [Email templates](../docs/EMAIL_TEMPLATES.md) +for the three branded HTML files and manual installation steps. An app deployment +does not publish these templates or change SMTP settings. + ## Content generation Gemini writes lessons. It does **not** choose subjects. diff --git a/docs/CODEBASE_MAP.md b/docs/CODEBASE_MAP.md index 84e0c03..6063f16 100644 --- a/docs/CODEBASE_MAP.md +++ b/docs/CODEBASE_MAP.md @@ -18,6 +18,7 @@ learned history, streaks, likes, saved concepts, and push reminders. | Operations | `.github/workflows/`, `backend/railway.json`, `backend/Dockerfile`, `mobile/eas.json`, `mobile/app.config.js`. | | Documentation | Root `README.md`, `RELEASING.md`, `CONTRIBUTING.md`, `docs/ARCHITECTURE.md`, `docs/ROADMAP.md`, and the backend/mobile guides. | | Agent guidance | Root `AGENTS.md`; `mobile/AGENTS.md` adds Expo documentation requirements and `mobile/CLAUDE.md` references it. | +| Authentication email | `backend/email-templates/` contains branded signup, recovery, and password-changed HTML; `docs/EMAIL_TEMPLATES.md` covers manual Supabase installation and activation checks. Templates use the configured sender and are not installed by app deployment. | ## Mobile navigation and presentation diff --git a/docs/EMAIL_TEMPLATES.md b/docs/EMAIL_TEMPLATES.md new file mode 100644 index 0000000..4e429d9 --- /dev/null +++ b/docs/EMAIL_TEMPLATES.md @@ -0,0 +1,68 @@ +# One Concept email templates + +These three templates customize emails sent by Supabase Auth. They work with +the project's configured sender; installing the HTML does not require Resend, +a purchased domain, or an app update. Provider setup remains separate in +[draft PR #187](https://github.com/Coding-Moves/one-concept/pull/187). + +**Merging or releasing the app does not install these files in Supabase.** +Paste the templates into the dashboard to change future emails. The repository +stores their reviewed source; it does not synchronize production settings. + +## Install + +1. Open the correct Supabase project, then **Authentication → Emails → Templates**. +2. Open each template listed below and set its subject exactly as shown. +3. Replace the body with the entire raw HTML file, starting with ``. + Copy the file's source, not its rendered browser preview, and save. +4. Under **Security → Password changed**, also enable the notification and save. + +| Supabase template | Subject | HTML source | +| --- | --- | --- | +| Confirm sign up | `Confirm your email — One Concept` | [confirm-signup.html](../backend/email-templates/confirm-signup.html) | +| Reset password | `Reset your password — One Concept` | [reset-password.html](../backend/email-templates/reset-password.html) | +| Password changed (Security) | `Your password was changed — One Concept` | [password-changed.html](../backend/email-templates/password-changed.html) | + +Keep every `{{ .ConfirmationURL }}` placeholder in signup and recovery. Supabase +fills in the appropriate verification URL; the button and copyable fallback +must both pass through that verification. Password changed reports a completed +change and intentionally has no token or reset-link placeholder. It directs +unrecognized changes to Forgot password in the app and the existing support email. + +Preserve the project's existing working redirect configuration. Signup uses the +configured Site URL for `/confirmed`; recovery requests `/reset-password` on the +app's API base URL. The corresponding HTTPS destinations must be allowed in +Supabase's URL Configuration. Do not replace verification links with those +landing-page URLs. See [Supabase email templates](https://supabase.com/docs/guides/auth/auth-email-templates). + +## Sending and activation + +Template customization and sending capacity are separate. Supabase's default +sender is for testing: it currently sends only to project-team addresses and +allows two emails per hour. Other recipients require custom SMTP, which can be +the owner's existing Gmail setup once configured and tested. These templates +do not remove sender limits or establish delivery. See +[Supabase SMTP documentation](https://supabase.com/docs/guides/auth/auth-smtp) +(checked 2026-09-12). + +Before announcing the new emails to users, test with accounts and inboxes you +control under the configured sender's limits: + +- Confirm signup, follow the email's button, and successfully sign in to the app. +- Request Forgot password, set a new password through the recovery email, and + sign in with it. Verify the separate Password changed notification arrives. +- Check the design in a real inbox on phone and desktop, the full fallback links, + and the Coding Moves organization and support destinations. Use a second inbox + provider and a non-team recipient when custom SMTP is available. + +Record the results before treating production activation as complete. Local +browser previews verify layout, not Gmail/Outlook rendering or live delivery. +No production settings or messages are changed by the template PR itself. + +## Design + +The dark masthead uses the owner's selected One Concept text branding and links +Coding Moves once to its GitHub organization. The app's current image assets are +Expo starter icons, so the emails do not use them as a logo. Inline styles, +presentation tables, system fonts, and text links need no external assets. +Subjects are separate dashboard fields; the HTML comments do not configure them. From f00793e03c9a3b1bdf50d51851973d1a633f552c Mon Sep 17 00:00:00 2001 From: Muawiya Amir Date: Sat, 12 Sep 2026 23:34:44 +0500 Subject: [PATCH 12/12] docs: record independent email template PR and validation --- docs/WORK_LOG.md | 51 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/docs/WORK_LOG.md b/docs/WORK_LOG.md index 2ab0cec..7eaae3e 100644 --- a/docs/WORK_LOG.md +++ b/docs/WORK_LOG.md @@ -7,15 +7,16 @@ claims as completed work. ## Current status -- Current chunk: extract the three branded Supabase email templates into a - separate ready-for-review PR from `origin/develop` (`a6e81f1`) on - `codex/branded-auth-email-templates`. Keep Resend delivery preparation in - [draft PR #187](https://github.com/Coding-Moves/one-concept/pull/187). - Template installation is independent of purchasing a domain or an app release. -- Preserve the original focused template commits; add a provider-independent - installation guide, verify the final HTML, and narrow the draft to delivery. - No SMTP settings, live templates, notifications, or production release are - changed by this repository-only chunk. Inbox activation remains a manual step. +- Published the three branded Supabase templates in non-draft + [PR #188](https://github.com/Coding-Moves/one-concept/pull/188) into `develop`, + from `a6e81f1` on `codex/branded-auth-email-templates`. GitHub reports the PR + mergeable with no conflicts; no CI checks are configured for this PR. +- Resend delivery preparation remains in [draft PR #187](https://github.com/Coding-Moves/one-concept/pull/187). + Its duplicate template files are removed in a follow-up commit. Original + histories are intact. Template installation is independent of a domain purchase + or app release and still requires pasting HTML into Supabase. +- No SMTP settings, live templates, notifications, or production release were + changed. Real inbox rendering and delivery remain unverified. - Implemented and validated [#151](https://github.com/Coding-Moves/one-concept/issues/151), shared daily Gemini generation budget, on `codex/151-shared-generation-budget` @@ -31,6 +32,38 @@ claims as completed work. - PR #185 (#150) is merged. Preserve the owner's identity and the preference for more focused commits in this and future PRs. +## Separate branded email templates — 2026-09-12 + +- Owner requested the three templates in a separate non-draft PR, allowing + branding to merge while domain/provider setup stays deferred. Rechecked + Supabase documentation: customizing templates does not remove the built-in + sender's team-only/two-emails-per-hour restrictions. Existing configured + Gmail SMTP can be used separately once authenticated and tested. +- Preserved nine original template commits from #187, in order, covering signup, + recovery, copy/spacing improvements, the dark text masthead, the Coding Moves + organization link, and the password-changed notification. Sources are byte for + byte identical to the previously validated versions. The owner selected text + branding; no custom app logo was available. +- Added `docs/EMAIL_TEMPLATES.md` with exact subjects, manual installation, + confirmation placeholders, the security toggle, existing redirect contract, + and activation checks. The guide does not require domain purchase or Resend. +- **Validation:** the unchanged HTML previously passed 60 Chromium scenarios: + 48 for signup/recovery and 12 for password changed, across four widths and + normal/doubled/stripped styles, plus normal/long verification URLs. Those checks + covered links, fallback URLs, styled overflow, spacing, action sizes, and no + external resources; mobile/desktop/enlarged previews were inspected. For this + split, verified byte equality with `b0695ca`, inspected app redirect/support + source, checked local Markdown paths/anchors, and ran `git diff --check`. + Browser scenarios were not repeated for identical HTML. Backend/mobile and + live-email tests were not run for this HTML/documentation-only change. +- Commits: `245b7f6` records scope; `d88f432` through `50d065d` preserve the nine + template changes; `4ccba83` adds installation/navigation docs; this handoff is + `docs: record independent email template PR and validation`. +- **Handoff:** merge #188 independently of #187. Then install/test templates in + Supabase before announcing the changed emails. Merging/releasing the app does + not synchronize templates or enable security notifications. Delivery issues + #152/#171 stay open for the remaining operational work; no release PR opened. + ## Shared generation budget (#151) — 2026-09-12 - Confirmed both gaps before implementation against the same generation source