Skip to content

docs: a blocky header with an RGB-split glitch - #232

Merged
retr0h merged 5 commits into
mainfrom
docs/blocky-header
Oct 1, 2026
Merged

retr0h merged 5 commits into
mainfrom
docs/blocky-header

Conversation

@retr0h

@retr0h retr0h commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

First of seven. Judge the glitch here before I do the other six.

Three files: the README header and two SVGs.

The logo

asset/logo-dark.svg and asset/logo-light.svg, built from <rect> elements on a 5×7 grid rather than from <text>.

Why rects and not a font. GitHub cannot be relied on for fonts: a font-family wordmark renders differently per viewer, or not at all. Rects render identically everywhere, and "blocky" becomes literal rather than a font choice.

The glitch is three offset copies: magenta pulled half a block left across rows 1 and 2, cyan pushed right across rows 4 and 5, the repo colour underneath, and a half-opacity overlay on the middle row. specs is blue #3B82F6.

The header

Follows the toneharness shape: centred logo at 610, one-line tagline, one badge row, a bold positioning line, then the paragraph. Nothing below ## Usage changes.

The colours for the rest

Repo Colour
osapi amber #FFB000
osapi-orchestrator violet #A855F7
nats-client cyan #22D3EE
nats-server teal #10B981
gohai orange-red #FF6B35
osapi-justfiles slate #94A3B8
specs blue #3B82F6

All 14 SVGs are generated. If the glitch is too subtle or too loud, I adjust the offset and opacity before the other six go out.

Replaces #231, which showed 123 files because I branched it off #230's branch instead of main.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FuKUsHFG1EqZXamffh9M2c

asset/logo-{dark,light}.svg are built from rects on a 5x7 grid rather
than from <text>. GitHub cannot be relied on for fonts, so a font-family
wordmark renders differently per viewer or not at all; rects render
identically everywhere and blocky is literal rather than a font choice.

The glitch is three offset copies: magenta pulled left across rows 1 and
2, cyan pushed right across rows 4 and 5, the repo colour underneath,
and a half-opacity overlay on the middle row. specs is blue #3B82F6.

Header follows the toneharness shape: centred logo, one-line tagline,
one badge row, a bold line, then the paragraph. Nothing below ## Usage
changes.
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown

Thank you for contributing to this project! 😊🕹️

The first attempt was a 5x7 grid at 10px with RGB-split cyan and magenta
layers. That is not what toneharness does, and it looked nothing like it.

Fetched the actual SVG and read it. It is 4 rows of 16px blocks in one
colour, 8px padding, 80 tall, with seven cells at opacity 0.25 as the
glitch, and vertical runs merged into single rects so the blocks meet
exactly. The letterforms are 3 columns wide, proportional, and the
opacity cells are decoration rather than part of the letters, which is
why the first extraction of its font came out wrong.

This matches all of it: same cell size, same row count, same padding,
same height, same glitch count and opacity, same merged runs. One
primary colour per repository.
Read ~/git/tonestack's SVG by row and colour. The word is four rows of
16px blocks, and the top two rows are grey #8a8a8a while the bottom two
are the brand colour. The light variant is the same split with #6f6f6f
and a darker brand. That two-tone split is the overshadowing.

My version painted all four rows one colour, which is why it looked
nothing like it. Now it matches: grey top half, brand bottom half, seven
cells at opacity 0.25, vertical runs merged but never across the colour
boundary.

osapi takes tonestack's own #ffa032 since amber is the hub's colour
anyway. The rest keep their assigned brand colour on the bottom half.
Found the font in tonestack's source, pkg/cli/internal/paint/theme.go:

  top = "▀█▀ █▀█ █▄░█ █▀▀ █░█ ▄▀█ █▀█ █▄░█ █▀▀ █▀ █▀"
  bot = "░█░ █▄█ █░▀█ ██▄ █▀█ █▀█ █▀▄ █░▀█ ██▄ ▄█ ▄█"

A half-block alphabet in two text rows. Each cell is a full block, an
upper half, a lower half or blank, and each text row becomes two SVG
rows, which is where the four rows of 16px blocks come from.

The top text row is grey and the bottom is the brand colour. That split
is the bleed: wherever a letter has a full-height stem, the brand colour
sits directly under grey in the same column, and the eye reads it as one
colour bleeding into the other. My previous attempt painted all four
rows one colour, so there was nothing to bleed.

Seven whole character cells drop to 0.25 opacity, which is how tonestack
does its glitch: a whole cell at a time, not a half.

Every letter tonestack has is byte-identical to its strings: a e h n o
r s t. The eleven the osapi names need and it does not have are drawn in
the same alphabet.

Seam density, the share of columns where brand sits under grey:
tonestack 44%, osapi 44%, gohai 47%. The longer names run 27 to 33%
because s, t, c, e and l have no full-height stem in this font, which is
a property of the alphabet rather than of the rendering.
tonestack dims seven cells across 43 columns, about one per six. A fixed
seven on a 17 column word dims 41% of it, which buried the letters:
rendering specs showed a word you could not read.

One per six now, minimum two. specs gets three, osapi-orchestrator gets
eleven.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant