The org mark is a key on the cyan systems-family gradient
(#22CCE2 → #0079A8), the same family go-attest, go-volumes,
go-filesystems and forty other sibling orgs use. The colour was not invented
for this org: the family grammar says pick the siblings' colour.
Per-repo marks are the org glyph declined — the same key, shrunk into the top region, over a white name plate. They are not custom glyphs, deliberately: a distinct mark per repo breaks the family at a glance.
The same set every sibling org publishes, generated by the fleet's own pipeline rather than staged by hand:
- SVG —
svg/color,svg/white(white, transparent),svg/black - PNG 16→1024 px, 3 variants —
png/<variant>/<size>/ - JPG (colour, white background) —
jpg/<size>/ - ICO (Windows) —
ico/ - ICNS (macOS) —
icns/ - GitHub avatar 512 px —
avatar/ - Social preview 1280×640 —
social/
Nine subjects: the org mark and one per repository.
Generated by logos/brandgen, a Go program built on this fleet's own
packages — go-gfx/gfx for the SVG raster,
the resizes and the ICO/ICNS containers, and
go-opentype for the name plates.
It replaced a Python pipeline that needed Pillow, macOS sips and iconutil:
three dependencies, one of them an operating system. The same command now runs
anywhere Go runs.
gfx/svg deliberately does not render <text> — a rasteriser that silently
picks a font renders a different document on every machine — so each <text>
is converted to real glyph outlines before rasterising, in Inter, which is
embedded in go-opentype/fonts. The SVG that ships keeps its <text>: that is
the editable form, and a browser has the font stack it names.
It was not, for the first week. These assets were staged by hand with
qlmanage because Pillow was unavailable that day, which is why this
repository held three of the seven format families and avatars at 400 px where
the family uses 512.
The marks are shown on somebody else's page — the profile README at 36 pixels,
the landing page at 88 — where a blank or mis-sized file reads as a broken
image and nothing here would say so. So three things are checked on every pull
request, with no image library installed: every avatar is 512×512 and large
enough not to be a failed thumbnail (dimensions come from the PNG's IHDR chunk,
which is the first 24 bytes); every subject has the whole family matrix,
which is the check that would have caught a week of this repository holding
three format families out of seven; every per-repo SVG has an avatar and every
avatar an SVG; and every per-repo SVG is go-authn-mfa.svg with the name
changed and nothing else. The last one is the family rule, which was until now kept by
remembering it. font-size is exempt, because a long name is allowed to need a
smaller one.