From 4f4fb8a886ec04f282b585089773a323d56699de Mon Sep 17 00:00:00 2001 From: Eric Gullickson <16152721+ericgullickson@users.noreply.github.com> Date: Wed, 18 Feb 2026 20:19:19 -0600 Subject: [PATCH 1/3] chore: update email FROM address and fix unsubscribe link (refs #221) Change default FROM to hello@notify.motovaultpro.com across app and CI senders. Replace broken {{unsubscribeUrl}} placeholder with real Settings page URL. Add RFC 8058 List-Unsubscribe headers for email client support. Co-Authored-By: Claude Opus 4.6 --- backend/src/features/notifications/README.md | 2 +- .../notifications/domain/email-layout/base-layout.ts | 2 +- backend/src/features/notifications/domain/email.service.ts | 6 +++++- scripts/ci/notify.sh | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/backend/src/features/notifications/README.md b/backend/src/features/notifications/README.md index a99960c..77014cc 100644 --- a/backend/src/features/notifications/README.md +++ b/backend/src/features/notifications/README.md @@ -97,7 +97,7 @@ Templates use `{{variableName}}` syntax for variable substitution. ### Environment Variables - `RESEND_API_KEY` - Resend API key (required, stored in secrets) -- `FROM_EMAIL` - Sender email address (default: noreply@motovaultpro.com) +- `FROM_EMAIL` - Sender email address (default: hello@notify.motovaultpro.com) ### Email Delivery - Uses Resend API for transactional emails diff --git a/backend/src/features/notifications/domain/email-layout/base-layout.ts b/backend/src/features/notifications/domain/email-layout/base-layout.ts index d09344a..befe414 100644 --- a/backend/src/features/notifications/domain/email-layout/base-layout.ts +++ b/backend/src/features/notifications/domain/email-layout/base-layout.ts @@ -65,7 +65,7 @@ export function renderEmailLayout(content: string): string { Login to MotoVaultPro

- Manage Email Preferences + Manage Email Preferences

© {new Date().getFullYear()} MotoVaultPro. All rights reserved. diff --git a/backend/src/features/notifications/domain/email.service.ts b/backend/src/features/notifications/domain/email.service.ts index 8a3a31e..baa1c15 100644 --- a/backend/src/features/notifications/domain/email.service.ts +++ b/backend/src/features/notifications/domain/email.service.ts @@ -16,7 +16,7 @@ export class EmailService { } this.resend = new Resend(apiKey); - this.fromEmail = process.env['FROM_EMAIL'] || 'info@notify.motovaultpro.com'; + this.fromEmail = process.env['FROM_EMAIL'] || 'hello@notify.motovaultpro.com'; } /** @@ -33,6 +33,10 @@ export class EmailService { to, subject, html, + headers: { + 'List-Unsubscribe': '', + 'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click', + }, }); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; diff --git a/scripts/ci/notify.sh b/scripts/ci/notify.sh index 776200c..db69236 100755 --- a/scripts/ci/notify.sh +++ b/scripts/ci/notify.sh @@ -174,7 +174,7 @@ echo " Subject: $SUBJECT" # Build JSON payload JSON_PAYLOAD=$(cat <", + "from": "MotoVaultPro ", "to": ["$NOTIFY_EMAIL"], "subject": "$SUBJECT", "html": $(echo "$HTML_BODY" | jq -Rs .) From 3b62f5a6215d8e5a84a4666d78cc455c77c0b3e4 Mon Sep 17 00:00:00 2001 From: Eric Gullickson <16152721+ericgullickson@users.noreply.github.com> Date: Wed, 18 Feb 2026 20:32:28 -0600 Subject: [PATCH 2/3] fix: Email Logo URL --- .../features/notifications/domain/email-layout/base-layout.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/features/notifications/domain/email-layout/base-layout.ts b/backend/src/features/notifications/domain/email-layout/base-layout.ts index befe414..5ecdec1 100644 --- a/backend/src/features/notifications/domain/email-layout/base-layout.ts +++ b/backend/src/features/notifications/domain/email-layout/base-layout.ts @@ -7,7 +7,7 @@ import { EMAIL_STYLES } from './email-styles'; // External logo URL - hosted on GitHub for reliability -const LOGO_URL = 'https://raw.githubusercontent.com/ericgullickson/images/c58b0e4773e8395b532f97f6ab529e38ea4dc8be/motovaultpro-auth0-small.png'; +const LOGO_URL = 'https://motovaultpro.com/images/logos/motovaultpro-auth0-small.png'; /** * Renders the complete HTML email layout with branding From 1dac6d342bf56e88d789016c1a591fc49669cfd4 Mon Sep 17 00:00:00 2001 From: Eric Gullickson <16152721+ericgullickson@users.noreply.github.com> Date: Wed, 18 Feb 2026 20:43:00 -0600 Subject: [PATCH 3/3] fix: evaluate copyright year in email footer template (refs #221) Add missing $ prefix to template literal expression so the year renders as "2026" instead of literal "{new Date().getFullYear()}". Co-Authored-By: Claude Opus 4.6 --- .../features/notifications/domain/email-layout/base-layout.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/features/notifications/domain/email-layout/base-layout.ts b/backend/src/features/notifications/domain/email-layout/base-layout.ts index 5ecdec1..d6bc21c 100644 --- a/backend/src/features/notifications/domain/email-layout/base-layout.ts +++ b/backend/src/features/notifications/domain/email-layout/base-layout.ts @@ -68,7 +68,7 @@ export function renderEmailLayout(content: string): string { Manage Email Preferences

- © {new Date().getFullYear()} MotoVaultPro. All rights reserved. + © ${new Date().getFullYear()} MotoVaultPro. All rights reserved.