Shared icon and logo set
The shared icon and logo set for Petr Balvín's projects, drawn in one house style so the whole collection reads as one collection. This file is the specification: the anatomy of the style, the binding rules every icon and logo follows, and the process for adding new material.
Layout
svg-assets/
├── README.md this specification
├── LICENSE CC BY-NC 4.0, the legal code
├── icons/ finished icons, one per project
│ ├── gasm-devkit.svg
│ ├── interpres.svg
│ ├── scripts.svg
│ ├── tensor.svg
│ ├── volumen.svg
│ └── xstd.svg
└── logos/ project logos, reserved and empty for now
Icons live in icons/ and carry nothing but the project's name; the
-icon suffix drops when a file moves in.
The house style
Four icons are the template every other icon follows: icons/gasm-devkit.svg, icons/scripts.svg, icons/xstd.svg and icons/tensor.svg. Each is a rounded badge in one hue family carrying a single flat motif, with a thin inner border, a quiet backdrop, and a restrained nod to the project's identity. The measured values of all four, for copying:
| Icon | Badge gradient, top then bottom | Border tint | Ink | Accents | The nod |
|---|---|---|---|---|---|
| gasm-devkit | #12212E, #060B12 |
#1D3A4B, opacity 0.9 |
#F2FAFD strokes |
#00ADD8 halo, #3BC9ED to #0098C0 chip stroke, #6FC9E4 subtext |
MOVQ BX, AX hand-drawn on a chip |
| scripts | #A61C4A, #4C0519 |
#FDA4AF, opacity 0.45 |
#FFE4E6 window and prompt strokes |
#FCD34D dot and cursor |
the terminal prompt with its amber cursor |
| xstd | #1fb6dd, #007a99 |
#B3ECFB, opacity 0.5 |
#007a99 on white |
#d9f4fc slabs |
the pulled-out C block |
| tensor | #7C3AED, #4C1D95 |
#A78BFA, opacity 0.45 |
#F5F3FF cube faces, #4C1D95 lattice |
#F59E0B, #00ADD8 |
the Go cyan cell on the cube's left face |
The rules
These bind every icon and every logo in the set. A file that breaks one is not part of the set, whatever its filename says.
Canvas
- One
viewBox="0 0 512 512"withwidthandheightof 512, androle="img"witharia-labelledby="title desc". - Nothing is drawn outside the badge; no clipping tricks, no overflow.
- No external references of any kind: no CSS files, no images, no
fonts, no
@import. The file stands alone.
Badge and background
- The badge is one
rectof 512 by 512 withrx="112", filled by a vertical two-stop gradient (x1="0" y1="0" x2="0" y2="1"), the lighter stop on top, the deeper stop at the bottom. - One hue family per project, and one project per hue: two icons in the set never share a hue family. The hue carries from the icon to the logo when a logo arrives.
- Gradients belong to the badge alone. The motif itself is flat.
The border
- Exactly one inner border: a
rectatx="1.5" y="1.5"of 509 by 509 withrx="110.5",fill="none",stroke-width="3". - Its colour is a lighter tint of the badge hue at an opacity of 0.4 to 0.6; on a near-black badge a near-background tint at up to 0.9 is the gasm-devkit variant of the same rule.
The backdrop and the shadow
- At most one soft radial halo behind the motif, centred, radius at most 230, peak opacity at most 0.15; or none at all.
- At most one drop shadow, on the motif group only:
feDropShadowwithdyof 8 to 10,stdDeviationof 10 to 12, a flood colour from the deep end of the badge hue family, opacity 0.35 to 0.5.
The motif
- One idea per icon. The motif fills roughly the middle 320 pixels; outside 96 to 416 on either axis only badge, border and halo live.
- Flat fills and strokes only. Stroke caps and joins are round, and stroke widths sit between 5 and 8.
- Two accent colours at most beside the ink. Prefer one warm and one cool accent; never a third.
- Every icon carries one small nod to the project's identity: a hexagon for IPv6, a Go cyan cell, a pulled-out C block, hand-drawn mnemonics. One nod, not a second motif.
Text
- No font is ever loaded. Lettering is drawn as stroke paths defined
in
defsand placed withuse, as the gasm-devkit mnemonics are.
Metadata and language
- Every file opens with a
titleand adesccarryingidvalues that the root element references. The title names the project and its purpose in one line; the desc describes the drawing in one factual sentence. - British English everywhere, and no dash as punctuation: a comma, a semicolon or a full stop joins the clauses instead.
Before an icon lands
- The file is XML-clean and renders without warnings at 512 and at 48 pixels:
magick -background none -density 96 icons/NAME.svg -resize 512x512 /tmp/check512.png
magick -background none -density 96 icons/NAME.svg -resize 48x48 /tmp/check48.png
- At 48 pixels the motif still reads as its idea: a viewer names the shape, not the noise. The accents keep their contrast against the badge at both sizes.
- The hue is new to the set, the nod is present, and this file's icon table gains a row in the same change.
Logos
logos/ is reserved for the projects' logos: a wordmark or monogram
on the same badge geometry, in the same hue the icon chose, under the
same metadata, border and licence rules. A logo carries the project's
name where an icon carries only its idea. Nothing has landed there
yet.
Icons
| File | Project |
|---|---|
icons/gasm-devkit.svg |
gasm-devkit, tooling for Go Plan 9 assembly |
icons/xstd.svg |
xstd, the extended pure-Go standard library, what is always needed and never in stdlib |
icons/tensor.svg |
tensor, the scientific computing library for Go |
icons/volumen.svg |
volumen, the file-based Markdown blog engine |
icons/scripts.svg |
scripts, a DevOps toolbox of standalone Perl scripts |
icons/interpres.svg |
interpres, TOML 1.0 parser for Go |
Licence
The icons and logos are © 2026 Petr Balvín and licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0): anyone may share and adapt them for noncommercial purposes with attribution. The full legal code is in LICENSE, and a human-readable summary sits on the Creative Commons site.