refactor(assets): name the mascot a mascot, not a logo#2327
Conversation
PEANUTMAN_LOGO was the peanut-character illustration mislabeled as a
"logo" — distinct from the app icon (peanut-icon.svg) and the PEANUT
wordmark (PEANUT_LOGO). The name described where it was first used (a
header), not what it depicts.
- Rename export PEANUTMAN_LOGO -> PEANUTMAN and file
mascot/peanut-logo.svg -> mascot/peanutman.svg; update all call sites,
the local ASSET_ var, and the mascot alt text ("logo" -> "Peanut mascot").
- Move PEANUT_LOGO_BLACK out of illustrations/ into logos/ (it's the brand
logo); fix the one subpath import.
No behavior change — same pixels, accurate names. public/peanutman-logo.svg
is retained unchanged as the external email/embed alias.
Co-authored-by: kushagrasarathe <kushagrasarathe@gmail.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
@coderabbitai review in depth. Evaluate:
|
|
Important Review skippedNo new commits to review since the last review. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
WalkthroughThe mascot asset export ChangesMascot asset rename and consumer updates
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
QA testing guide (concise)Pure asset rename (
Pass criteria: every spot shows the peanut mascot, no broken images, no layout shift. |
Code-analysis diffPainscore total: 5860.07 → 5862.92 (+2.85) 🆕 New findings (2)
✅ Resolved (2)
|
🧩 Analysis chain🏁 Script executed: #!/bin/bash
gh pr view 2327 --repo peanutprotocol/peanut-ui --json files,additions,deletions,changedFiles -q '.'
echo "---DIFF---"
gh pr diff 2327 --repo peanutprotocol/peanut-ui > /tmp/pr.diff
wc -l /tmp/pr.diff
cat /tmp/pr.diffLength of output: 26942 🏁 Script executed: #!/bin/bash
cd /tmp && rm -rf repo && gh repo clone peanutprotocol/peanut-ui repo -- -q 2>&1 | tail -5
cd repo && gh pr checkout 2327 -q 2>&1 | tail -5
echo "---grep PEANUTMAN_LOGO---"
rg -n 'PEANUTMAN_LOGO' -g '!**/*.diff' || echo "none found"
echo "---assets barrel---"
cat src/assets/index.ts 2>/dev/null | head -50
fd index.ts src/assets
echo "---public peanutman-logo.svg---"
fd -a 'peanutman-logo.svg' public
git log -1 --format=%H -- public/peanutman-logo.svg
git diff main -- public/peanutman-logo.svg | head -20
echo "---check mascot index full---"
cat src/assets/mascot/index.ts
echo "---logos index full---"
cat src/assets/logos/index.ts
echo "---illustrations index full---"
cat src/assets/illustrations/index.tsLength of output: 1294 🏁 Script executed: #!/bin/bash
cd /tmp/repo 2>/dev/null && pwd && git status | head -5
echo "---retry checkout---"
gh pr checkout 2327 2>&1 | tail -10
echo "---grep PEANUTMAN_LOGO---"
rg -n 'PEANUTMAN_LOGO' || echo "none found"
echo "---assets barrel---"
fd index.ts src/assets
cat src/assets/index.ts 2>/dev/null | head -80
echo "---public peanutman-logo.svg diff vs main---"
git fetch origin main -q
git diff origin/main -- public/peanutman-logo.svg | head -20
echo "(no output means unchanged)"
echo "---mascot index---"
cat src/assets/mascot/index.ts
echo "---logos index---"
cat src/assets/logos/index.ts
echo "---illustrations index---"
cat src/assets/illustrations/index.tsLength of output: 1111 🏁 Script executed: #!/bin/bash
cd /tmp/repo
echo "---assets barrel---"
fd index.ts src/assets
echo "---src/assets/index.ts---"
cat src/assets/index.ts 2>/dev/null
echo "---public peanutman-logo.svg diff vs main---"
git fetch origin main -q
git diff origin/main -- public/peanutman-logo.svg
echo "(no output above means unchanged)"
echo "---mascot index---"
cat src/assets/mascot/index.ts
echo "---logos index---"
cat src/assets/logos/index.ts
echo "---illustrations index---"
cat src/assets/illustrations/index.ts
echo "---check duplicate/typo refs, PEANUT_LOGO_BLACK usage---"
rg -n "PEANUT_LOGO_BLACK" src
echo "---check other refs to old paths---"
rg -n "mascot/peanut-logo|illustrations/peanut-logo-dark" srcLength of output: 6817 Everything checks out. Verification confirms the rename is clean and low-risk. Review findingsRisk of breaking functionality: Low
Performance impact: None
Code quality / DRY
Overall this is a clean, well-scoped rename with no behavioral risk. Nice work confirming the QA checklist alongside it. ✅ Action performedReview finished.
|
🧪 UI test report — ✅ all greenSuites
📊 Coverage (unit)
⏱ 10 slowest test cases
|
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/components/TransactionDetails/TransactionCard.tsx (1)
169-175: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the alt text to match the mascot rename.
The
srcchange is correct, but the accessibility label still says “Logo.” Use “Peanut mascot” here so the test-transaction state matches the rest of the rename.♻️ Suggested tweak
- <Image - src={PEANUTMAN} - alt="Peanut Logo" - className="size-8 object-contain" - width={30} - height={30} - /> + <Image + src={PEANUTMAN} + alt="Peanut mascot" + className="size-8 object-contain" + width={30} + height={30} + />🤖 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 `@src/components/TransactionDetails/TransactionCard.tsx` around lines 169 - 175, The Image alt text in TransactionCard still uses the old “Peanut Logo” label, which does not match the mascot rename. Update the alt prop on the PEANUTMAN Image in TransactionCard to “Peanut mascot” so the accessibility text and test-transaction state are consistent with the new naming.
🧹 Nitpick comments (1)
src/app/(mobile-ui)/notifications/page.tsx (1)
12-12: 🚀 Performance & Scalability | 🔵 TrivialImport the mascot from the narrow asset module.
This page only needs
PEANUTMAN, but@/assetsre-exports every asset and needlessly bloats the bundle/build work. Prefer the mascot subpath here.♻️ Proposed fix
-import { PEANUTMAN } from '`@/assets`' +import { PEANUTMAN } from '`@/assets/mascot`'🤖 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 `@src/app/`(mobile-ui)/notifications/page.tsx at line 12, The notifications page imports PEANUTMAN from the broad assets barrel, which pulls in unnecessary exports and increases bundle/build work. Update the import in the notifications page to use the narrow mascot asset module instead of `@/assets`, keeping only PEANUTMAN referenced in this file.Source: Linters/SAST tools
🤖 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.
Inline comments:
In `@src/components/Claim/Link/Initial.view.tsx`:
- Line 45: The import in Initial.view.tsx is using the lint-restricted `@/assets`
barrel, which should be replaced with direct submodule imports to match
SendLinkActionList.tsx and QRScanner/index.tsx. Update the PEANUT_LOGO_BLACK and
PEANUTMAN imports to come from their specific asset modules under `@/assets`
instead of the barrel, keeping the same symbols but avoiding the broad re-export
path.
- Line 825: Update the PEANUTMAN image alt text in Initial.view.tsx to match the
new mascot naming used elsewhere, changing the current “Peanut Logo” text to
“Peanut mascot”. Use the existing <Image src={PEANUTMAN} /> element as the
locator and keep the wording consistent with PublicProfile.tsx.
In `@src/components/Global/PeanutLoading/CyclingLoading.tsx`:
- Line 29: The CyclingLoading component still uses the old image alt text, so
update the <img> in CyclingLoading to match the PR’s mascot wording. In the
component identified by PEANUTMAN and the CyclingLoading JSX, change the alt
attribute from the generic logo text to "Peanut mascot" so it stays consistent
with the sibling PeanutLoading/index.tsx update.
In `@src/components/Global/PeanutLoading/index.tsx`:
- Line 1: The import in PeanutLoading uses the assets barrel instead of the
specific module, which violates the project convention. Update the PEANUTMAN
import in this component to come directly from the mascot asset module, matching
the pattern used by sibling components like CardFace and CyclingLoading. Keep
the change scoped to the PEANUTMAN symbol so the component no longer pulls in
the full barrel.
In `@src/components/Profile/components/PublicProfile.tsx`:
- Line 3: The import in PublicProfile still uses the restricted `@/assets` barrel,
so replace it with direct imports from the owning asset modules. Update the
PublicProfile component’s asset import to pull PEANUT_LOGO_BLACK and PEANUTMAN
from their specific module(s), and move HandThumbsUpV2 off the barrel as well if
it is still re-exported there, so the component no longer depends on the broader
asset graph.
In `@src/components/TransactionDetails/TransactionDetailsHeaderCard.tsx`:
- Around line 210-214: The image alt text in TransactionDetailsHeaderCard’s
test-transaction header still uses the old “Logo” label even though the
PEANUTMAN asset was renamed; update the Image alt string to “Peanut mascot” so
the naming is consistent in this component.
---
Outside diff comments:
In `@src/components/TransactionDetails/TransactionCard.tsx`:
- Around line 169-175: The Image alt text in TransactionCard still uses the old
“Peanut Logo” label, which does not match the mascot rename. Update the alt prop
on the PEANUTMAN Image in TransactionCard to “Peanut mascot” so the
accessibility text and test-transaction state are consistent with the new
naming.
---
Nitpick comments:
In `@src/app/`(mobile-ui)/notifications/page.tsx:
- Line 12: The notifications page imports PEANUTMAN from the broad assets
barrel, which pulls in unnecessary exports and increases bundle/build work.
Update the import in the notifications page to use the narrow mascot asset
module instead of `@/assets`, keeping only PEANUTMAN referenced in this file.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: dbc1ab21-96bf-4e69-9d60-9d9200eb3c8b
⛔ Files ignored due to path filters (2)
src/assets/logos/peanut-logo-dark.svgis excluded by!**/*.svgsrc/assets/mascot/peanutman.svgis excluded by!**/*.svg
📒 Files selected for processing (21)
src/app/(mobile-ui)/notifications/page.tsxsrc/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsxsrc/app/dev/loading-words/page.tsxsrc/assets/illustrations/index.tssrc/assets/logos/index.tssrc/assets/mascot/index.tssrc/components/Badges/badge.utils.tssrc/components/Card/CardFace.tsxsrc/components/Card/share-asset/PixelatedCardFace.tsxsrc/components/Claim/Link/Initial.view.tsxsrc/components/Claim/Link/SendLinkActionList.tsxsrc/components/Global/ConfirmInviteModal/index.tsxsrc/components/Global/CreateAccountButton/index.tsxsrc/components/Global/NoMoreJailModal/index.tsxsrc/components/Global/PeanutLoading/CyclingLoading.tsxsrc/components/Global/PeanutLoading/index.tsxsrc/components/Global/QRScanner/index.tsxsrc/components/Profile/components/PublicProfile.tsxsrc/components/TransactionDetails/TransactionCard.tsxsrc/components/TransactionDetails/TransactionDetailsHeaderCard.tsxsrc/features/payments/shared/components/SendWithPeanutCta.tsx
💤 Files with no reviewable changes (1)
- src/assets/illustrations/index.ts
| import { Button } from '@/components/0_Bruddle/Button' | ||
| import Image from 'next/image' | ||
| import { PEANUT_LOGO_BLACK, PEANUTMAN_LOGO } from '@/assets' | ||
| import { PEANUT_LOGO_BLACK, PEANUTMAN } from '@/assets' |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Import from @/assets barrel is lint-restricted.
ESLint flags this as an error: importing from the @/assets barrel forces loading every re-export and hurts build perf. Other files in this same PR (SendLinkActionList.tsx, QRScanner/index.tsx) already import from the specific submodules (@/assets/mascot, @/assets/logos) — this file should follow suit.
🛠️ Proposed fix
-import { PEANUT_LOGO_BLACK, PEANUTMAN } from '`@/assets`'
+import { PEANUTMAN } from '`@/assets/mascot`'
+import { PEANUT_LOGO_BLACK } from '`@/assets/logos`'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import { PEANUT_LOGO_BLACK, PEANUTMAN } from '@/assets' | |
| import { PEANUTMAN } from '`@/assets/mascot`' | |
| import { PEANUT_LOGO_BLACK } from '`@/assets/logos`' |
🧰 Tools
🪛 ESLint
[error] 45-45: '@/assets' import is restricted from being used. Import from a specific file instead of the '@/assets' barrel — barrels force the bundler to load every re-export and hurt build perf. See CLAUDE.md.
(no-restricted-imports)
🤖 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 `@src/components/Claim/Link/Initial.view.tsx` at line 45, The import in
Initial.view.tsx is using the lint-restricted `@/assets` barrel, which should be
replaced with direct submodule imports to match SendLinkActionList.tsx and
QRScanner/index.tsx. Update the PEANUT_LOGO_BLACK and PEANUTMAN imports to come
from their specific asset modules under `@/assets` instead of the barrel, keeping
the same symbols but avoiding the broad re-export path.
Source: Linters/SAST tools
| <div>Receive on </div> | ||
| <div className="flex items-center gap-1"> | ||
| <Image src={PEANUTMAN_LOGO} alt="Peanut Logo" className="size-5" /> | ||
| <Image src={PEANUTMAN} alt="Peanut Logo" className="size-5" /> |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Alt text still says "logo" despite PR's stated rename intent.
The PR objective states the mascot alt text should change from "logo" to "Peanut mascot" (confirmed in PublicProfile.tsx which already uses alt="Peanut mascot"), but this <Image src={PEANUTMAN} .../> still uses alt="Peanut Logo".
✏️ Proposed fix
- <Image src={PEANUTMAN} alt="Peanut Logo" className="size-5" />
+ <Image src={PEANUTMAN} alt="Peanut mascot" className="size-5" />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <Image src={PEANUTMAN} alt="Peanut Logo" className="size-5" /> | |
| <Image src={PEANUTMAN} alt="Peanut mascot" className="size-5" /> |
🤖 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 `@src/components/Claim/Link/Initial.view.tsx` at line 825, Update the PEANUTMAN
image alt text in Initial.view.tsx to match the new mascot naming used
elsewhere, changing the current “Peanut Logo” text to “Peanut mascot”. Use the
existing <Image src={PEANUTMAN} /> element as the locator and keep the wording
consistent with PublicProfile.tsx.
| <div className="flex w-full items-center justify-center self-center"> | ||
| <div className="animate-spin"> | ||
| <img src={PEANUTMAN_LOGO.src} alt="logo" className="h-10" /> | ||
| <img src={PEANUTMAN.src} alt="logo" className="h-10" /> |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Alt text not updated to "Peanut mascot".
Per the PR objective, mascot alt text should change from "logo" to "Peanut mascot". The sibling PeanutLoading/index.tsx was updated but this one was missed.
💚 Proposed fix
- <img src={PEANUTMAN.src} alt="logo" className="h-10" />
+ <img src={PEANUTMAN.src} alt="Peanut mascot" className="h-10" />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <img src={PEANUTMAN.src} alt="logo" className="h-10" /> | |
| <img src={PEANUTMAN.src} alt="Peanut mascot" className="h-10" /> |
🤖 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 `@src/components/Global/PeanutLoading/CyclingLoading.tsx` at line 29, The
CyclingLoading component still uses the old image alt text, so update the <img>
in CyclingLoading to match the PR’s mascot wording. In the component identified
by PEANUTMAN and the CyclingLoading JSX, change the alt attribute from the
generic logo text to "Peanut mascot" so it stays consistent with the sibling
PeanutLoading/index.tsx update.
| @@ -1,4 +1,4 @@ | |||
| import { PEANUTMAN_LOGO } from '@/assets' | |||
| import { PEANUTMAN } from '@/assets' | |||
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Barrel import violates project convention.
ESLint flags this: importing PEANUTMAN from '@/assets' pulls in the whole barrel instead of the specific module, unlike sibling consumers (e.g. CardFace.tsx, CyclingLoading.tsx) that import from '@/assets/mascot'.
🔧 Proposed fix
-import { PEANUTMAN } from '`@/assets`'
+import { PEANUTMAN } from '`@/assets/mascot`'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import { PEANUTMAN } from '@/assets' | |
| import { PEANUTMAN } from '`@/assets/mascot`' |
🧰 Tools
🪛 ESLint
[error] 1-1: '@/assets' import is restricted from being used. Import from a specific file instead of the '@/assets' barrel — barrels force the bundler to load every re-export and hurt build perf. See CLAUDE.md.
(no-restricted-imports)
🤖 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 `@src/components/Global/PeanutLoading/index.tsx` at line 1, The import in
PeanutLoading uses the assets barrel instead of the specific module, which
violates the project convention. Update the PEANUTMAN import in this component
to come directly from the mascot asset module, matching the pattern used by
sibling components like CardFace and CyclingLoading. Keep the change scoped to
the PEANUTMAN symbol so the component no longer pulls in the full barrel.
Source: Linters/SAST tools
| 'use client' | ||
|
|
||
| import { HandThumbsUpV2, PEANUT_LOGO_BLACK, PEANUTMAN_LOGO } from '@/assets' | ||
| import { HandThumbsUpV2, PEANUT_LOGO_BLACK, PEANUTMAN } from '@/assets' |
There was a problem hiding this comment.
🚀 Performance & Scalability | 🟠 Major | ⚡ Quick win
Avoid the @/assets barrel import.
This still trips the repo’s restricted-imports rule and pulls in the broader asset re-export graph. Split the mascot/logo symbols onto their owning modules instead, and move HandThumbsUpV2 off the barrel too if it still comes from there.
🧰 Tools
🪛 ESLint
[error] 3-3: '@/assets' import is restricted from being used. Import from a specific file instead of the '@/assets' barrel — barrels force the bundler to load every re-export and hurt build perf. See CLAUDE.md.
(no-restricted-imports)
🤖 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 `@src/components/Profile/components/PublicProfile.tsx` at line 3, The import in
PublicProfile still uses the restricted `@/assets` barrel, so replace it with
direct imports from the owning asset modules. Update the PublicProfile
component’s asset import to pull PEANUT_LOGO_BLACK and PEANUTMAN from their
specific module(s), and move HandThumbsUpV2 off the barrel as well if it is
still re-exported there, so the component no longer depends on the broader asset
graph.
Source: Linters/SAST tools
| {isTestTransaction ? ( | ||
| <div className="flex items-center gap-3"> | ||
| <div> | ||
| <Image src={PEANUTMAN_LOGO} alt="Peanut Logo" width={64} height={64} className="size-8" /> | ||
| <Image src={PEANUTMAN} alt="Peanut Logo" width={64} height={64} className="size-8" /> | ||
| </div> |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Update the alt text to match the mascot rename.
The image source was renamed, but the label still says “Logo.” Switch this to “Peanut mascot” so the header card stays consistent with the new naming.
♻️ Suggested tweak
- <Image src={PEANUTMAN} alt="Peanut Logo" width={64} height={64} className="size-8" />
+ <Image src={PEANUTMAN} alt="Peanut mascot" width={64} height={64} className="size-8" />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| {isTestTransaction ? ( | |
| <div className="flex items-center gap-3"> | |
| <div> | |
| <Image src={PEANUTMAN_LOGO} alt="Peanut Logo" width={64} height={64} className="size-8" /> | |
| <Image src={PEANUTMAN} alt="Peanut Logo" width={64} height={64} className="size-8" /> | |
| </div> | |
| {isTestTransaction ? ( | |
| <div className="flex items-center gap-3"> | |
| <div> | |
| <Image src={PEANUTMAN} alt="Peanut mascot" width={64} height={64} className="size-8" /> | |
| </div> |
🤖 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 `@src/components/TransactionDetails/TransactionDetailsHeaderCard.tsx` around
lines 210 - 214, The image alt text in TransactionDetailsHeaderCard’s
test-transaction header still uses the old “Logo” label even though the
PEANUTMAN asset was renamed; update the Image alt string to “Peanut mascot” so
the naming is consistent in this component.
Summary
PEANUTMAN_LOGOwas the peanut-character illustration mislabeled as a "logo" — a distinct asset from the app icon (peanut-icon.svg) and the PEANUT wordmark (PEANUT_LOGO). The name described where it was first used (a header), not what it depicts. This untangles the three overlapping "logo" meanings so the names say what the assets are.Changes (no behavior change — same pixels, accurate names):
PEANUTMAN_LOGO→PEANUTMANand filemascot/peanut-logo.svg→mascot/peanutman.svg; update all call sites, the localASSET_var, and the mascotalttext ("logo"→"Peanut mascot").PEANUT_LOGO_BLACKout ofillustrations/intologos/(it's the brand logo); fix the one subpath import.public/peanutman-logo.svgis retained unchanged as the external email/embed alias — no public path added or removed.Risks / breaking changes
PEANUTMANis a new token (no collision) and consumers import via the@/assetsbarrel which re-exports it unchanged. Typecheck enforces completeness.public/peanutman-logo.svgis untouched.public/logo-favicon.png— the favicon/app-icon, load-bearing for the Card Beta email drip.Notes
QA
npm run typecheck— clean (catches any missed rename).grep -rn PEANUTMAN_LOGO src→ no hits.