# feat: theSVG sender logos and app-drawn window controls · PR \#4 · screen/aggregate-mail

[View on GitCafe](https://git.cafe/screen/aggregate-mail/pull/4)

Repository: [screen/aggregate-mail](https://git.cafe/screen/aggregate-mail)

Visibility: public

State: merged

Source repository: screen/aggregate-mail

Source branch: feat/svg-logos-traffic-lights

Target branch: main

Head commit: 0e1948f2f7317b78487e296fc5cc427d9ec32d57

[Discussion and reviews](https://git.cafe/screen/aggregate-mail/pull/4)

[Commits](https://git.cafe/screen/aggregate-mail/pull/4/commits?format=markdown)

[Files changed](https://git.cafe/screen/aggregate-mail/pull/4/diffs?format=markdown)

## Description

---

> Mirrors GitHub PR [#6](https://github.com/Zns-Nexus/aggregate-mail/pull/6).

> **Stacked on #1 ([GitHub #5](https://github.com/Zns-Nexus/aggregate-mail/pull/5))** (`chore/setup-ci-v013`). Merge #1 ([GitHub #5](https://github.com/Zns-Nexus/aggregate-mail/pull/5)) first, and this PR will retarget to `main`.

## What
- **Sender logos:** `/api/logo/:domain` tries theSVG first, then the existing favicon service. The route now sends `nosniff` and a sandboxing CSP, because third-party SVG bytes are served from our own origin. New `POST /api/logos/sync` scans every non-free-mail sender domain and returns a `LogoSummary`. Tests are in `server/logos.test.ts`.
- **Window controls:** on Windows and Linux the window is now frameless with no caption overlay. The top bar draws its own traffic lights (close, minimize, maximize over IPC), and they grey out while the window is unfocused. Settings → Appearance can move them to the right. Double-clicking the bar maximizes the window.
- **Icons:** `lucide-react` is replaced with `iconsax-react`.

## Fitting in with what's already on main and open
- **macOS ([GitHub #1](https://github.com/Zns-Nexus/aggregate-mail/pull/1), already merged):** macOS keeps `hiddenInset` and its native traffic lights at (16, 16). The app-drawn dots, the double-click handler and the right-side toggle are all turned off on `darwin`. Appearance shows a note there instead of the toggle. DESIGN.md describes both platforms.
- **#1 ([GitHub #5](https://github.com/Zns-Nexus/aggregate-mail/pull/5)):** this PR builds on #1 ([GitHub #5](https://github.com/Zns-Nexus/aggregate-mail/pull/5))'s version bump to 0.1.3 and adds no version change of its own.
- **#2 ([GitHub #4](https://github.com/Zns-Nexus/aggregate-mail/pull/4)):** this PR's `src/App.tsx` and `src/style.css` changes merge cleanly with #2 ([GitHub #4](https://github.com/Zns-Nexus/aggregate-mail/pull/4)). #2 ([GitHub #4](https://github.com/Zns-Nexus/aggregate-mail/pull/4)) and #1 ([GitHub #5](https://github.com/Zns-Nexus/aggregate-mail/pull/5)) already conflict with each other (in `package.json` `test` script, CHANGELOG, CONTRIBUTING, KB), and this PR doesn't change that.
- **#3 ([GitHub #2](https://github.com/Zns-Nexus/aggregate-mail/pull/2)) (revert macOS):** already conflicting. If it ever lands, the `isMac` branches here stay harmless.

## Verification
- `npx tsc --noEmit` passes
- `npm test`: 32/32 pass
- `npm run build` passes
- Not yet run by hand on Windows or macOS

🤖 Generated with [Claude Code](https://claude.com/claude-code)


