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 .)
--
2.49.1
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
--
2.49.1
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.
--
2.49.1