The shipped mark failed the one size it most needed to survive. At 16px in a browser tab its outer strokes rasterised away entirely and the 2.5px gap between stroke and node filled in, so the favicon rendered as an indeterminate horizontal smear rather than as anything.
Three changes fix it, all driven by that case and verified by rendering rather than by reasoning:
Before
After
Strokes end at
x=35 / x=37
x=30
Outer opacity
.45 / .55
.7
Node radius
7.5 / 8
8.5
This is not a rebrand. Same three-signals-converging figure, keeping whatever recognition it has earned; only the proportions changed.
Also in here
icon.svg and logo.svg had drifted apart — different node radii and stroke ends. They're now geometrically identical, differing only in palette, so the skew can't quietly return.
The lockup ships in two variants, because one file can't do both jobs.apps/web/public/lockup.svg uses currentColor for in-app use; docs/assets/lockup.svg pins #0092fd for the README. An <img src> reference resolves currentColor to black, so the currentColor variant would be invisible against a dark README.
The wordmark carries textLength, without which it overruns the viewBox on wider monospace fonts.
The README lockup sits inside the H1 (# <img …>) rather than replacing it — swapping the heading for a bare image would drop the document's only H1 and break the outline. The alt degrades to "shared-memory" if the image doesn't load.
Verification
All four assets rendered on dark and light grounds, and the favicon checked at true 16px.
Touches README.md (the H1) as does #22 (the OIDC section). Different regions; whichever lands second rebases cleanly.
Adopts concept 09 + the lockup from #23.
## Why
The shipped mark failed the one size it most needed to survive. At 16px in a browser tab its outer strokes rasterised away entirely and the 2.5px gap between stroke and node filled in, so the favicon rendered as an indeterminate horizontal smear rather than as anything.
Three changes fix it, all driven by that case and verified by rendering rather than by reasoning:
| | Before | After |
|---|---|---|
| Strokes end at | `x=35` / `x=37` | `x=30` |
| Outer opacity | `.45` / `.55` | `.7` |
| Node radius | `7.5` / `8` | `8.5` |
**This is not a rebrand.** Same three-signals-converging figure, keeping whatever recognition it has earned; only the proportions changed.
## Also in here
- **`icon.svg` and `logo.svg` had drifted apart** — different node radii and stroke ends. They're now geometrically identical, differing only in palette, so the skew can't quietly return.
- **The lockup ships in two variants, because one file can't do both jobs.** `apps/web/public/lockup.svg` uses `currentColor` for in-app use; `docs/assets/lockup.svg` pins `#0092fd` for the README. An `<img src>` reference resolves `currentColor` to black, so the currentColor variant would be invisible against a dark README.
- **The wordmark carries `textLength`**, without which it overruns the viewBox on wider monospace fonts.
- **The README lockup sits inside the H1** (`# <img …>`) rather than replacing it — swapping the heading for a bare image would drop the document's only H1 and break the outline. The `alt` degrades to "shared-memory" if the image doesn't load.
## Verification
All four assets rendered on dark and light grounds, and the favicon checked at true 16px.
> Touches `README.md` (the H1) as does #22 (the OIDC section). Different regions; whichever lands second rebases cleanly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The shipped mark failed the one size it most needed to survive. At 16px
in a browser tab its outer strokes rasterised away entirely and the
2.5px gap between stroke and node filled in, so the favicon rendered as
an indeterminate horizontal smear rather than as anything. Three changes
fix it, all driven by that case and verified by rendering rather than by
reasoning: strokes stop at x=30 so the gap survives, outer opacity goes
.45/.55 -> .7 so the neighbours stay visible, and the node grows to
r=8.5 so it still reads as a disc.
This is not a rebrand. The mark is the same three-signals-converging
figure and keeps whatever recognition it has earned; only its
proportions changed. icon.svg and logo.svg had drifted slightly apart
(different node radii and stroke ends) and are now geometrically
identical, differing only in palette.
Adds the lockup, which had no asset at all, in two variants because one
cannot serve both jobs: public/lockup.svg uses currentColor for in-app
use, and docs/assets/lockup.svg fixes the colour to #0092fd for the
README. An <img src> reference resolves currentColor to black, so the
currentColor variant would be invisible against a dark README. The
wordmark carries textLength, without which it overruns the viewBox on
wider monospace fonts.
Concepts and the reasoning behind the ones not chosen are on the
docs/logo-concepts branch.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jknapp
merged commit bd7a1ca59a into main2026-08-13 01:46:32 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adopts concept 09 + the lockup from #23.
Why
The shipped mark failed the one size it most needed to survive. At 16px in a browser tab its outer strokes rasterised away entirely and the 2.5px gap between stroke and node filled in, so the favicon rendered as an indeterminate horizontal smear rather than as anything.
Three changes fix it, all driven by that case and verified by rendering rather than by reasoning:
x=35/x=37x=30.45/.55.77.5/88.5This is not a rebrand. Same three-signals-converging figure, keeping whatever recognition it has earned; only the proportions changed.
Also in here
icon.svgandlogo.svghad drifted apart — different node radii and stroke ends. They're now geometrically identical, differing only in palette, so the skew can't quietly return.apps/web/public/lockup.svgusescurrentColorfor in-app use;docs/assets/lockup.svgpins#0092fdfor the README. An<img src>reference resolvescurrentColorto black, so the currentColor variant would be invisible against a dark README.textLength, without which it overruns the viewBox on wider monospace fonts.# <img …>) rather than replacing it — swapping the heading for a bare image would drop the document's only H1 and break the outline. Thealtdegrades to "shared-memory" if the image doesn't load.Verification
All four assets rendered on dark and light grounds, and the favicon checked at true 16px.
🤖 Generated with Claude Code