docs: draft ten logo concepts

Eight fresh directions plus two refinements of the shipped mark, each
authored as a real currentColor SVG in the app's house style rather than
as a description, so any of them can be dropped straight in and the
favicon tile is a mechanical derivation.

Every mark was rendered at 120/32/24/16px and looked at, which changed
the set three times: the braid came out as a plain multiplication sign
and was rebuilt with actual over/under crossings, the anchor was
rebalanced to three-fold symmetry, and the first return-arc read even
more like a copyright glyph than the current one.

The finding that matters is not one of the eight. The mark shipping
today fails at 16px — its outer strokes drop out to rasterisation and
the 2.5px gap to the node fills in, so the favicon renders as a smear.
Concept 09 fixes that in five lines and is worth taking regardless of
whether anything here replaces the mark.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-12 10:51:47 -07:00
co-authored by Claude Opus 5
parent 80341c558d
commit 2c127886ff
11 changed files with 265 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Venn core">
<title>Venn core</title>
<!-- Two participants; the filled lens is the memory they hold in common. -->
<g fill="none" stroke="currentColor" stroke-width="5" opacity=".5">
<circle cx="24" cy="32" r="15"/>
<circle cx="40" cy="32" r="15"/>
</g>
<path d="M32 19.31A15 15 0 0 1 32 44.69 15 15 0 0 1 32 19.31Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 470 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Handoff">
<title>Handoff</title>
<!-- Two sessions facing each other, passing one memory between them. -->
<g fill="none" stroke="currentColor" stroke-width="6.5" stroke-linecap="round" opacity=".65">
<path d="M26 16Q10 32 26 48"/>
<path d="M38 16Q54 32 38 48"/>
</g>
<circle cx="32" cy="32" r="7" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 451 B

+16
View File
@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Braid">
<title>Braid</title>
<!--
Two independent threads woven into one strand - neither is subordinate,
and the weave is what holds. Crossings computed at (20,32) and (44,32);
the mask punches the first one so strand A reads as passing over it.
-->
<mask id="sm-braid-gap">
<rect width="64" height="64" fill="#fff"/>
<circle cx="20" cy="32" r="6.25" fill="#000"/>
</mask>
<g fill="none" stroke="currentColor" stroke-width="6.5" stroke-linecap="round">
<path d="M8 20C20 20 20 44 32 44 44 44 44 20 56 20" opacity=".75"/>
<path d="M8 44C20 44 20 20 32 20 44 20 44 44 56 44" mask="url(#sm-braid-gap)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 762 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Return arc">
<title>Return arc</title>
<!-- Write, leave, come back to it. The gap is where the next session enters. -->
<path d="M42.3 46.7A18 18 0 1 1 42.3 17.3" fill="none" stroke="currentColor"
stroke-width="6.5" stroke-linecap="round" opacity=".7"/>
<circle cx="30" cy="32" r="7.5" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 438 B

+10
View File
@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Anchor">
<title>Anchor</title>
<!-- One fixed point that separate agents reference from wherever they are. -->
<g fill="none" stroke="currentColor" stroke-width="6" stroke-linecap="round" opacity=".6">
<path d="M32 8V20"/>
<path d="M11.2 44L21.6 38"/>
<path d="M52.8 44L42.4 38"/>
</g>
<circle cx="32" cy="32" r="8.5" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 475 B

+11
View File
@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Spine">
<title>Spine</title>
<!-- An index: many entries on one shared spine, the active one reaching furthest. -->
<g fill="none" stroke="currentColor" stroke-width="6" stroke-linecap="round">
<path d="M16 13V51"/>
<path d="M16 21H34" opacity=".5"/>
<path d="M16 32H42"/>
<path d="M16 43H34" opacity=".5"/>
</g>
<circle cx="52" cy="32" r="5" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 504 B

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Knot">
<title>Knot</title>
<!-- One continuous thread with no start and no end; it persists past any session. -->
<path d="M32 32C38 20 50 20 50 32 50 44 38 44 32 32 26 20 14 20 14 32 14 44 26 44 32 32Z"
fill="none" stroke="currentColor" stroke-width="6.5" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 410 B

+11
View File
@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Triad">
<title>Triad</title>
<!-- The smallest possible shared graph: three peers, one currently speaking. -->
<path d="M32 16L17 44H47Z" fill="none" stroke="currentColor" stroke-width="5"
stroke-linejoin="round" opacity=".4"/>
<g fill="currentColor">
<circle cx="32" cy="16" r="7"/>
<circle cx="17" cy="44" r="7" opacity=".55"/>
<circle cx="47" cy="44" r="7" opacity=".55"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 524 B

+14
View File
@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Current mark, rebalanced">
<title>Current mark, rebalanced</title>
<!--
The shipped mark with three changes aimed at 16px: strokes stop earlier so
the gap to the node survives rasterisation, outer opacity raised .45 -> .7
so the neighbours don't drop out, node enlarged 7.5 -> 8.5.
-->
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="7">
<path d="M12 16C24 16 25 32 30 32" opacity=".7"/>
<path d="M12 32H30"/>
<path d="M12 48C24 48 25 32 30 32" opacity=".7"/>
</g>
<circle cx="46" cy="32" r="8.5" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 694 B

+13
View File
@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 292 64" width="292" height="64" role="img" aria-label="shared-memory">
<title>shared-memory lockup</title>
<!-- Horizontal lockup: rebalanced mark + monospace wordmark on a shared baseline. -->
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="7">
<path d="M12 16C24 16 25 32 30 32" opacity=".7"/>
<path d="M12 32H30"/>
<path d="M12 48C24 48 25 32 30 32" opacity=".7"/>
</g>
<circle cx="46" cy="32" r="8.5" fill="currentColor"/>
<text x="72" y="41" fill="currentColor"
font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
font-size="26" letter-spacing="-0.8">shared<tspan opacity=".45">-</tspan>memory</text>
</svg>

After

Width:  |  Height:  |  Size: 751 B