Skip to content

Commit e0596ac

Browse files
lesnik512claude
andauthored
docs: brand backstage story (#18)
A short narrative of the design session that produced the org favicon + social card, with the variant marks (story-assets/) embedded and the finished org/ assets referenced inline. Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
1 parent 0ca10ce commit e0596ac

9 files changed

Lines changed: 106 additions & 0 deletions

File tree

brand/STORY.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Backstage: how the modern-python mark got made
2+
3+
A short story of the design session that produced the org favicon + social card —
4+
the ideas, the dead-ends, and the pivots. (The little marks below are SVGs in
5+
[`story-assets/`](story-assets); the finished assets live in [`org/`](org).)
6+
7+
---
8+
9+
## The starting point was an old favorite
10+
11+
We began with the original `MODERN / PYTHON` wordmark — corner brackets framing
12+
thin caps. You liked it, but it had three problems: **no Python in it**, **too
13+
welded to the text**, and **meaningless without the words**. So: start from the
14+
beginning.
15+
16+
## Act 1 — finding the symbol
17+
18+
Four core directions went up in the browser companion:
19+
20+
<p>
21+
<img src="story-assets/dir-brackets.svg" width="76" alt="syntax brackets">
22+
<img src="story-assets/dir-interlock.svg" width="76" alt="interlocked brackets">
23+
<img src="story-assets/dir-woven.svg" width="76" alt="woven squares">
24+
<img src="story-assets/dir-repl.svg" width="76" alt="REPL prompt">
25+
</p>
26+
27+
*Syntax brackets `[ ]` · interlocked brackets · woven "snakes" · REPL prompt `>_`.*
28+
29+
You took **brackets** and **interlock**, then asked to go broader — with a note
30+
that became the whole identity: *make them snake-like, square, no rounded
31+
corners.* Dozens of square-snake sketches later, the winner was a **pinwheel with
32+
square "block-head" snakes** (and its siblings):
33+
34+
<p>
35+
<img src="story-assets/p2-pinwheel.svg" width="92" alt="P2 block-head pinwheel">
36+
<img src="story-assets/snake-square.svg" width="92" alt="square-snake sibling">
37+
</p>
38+
39+
## Act 2 — the family that never shipped (yet)
40+
41+
To make the ecosystem feel related, we studied how real icon families nest —
42+
Adobe CC, JetBrains, AWS, Material — and chose a scheme where the frame stays
43+
constant and an **inner glyph** marks each sub-family. I drew ~50 candidate
44+
glyphs (node graphs, walrus `:=`, prompts, gears…). Then you made the smart call
45+
to **narrow scope**: ship just the org favicon + social card now, defer the
46+
per-project system. That saved us from painting the whole org before the org
47+
mark was final.
48+
49+
## Act 3 — the wordmark fights back
50+
51+
The big lockup felt "not harmonic." First attempt: the brackets drifted off the
52+
text (I was guessing letter widths). The fix was pinning the text to an exact
53+
width so the corners always frame it. Then we chased the original's feel —
54+
thinner letters, thinner crop-marks, breathing room — and on type asked *which
55+
font says "modern"?* Geometric sans, the Bauhaus answer. Fifty options (Futura,
56+
Avenir, Montserrat…), narrowed to **commercial-safe SIL OFL** faces, landing on
57+
**Jost**, two-line caps, green `MODERN` / gold `PYTHON`:
58+
59+
<p><img src="org/social-card.svg" width="520" alt="MODERN PYTHON social card"></p>
60+
61+
## Act 4 — the icon gets teeth
62+
63+
For the standalone mark you first chose a **core dot**, then questioned what a dot
64+
*means* (fair — nothing). The breakthrough: **push the snakes to the borders,
65+
give them triangular tails, and try a chevron `>` inside.** We compared dot vs
66+
chevron at true favicon sizes — chevron won:
67+
68+
<p>
69+
<img src="story-assets/fav-dot.svg" width="92" alt="favicon with dot">
70+
<img src="story-assets/fav-chevron.svg" width="92" alt="favicon with chevron">
71+
&nbsp;&nbsp;&rarr;&nbsp;&nbsp;
72+
<img src="org/avatar.svg" width="92" alt="final icon">
73+
</p>
74+
75+
It reads like a terminal prompt woven into a snake frame — Python *and* tooling
76+
in one tile.
77+
78+
## Act 5 — the details that matter at 1024px
79+
80+
You caught what only shows up at full size: Telegram crops avatars to a **circle**
81+
(so a full-bleed mark gets clipped → we added a padded variant), a **1px
82+
tail/body seam**, and asked for the **tails on the social cards** too. The seam
83+
fix overlapped the tail into the stroke — which you then caught *stepped the
84+
inner edge*. The real fix: a 4-point tail that overlaps for the seam but starts
85+
the inner diagonal exactly at the body's corner, so the line runs straight.
86+
87+
<p>
88+
<img src="org/avatar.svg" width="92" alt="square avatar (GitHub)">
89+
<img src="org/avatar-circle.svg" width="92" alt="padded avatar (Telegram circle)">
90+
</p>
91+
92+
*Full-bleed for GitHub · padded for circular crops.*
93+
94+
---
95+
96+
From "where's the Python?" to a chevron-in-a-snake-frame that ships as a favicon,
97+
a circle-safe avatar, and a wordmark social card. The brackets we started with
98+
are still in there — they just grew tails and learned to hold a prompt.
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

brand/story-assets/dir-repl.svg

Lines changed: 1 addition & 0 deletions
Loading

brand/story-assets/dir-woven.svg

Lines changed: 1 addition & 0 deletions
Loading

brand/story-assets/fav-chevron.svg

Lines changed: 1 addition & 0 deletions
Loading

brand/story-assets/fav-dot.svg

Lines changed: 1 addition & 0 deletions
Loading

brand/story-assets/p2-pinwheel.svg

Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)