Skip to content

feat: add support for public seerr logo in email#3036

Merged
M0NsTeRRR merged 4 commits into
seerr-team:developfrom
felixschndr:feat/pull-seerr-image-from-github
May 18, 2026
Merged

feat: add support for public seerr logo in email#3036
M0NsTeRRR merged 4 commits into
seerr-team:developfrom
felixschndr:feat/pull-seerr-image-from-github

Conversation

@felixschndr
Copy link
Copy Markdown
Contributor

@felixschndr felixschndr commented May 15, 2026

Description

The user now can enable the seerr instance to pull the seerr logo from github instead of the seerr instance itself. This is necessary to view emails in gmail as gmail uses a proxy from google which is not able to pull the image from the seerr instance if the seerr instance is not public accessible.

How Has This Been Tested?

pnpm build and pnpm i18n:extract and pnpm test succeed.

Screenshots / Logs (if applicable)

Checklist:

  • I have read and followed the contribution guidelines.
  • Disclosed any use of AI (see our policy)
  • I have updated the documentation accordingly.
  • All new and existing tests passed.
  • Successful build pnpm build
  • Translation keys pnpm i18n:extract
  • Database migration (if required)

Summary by CodeRabbit

  • New Features
    • Option to use a public Seerr logo in outgoing emails instead of the instance-hosted logo.
    • Email templates updated to only show a logo when available and to link it to the instance URL when applicable.
    • New checkbox in notification settings to enable/disable the public-logo option; included in save and test email actions.

Review Change Stack

@felixschndr felixschndr requested a review from a team as a code owner May 15, 2026 09:40
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4d54e576-b6e9-4fd0-acf3-374e9d589cd6

📥 Commits

Reviewing files that changed from the base of the PR and between 2264b5c and eb5d113.

📒 Files selected for processing (1)
  • server/lib/notifications/agents/email.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/lib/notifications/agents/email.ts

📝 Walkthrough

Walkthrough

The PR adds optional public logo URL support to email notifications. A new usePublicLogo boolean setting controls whether emails use a public Seerr logo from GitHub instead of instance-specific logos. The feature includes settings schema updates, logo URL computation logic, template rendering changes across all email types, and a UI form control with localization.

Changes

Public Logo Email Configuration

Layer / File(s) Summary
Settings schema and defaults
server/lib/settings/index.ts
NotificationAgentEmail.options adds required usePublicLogo: boolean field with default value false.
Logo URL computation
server/lib/notifications/agents/email.ts
New PUBLIC_LOGO_URL constant points to public logo asset; buildMessage computes logoUrl by selecting public URL when usePublicLogo is enabled, otherwise falling back to instance-derived URL when applicationUrl exists.
Email template integration
server/templates/email/test-email/html.pug, server/templates/email/media-request/html.pug, server/templates/email/media-issue/html.pug, server/templates/email/resetpassword/html.pug, server/templates/email/generatedpassword/html.pug, server/lib/notifications/agents/email.ts
Computed logoUrl is passed to all email template locals; templates conditionally render logo only when logoUrl is available, wrapping it in an application link when applicationUrl is also present.
UI settings form and localization
src/components/Settings/Notifications/NotificationsEmail.tsx, src/i18n/locale/en.json
New i18n keys usePublicLogo and usePublicLogoTip describe the feature; form initializes usePublicLogo from settings, displays checkbox control, includes option in both settings save and test email requests.

Sequence Diagram(s)

sequenceDiagram
  participant EmailAgent
  participant LogoComputation
  participant TemplateRenderer
  participant EmailOutput
  EmailAgent->>LogoComputation: usePublicLogo setting
  LogoComputation->>LogoComputation: select PUBLIC_LOGO_URL or fallback
  LogoComputation->>TemplateRenderer: pass computed logoUrl
  TemplateRenderer->>TemplateRenderer: render if logoUrl exists
  TemplateRenderer->>TemplateRenderer: wrap in link if applicationUrl present
  TemplateRenderer->>EmailOutput: final email with logo
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I found a logo, shiny and bright,
Sent on its way through SMTP night.
If your instance hides its art,
The public Seerr logo plays its part.
Hoppy settings fix the view—logo in sight!

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding support for using a public Seerr logo in email templates instead of a locally-hosted one.
Linked Issues check ✅ Passed The PR fully addresses issue #3034 by implementing a configurable option to pull the Seerr logo from a public source (GitHub) instead of the Seerr instance, enabling email clients to display the logo even when the instance is not publicly accessible.
Out of Scope Changes check ✅ Passed All changes are directly related to the PR objective: adding a usePublicLogo setting, updating email templates (media-issue, media-request, test-email, generatedpassword, resetpassword), updating the settings interface, and adding UI controls and i18n strings.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Member

@M0NsTeRRR M0NsTeRRR left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

search for "/logo_full.png" in the codebase you are missing 2 templates (generatedpassword and resetpassword)

Comment thread src/i18n/locale/de.json Outdated
Comment thread server/lib/notifications/agents/email.ts
Comment thread server/templates/email/media-issue/html.pug
@felixschndr felixschndr force-pushed the feat/pull-seerr-image-from-github branch from c0fe5aa to 2264b5c Compare May 15, 2026 13:38
@felixschndr
Copy link
Copy Markdown
Contributor Author

search for "/logo_full.png" in the codebase you are missing 2 templates (generatedpassword and resetpassword)

Fixed in 2264b5c

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
server/templates/email/media-issue/html.pug (1)

22-27: ⚡ Quick win

Add alt text to logo images for accessibility.

The img tags on lines 25 and 27 are missing alt attributes. Adding descriptive alt text improves accessibility for screen readers and provides fallback text when images fail to load.

♿ Proposed fix to add alt attributes
         if logoUrl
           if applicationUrl
             a(href=applicationUrl style='margin: 0 1rem;')
-              img(src=logoUrl style='width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
+              img(src=logoUrl alt=applicationTitle style='width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
           else
-            img(src=logoUrl style='margin: 0 1rem; width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
+            img(src=logoUrl alt=applicationTitle style='margin: 0 1rem; width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@server/templates/email/media-issue/html.pug` around lines 22 - 27, The img
elements rendering the logo (conditional on logoUrl and applicationUrl) lack alt
attributes; update both img tags in the media-issue html.pug template to include
descriptive alt text (e.g., alt="Application logo" or a contextual value) so
screen readers and image fallback are supported, ensuring the alt is present
whether the img is wrapped in an anchor (applicationUrl) or not.
server/templates/email/generatedpassword/html.pug (1)

22-27: ⚡ Quick win

Add alt text to logo images for accessibility.

The img tags on lines 25 and 27 are missing alt attributes. Adding descriptive alt text improves accessibility for screen readers and provides fallback text when images fail to load.

♿ Proposed fix to add alt attributes
         if logoUrl
           if applicationUrl
             a(href=applicationUrl style='margin: 0 1rem;')
-              img(src=logoUrl style='width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
+              img(src=logoUrl alt=applicationTitle style='width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
           else
-            img(src=logoUrl style='margin: 0 1rem; width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
+            img(src=logoUrl alt=applicationTitle style='margin: 0 1rem; width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@server/templates/email/generatedpassword/html.pug` around lines 22 - 27, The
two img elements that render the logo (conditionals using logoUrl and
applicationUrl) lack alt attributes; update both img tags in the
generatedpassword template to include a descriptive alt (e.g., using a variable
like applicationName or a default "Logo") so screen readers and image-fallback
scenarios have meaningful text, ensuring you add the same alt to the img inside
the anchor (when applicationUrl is present) and the standalone img (when
applicationUrl is absent).
server/templates/email/resetpassword/html.pug (1)

22-27: ⚡ Quick win

Add alt text to logo images for accessibility.

The img tags on lines 25 and 27 are missing alt attributes. Adding descriptive alt text improves accessibility for screen readers and provides fallback text when images fail to load.

♿ Proposed fix to add alt attributes
         if logoUrl
           if applicationUrl
             a(href=applicationUrl style='margin: 0 1rem;')
-              img(src=logoUrl style='width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
+              img(src=logoUrl alt=applicationTitle style='width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
           else
-            img(src=logoUrl style='margin: 0 1rem; width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
+            img(src=logoUrl alt=applicationTitle style='margin: 0 1rem; width: 26rem; image-rendering: crisp-edges; image-rendering: -webkit-optimize-contrast;')
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@server/templates/email/resetpassword/html.pug` around lines 22 - 27, The img
elements rendering the logo (conditionals using logoUrl and applicationUrl in
the resetpassword/html.pug template) are missing alt attributes; update both img
tags to include a descriptive alt attribute (e.g., alt=applicationName ?
`${applicationName} logo` : 'Application logo' or a fixed descriptive string) so
screen readers and image-fallbacks are supported; ensure you add the alt to the
img inside the a(...) and the standalone img(...) branches so both code paths
have equivalent accessibility text.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@server/templates/email/generatedpassword/html.pug`:
- Around line 22-27: The two img elements that render the logo (conditionals
using logoUrl and applicationUrl) lack alt attributes; update both img tags in
the generatedpassword template to include a descriptive alt (e.g., using a
variable like applicationName or a default "Logo") so screen readers and
image-fallback scenarios have meaningful text, ensuring you add the same alt to
the img inside the anchor (when applicationUrl is present) and the standalone
img (when applicationUrl is absent).

In `@server/templates/email/media-issue/html.pug`:
- Around line 22-27: The img elements rendering the logo (conditional on logoUrl
and applicationUrl) lack alt attributes; update both img tags in the media-issue
html.pug template to include descriptive alt text (e.g., alt="Application logo"
or a contextual value) so screen readers and image fallback are supported,
ensuring the alt is present whether the img is wrapped in an anchor
(applicationUrl) or not.

In `@server/templates/email/resetpassword/html.pug`:
- Around line 22-27: The img elements rendering the logo (conditionals using
logoUrl and applicationUrl in the resetpassword/html.pug template) are missing
alt attributes; update both img tags to include a descriptive alt attribute
(e.g., alt=applicationName ? `${applicationName} logo` : 'Application logo' or a
fixed descriptive string) so screen readers and image-fallbacks are supported;
ensure you add the alt to the img inside the a(...) and the standalone img(...)
branches so both code paths have equivalent accessibility text.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d08fe3de-8cbc-4615-ade4-59a2a2230e29

📥 Commits

Reviewing files that changed from the base of the PR and between c0fe5aa and 2264b5c.

📒 Files selected for processing (9)
  • server/lib/notifications/agents/email.ts
  • server/lib/settings/index.ts
  • server/templates/email/generatedpassword/html.pug
  • server/templates/email/media-issue/html.pug
  • server/templates/email/media-request/html.pug
  • server/templates/email/resetpassword/html.pug
  • server/templates/email/test-email/html.pug
  • src/components/Settings/Notifications/NotificationsEmail.tsx
  • src/i18n/locale/en.json
✅ Files skipped from review due to trivial changes (1)
  • src/i18n/locale/en.json
🚧 Files skipped from review as they are similar to previous changes (5)
  • server/lib/settings/index.ts
  • server/templates/email/test-email/html.pug
  • src/components/Settings/Notifications/NotificationsEmail.tsx
  • server/lib/notifications/agents/email.ts
  • server/templates/email/media-request/html.pug

Comment thread server/lib/notifications/agents/email.ts Outdated
@felixschndr
Copy link
Copy Markdown
Contributor Author

Should be ready now

@seerr-automation-bot seerr-automation-bot added this to the v3.3.0 milestone May 16, 2026
@felixschndr felixschndr requested a review from M0NsTeRRR May 16, 2026 17:16
@M0NsTeRRR M0NsTeRRR merged commit a8f147d into seerr-team:develop May 18, 2026
15 checks passed
@felixschndr felixschndr deleted the feat/pull-seerr-image-from-github branch May 18, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Seerr logo does not appear in SMTP notifications with Gmail when Seerr is not reachable from Google's servers

4 participants