frustrated labs
01 / 11Methuselah v2
Frustrated Labs · design system

Design system

The mark, colour, type and components every Frustrated Labs page is built from. It’s all live: switch the theme at the top and everything follows.

The mark

Methuselah v2. Two snakes build it, then it bends into ten moods and comes back. Pick one to send the logo above there.

frustrated labs
frustrated labs
16
24
34
48
64
App icon
frustrated labsHeader lockup

Its sizes, modes and the code to put it on a site are on the mark’s own page.

Colour

Ink on paper and one red. Dark swaps the grounds; the red stays #FF4433 in both.

Page--bg · The ground every page sits on.
Ink--fg · Text, the mark and the primary button.
Panel--panel · Raised things: tiles, cards, fields.
Well--card · Recessed groups, like the Why on a product card.
Line--line · Hairline borders and section rules.
Muted--muted · Paragraphs and secondary text.
Fume--fume · The one red per view: the current item, an error, the primary button’s glyph.
Fume text--fume-text · Red text under 24px.

Type

Four families, four jobs. Weights 400 to 600, and never italics.

Sora 600Headings. Display 64 · title 44 · heading 21 · subheading 17.

Frustration-driven development.

Instrument SansReading. Lead 18 · body 15 · small 14.

Paragraphs are muted and at most 56 characters wide. Headings and the one word that matters in a line take the ink.

IBM Plex MonoThe machine voice: labels, controls, code, numbers, nav.

Motion mark · v1.305 / 11Home key

Martian MonoThe wordmark, and nothing else.

frustrated labs

Components

Square corners, hairline borders, no shadows. Point at them and click them.

ButtonOne primary per view; its red glyph is the point. The sweep’s outline turns red, with a highlight running round it.
Segmented controlThe only pill in the system. This one switches the page’s theme.
Tag and life statusTags label things in muted mono. A life status is a Game of Life pattern in the red: a glider has shipped, a blinker is busy.
Motion mark · v1.3One lap · 23.2 sApp icon
ShippedIn progressStableBlockedArchived
Badge and ticketBadges carry the version, Beta and the changelog. A ticket is a punched stub: a price or a release.
v1.0.3BetaChangelog
$39Lifetime$20YearlyJan 2027Release
Section headA plain heading and one muted line.

Eleven moods

Pick one to jump there.

WellA recessed group on the card colour, like the Why on a product card.
Why

You find out about the usage limit by hitting it.

TileA panel with a hairline border: a mood glyph, a short title and one or two lines. A tile that links sweeps its outline on hover, like the product cards.

Square corners

Rounding lives only inside the mark and on app icons.

One red per view

It marks the current item, an error or the primary glyph.

Borders, not shadows

Depth comes from the step between paper and panel.

File rowA download row. The whole row is the link.
Attribute tableA two-column reference. Keys in mono; the values you’d type in bold.
sizeA px number or any CSS length. Default 48px. Plain CSS width and height work too.
themeauto (default) takes the text colour. light and dark force ink or paper. system follows the device setting.
modeloop (default) · hover rests on Methuselah and plays while pointed at · once plays one lap, then rests · static never moves.
intronone starts with the mark already built. By default the two snakes build it when the logo first appears.
stateHolds one mood with its small idle motion.
Code blockAt most one red keyword: the thing you came for.
<!-- once, anywhere -->
<script src="/js/frustrated-logo.min.js" defer></script>

<!-- in the header; the static SVG inside shows until the script loads, and without JS -->
<a href="/" class="fl-brand">
  <frustrated-logo size="34" mode="hover" intro="none"><img src="/frustrated-labs-mark-auto.svg" width="34" height="34" alt=""></frustrated-logo>
  frustrated labs
</a>

// a mood on cue, for example on a 404 page
document.querySelector('frustrated-logo').goTo('gritted');

UI kit

Controls for apps and tools, from the same tokens. They work: click, type and flip them.

Checkboxes and radios

Toggles

Tags and badges

Fields and menus

Feedback

Navigation