rosenbohm.dev

Design kit

Every element the skeleton declares, in one place. Change the design system in the controls beside the samples and this page is the proof of what changed: the markup is identical under every one of them.

Type

The whole scale, in the order it is used.

A heading, set in the display face

The body face is the system stack, so text renders natively at any size without a second download. Only the display face is fetched, because it sets the first thing anyone reads and the fallback for it is visibly wrong.

This paragraph exists to run past a single line, so line height, measure and the gap between paragraphs can be judged against each other rather than guessed at. A design system that has only ever been tested on short strings has not been tested. A link sits inside running text and has to stay legible without shouting; a fragment of code has to sit on the same baseline as the words around it.

  • An unordered list, for things with no order
  • A second entry, longer than the first, so the indent and the wrap can both be seen at once
  • A third
A quotation, which is the one place the page speaks in a voice that is not its own and should look like it.

Controls

Everything that takes input. None of it is wired to anything.

A notice, which says what happened and what to do about it.

Marks

The small pieces that carry state.

Not deployed Operator Not answering /some-applet

Declared state and observed state are different facts and are marked as such: "not deployed" is a decision, "not answering" is a symptom.

The introduction

The front page's own blocks: the offer cards and the engagement steps.

  • An offer

    One kind of work, stated as a thing that gets built rather than a capability. Long enough to wrap, so the card's measure can be judged.

  • A second offer

    Shorter, so uneven card heights can be seen at once.

  1. First step

    The steps are an ordered list and the numbering is content: each design system draws its own counters from it.

  2. Second step

    A second entry, so the rhythm between steps is visible.

The rail

The launcher's own structure, with one of each state.

rosenbohm.dev

The palette

The current seed, and every hue derived from it.

  • Seed
  • Match
  • Counter
  • Complement
  • Warm
  • Cool

Only the first of these is chosen. The rest are calculated from it by the harmony rule, in CSS, so moving the hue slider moves all six together.

The background

Four axes, and the reason there are four.

The background is not one setting. What is drawn behind the page and what that does over time are different questions, and answering them with one control is what forces a design system to ship a still copy of every pattern it owns. Here they are separate: pick any appearance, then pick how alive it is, and the two do not know about each other.

  • Appearance is the pattern alone. Each one reads the palette, so none of them carries a colour that can clash with the one you chose.
  • Animation is three behaviours - its own clock, the scrollbar, and the pointer - named as five levels. They reach the stylesheets as multipliers, which is why Still needs no separate stylesheet: every distance is multiplied by nothing.
  • Intensity is amplitude, not a second switch. It scales how far the movement goes and how quickly, and at Still it changes nothing at all.
  • Scroll is the one behaviour that has a direction. Sink sends the pattern down against the text, Lift carries it up with the text but slower, and the two dials beside it set how far all of it travels and how much the near depths outrun the far ones. At no separation they travel together and the depth collapses to a single plane.
  • Pointer is how the pattern acknowledges the cursor: a soft colour shift where it rests, and at the top level a slow wave from the same spot. Nothing chases it. Reactive is the separate case where the scene itself eases out of the pointer's way.

Every appearance answers the scrollbar, each depth by its own amount, and two of them are built around it: Tiers and Haze draw horizontal ranks that separate as the page moves, and can travel much further than the rest because a pattern that repeats along the page has no edge to run out of. Some appearances have more behind them than a gradient. Parallax draws a chosen set of line art at four depths, panning sideways on its own clock and sliding vertically with the scroll; the art is a mask, so the palette colours it and a whole set costs one stylesheet and no extra request. Particles, Code and Bench are one machine wearing three finishes - a field of drifting marks with a spring under each one, pushed aside by the pointer and settling back. Nothing here loads a framework, and the only scripts involved write numbers.

The empty space

Rest the pointer in here, and try typing in a field above.

Nothing in this box is clickable, which is the point: it is room for the backdrop to answer in. With a Pointer level on, the pattern shifts where the cursor rests; under Reactive, the whole scene eases out of its way. Typing in any field above stills the backdrop until you stop.