One question.
Cut in glass.

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

Born as a question.
Kept as an instrument.

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.

Geometric clarity.
Only circles and tangent lines, so the mark scales from a 16-pixel favicon to the 3D hero without redrawing.
Open-source minimalism.
Clean and technical, in the visual language of the developer tools it sits beside.
Functional abstraction.
It still reads as a Q, and it also suggests a graph node, a technical diagram and an eye.

THE MARK / ANATOMY

A Q, a node,
an eye.

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 devutils mark: a ring with a satellite circle at its lower right, around a large disc
public/mark.svg · 62 × 62 · ice to violet gradient
  1. 01 / RING

    The question.

    The outer circle is the question at the centre of the mark: open, universal and accessible.

  2. 02 / SATELLITE

    A node in a graph.

    Instead of a classic tail, a small circle attaches to the ring. One good question connects many areas of computer science.

  3. 03 / DISC

    An eye.

    The large inner circle makes an eye shape: vision and focus, the ability to see through complexity.

  4. 04 / ORBIT

    Movement.

    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

A mark you can
push around.

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.

01 / SIX BLOCKS

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.

02 / THE POINTER

It answers only up close.

Every shape moves slowly on its own. Near the pointer, the blocks turn into bubbles and drift away from it, then settle back.

03 / THE SCROLL

It follows the page.

It sits on the hero, slides behind the frosted panels as the page scrolls, and returns for the closing call to action.

04 / NO WEBGL

It degrades to the SVG.

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

Same glass.
Different instrument.

Each tool page renders its own glass shape, with the same material, light and motion rules. The shape shows what the tool does.

?01 / ATFQ · HOME

The mark

The original Q, for the org and for atfq: ball, ring and disc, pushed away by the pointer.

◎02 / OMNISCIENT

A lens

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.

⧉03 / DISTROPROOF

A target matrix

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.

▥04 / XPAC

A graph becoming a plan

Five packages joined by rods, drifting. Near the pointer they stack into one neat column and the rods disappear.

◰05 / VMANYWARE

A definition and its instances

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

Near-black ground.
Cyan to violet light.

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

The mark’s gradient

The tools, in the order of the flow

Tokens in src/style.css; tool colours in src/tools.ts, the one file every page reads.

TYPE AND SURFACES

Tight headings.
Monospace instruments.

The same art direction as Omniscient’s first site: sans-serif for what you read and monospace for what the machine says.

ElementRuleWhere
h1, h2Inter, tight negative tracking: semibold titles, medium section headingsHero and section titles
eyebrowMonospace, 10–11 px, uppercase, wide trackingSection labels, card indices (01 / LABEL), HUD text
codeSystem monospace, ui-monospace firstCommands, terminal captures, values
.glassFrosted panel: backdrop blur, 1 px light border, soft light following the pointerCards, terminals, tables, install blocks
radius18 px panels · 12 px controls · 6 px chipsEvery surface
motionReveal on scroll, staggered by 80 ms; none with reduced motionEvery 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

One file.
Every page.

Use the mark from one source, public/mark.svg, everywhere the logo appears. Do not copy it.

IN A PAGE
<img class="logo-icon" src="/mark.svg" alt="" />
Mark and site under MIT / Apache-2.0 · first drawn for ATFQ