Cut into parts.
The shader builds the mark from six blocks: the ball, the ring in four arcs, and the disc. The ball orbits the ring, and the ring and disc reshape around it.
The devutils mark is a Q that became a graph node.
It was drawn for ATFQ, and here it is rendered as glass in a shader.
WHERE IT COMES FROM
The mark was first drawn for ATFQ, “Ask The F*cking Question”, a collaborative computer-science learning platform built around the questions to ask before the answers. The brand concept, the logo, the interface mood and the Figma prototype were made in-house. atfq the terminal companion inherited the name, and devutils inherited the mark.
THE MARK / ANATOMY
Four parts, each with one meaning. The tail of the Q is not a stroke: it is a second circle linked to the first, like an edge in a graph.
The outer circle is the question at the centre of the mark: open, universal and accessible.
Instead of a classic tail, a small circle attaches to the ring. One good question connects many areas of computer science.
The large inner circle makes an eye shape: vision and focus, the ability to see through complexity.
The circles sit on an orbit, which suggests discovery: learning as a path you follow, not a pile you accumulate.
THE GLASS / RENDERED, NOT DRAWN
On the site, the mark is not an image. It is a slab of glass, raymarched in a plain WebGL shader, drawn only in the square around it, and refracting the lights behind it.
The shader builds the mark from six blocks: the ball, the ring in four arcs, and the disc. The ball orbits the ring, and the ring and disc reshape around it.
Every shape moves slowly on its own. Near the pointer, the blocks turn into bubbles and drift away from it, then settle back.
It sits on the hero, slides behind the frosted panels as the page scrolls, and returns for the closing call to action.
Without WebGL, the static mark.svg takes its place. With reduced motion, the glass stays still. The page never depends on the 3D.
ONE SHAPE PER TOOL
Each tool page renders its own glass shape, with the same material, light and motion rules. The shape shows what the tool does.
The original Q, for the org and for atfq: ball, ring and disc, pushed away by the pointer.
A sphere inside three rings, each turning on its own axes. Near the pointer they line up face-on and concentric, like a lens coming into focus.
Nine glass cubes, one per target, and a bead (your program) that hops from one to the next. The pointer spreads the grid and lifts the cube under it.
Five packages joined by rods, drifting. Near the pointer they stack into one neat column and the rods disappear.
One glass cube that breathes. Near the pointer, instances bud from it like liquid, drift apart, then melt back into the one definition.
COLOUR / ICE TO VIOLET
The light comes from one ramp, ice to violet, used for the mark’s gradient and the tool colours. The tools sit on it in the order of the flow, from Omniscient at the kernel end to VMAnyware at the homelab end.
Ground and text
#050507Page background and theme colour#f0f0f5Headings and body#9696a5Secondary text#82e9ffFocus rings, prompts, accents#b7a0ffSecond accentThe mark’s gradient
#e6fbffTop left of the mark#c9d4ffMiddle stop, at 55 %#c3a8ffBottom right of the markThe tools, in the order of the flow
#9cf5ffObserve#8fdcffExplain#96b9ffVerify#aea0ffReconcile#c38affProvisionTokens in src/style.css; tool colours in src/tools.ts, the one file every page reads.
TYPE AND SURFACES
The same art direction as Omniscient’s first site: sans-serif for what you read and monospace for what the machine says.
| Element | Rule | Where |
|---|---|---|
h1, h2 | Inter, tight negative tracking: semibold titles, medium section headings | Hero and section titles |
eyebrow | Monospace, 10–11 px, uppercase, wide tracking | Section labels, card indices (01 / LABEL), HUD text |
code | System monospace, ui-monospace first | Commands, terminal captures, values |
.glass | Frosted panel: backdrop blur, 1 px light border, soft light following the pointer | Cards, terminals, tables, install blocks |
radius | 18 px panels · 12 px controls · 6 px chips | Every surface |
motion | Reveal on scroll, staggered by 80 ms; none with reduced motion | Every section |
Write backdrop-filter without its -webkit- twin: the CSS minifier adds the prefix itself, and given both it keeps only the prefixed one, which Chrome ignores.
USE THE MARK
Use the mark from one source, public/mark.svg, everywhere the logo appears. Do not copy it.
<img class="logo-icon" src="/mark.svg" alt="" />