Skip to content

feat(web): put the logo and the mark on every surface - #14

Merged
ralyodio merged 1 commit into
mainfrom
worktree-logo-favicon-everywhere
Aug 13, 2026
Merged

ralyodio merged 1 commit into
mainfrom
worktree-logo-favicon-everywhere

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

logo.png and favicon.png were committed but never referenced. Wire them into the metadata, the manifest, the pages and the verification mail, behind a shared components/brand.tsx.

The two assets are not interchangeable. logo.png sets "Outreach" in white, so the full wordmark reads on the dark theme and half of it disappears on the light one. BrandLockup therefore swaps: the wordmark on dark, the mark from favicon.png beside live text on light. Anywhere the background is fixed dark — the closing CTA band — the wordmark is used directly. Anywhere the surface can be either, or the image may not load at all (tab strip, launcher, mail client), it is the mark.

Both files were re-encoded first. They carried enough transparent padding that a plain <img> reserved four times the box the artwork occupies, and the favicon was a 1.3MB 3:2 PNG — a squashed tab icon fetched on every page load. Trimmed and resized they are 512x512 and 1007x256, at 31KB and 35KB. The artwork is untouched; the originals are in 85faaa7 if the padding turns out to be load-bearing.

Plain <img>, not next/image: the runtime optimiser needs sharp, which this workspace does not install, so the standalone image would 500 on the first request for an optimised asset.

The service worker pre-caches both with the offline page and moves to v2 — an offline screen that renders a broken image is worse than the browser error it replaces.

`logo.png` and `favicon.png` were committed but never referenced. Wire
them into the metadata, the manifest, the pages and the verification
mail, behind a shared `components/brand.tsx`.

The two assets are not interchangeable. `logo.png` sets "Outreach" in
white, so the full wordmark reads on the dark theme and half of it
disappears on the light one. `BrandLockup` therefore swaps: the wordmark
on dark, the mark from `favicon.png` beside live text on light. Anywhere
the background is fixed dark — the closing CTA band — the wordmark is
used directly. Anywhere the surface can be either, or the image may not
load at all (tab strip, launcher, mail client), it is the mark.

Both files were re-encoded first. They carried enough transparent
padding that a plain `<img>` reserved four times the box the artwork
occupies, and the favicon was a 1.3MB 3:2 PNG — a squashed tab icon
fetched on every page load. Trimmed and resized they are 512x512 and
1007x256, at 31KB and 35KB. The artwork is untouched; the originals are
in 85faaa7 if the padding turns out to be load-bearing.

Plain `<img>`, not `next/image`: the runtime optimiser needs `sharp`,
which this workspace does not install, so the standalone image would 500
on the first request for an optimised asset.

The service worker pre-caches both with the offline page and moves to
v2 — an offline screen that renders a broken image is worse than the
browser error it replaces.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ralyodio
ralyodio merged commit 6cec87c into main Aug 13, 2026
3 checks passed
@ralyodio
ralyodio deleted the worktree-logo-favicon-everywhere branch August 13, 2026 00:01
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.

1 participant