Design system  /  Identity  /  System

Why these colours, this typography, this hex.

Every system choice has a reason. If something feels arbitrary, read this; it isn't.

Colour · why these and not the obvious alternatives
Primary

Cobalt blue #21468B

The official blue of the Dutch flag, heavier than legacy SaaS blues, lighter than bank navy. It reads trustworthy and Dutch without becoming nostalgic or government grey. Fills 20% of each surface; the proportion is the rule, not just the hex.

Considered: standard navy (#1E3A8A, too SaaS-tech blue) · Inter blue (#3B82F6, too generic). Cobalt has Dutch identity baked in.
Accent · 8% rule

KNVB orange #F36C21

The orange of the Dutch football team: warm, instantly recognisable as Dutch, but not the Rijkshuisstijl orange (which would drag us into government-document territory). Capped at ~8% of each surface. Never as a primary fill, never as a button background.

Considered: Rijkshuisstijl orange (#CB571B, too municipal). Pantone Reflex Orange (#FF5800, too loud). KNVB sits at the warm-Dutch midpoint.
Tertiary · sparing

Vermilion red #AE1C28

The red of the Dutch flag. Rare: for status (errors, deletions, banned-word callouts) and for the rare moments we want flag energy without leaning on orange. Capped at ~2% of each surface.

Considered: standard error red (#DC2626, generic). Vermilion has Dutch-flag warmth without being aggressive.
Guest · ConNext context only

Nextcloud blue #0082C9

Nextcloud's official blue. A guest colour in our system, used only where the context is ConNext-specific: the "Next" in the wordmark, the workspace hex in platform diagrams, brand quotations in copy. Never on functional "next" (next page, next year). Always solid #0082C9, never as a gradient.

Rule: if you're styling a generic UI element, this isn't your colour. If you're quoting Nextcloud the platform, it is.
Position · against neighbouring Dutch palettes
Rijkshuisstijl
#154273
Conduction
#21468B
PostNL
#2065A8
ABN AMRO
#003366
ING
#FF6900

Cobalt sits deliberately between government blue (too dark, too institutional) and corporate blue (too generic, too SaaS). Heavier than commercial blues, lighter than national-government blues: the spot for a Dutch open-source product company.

Typography · Figtree + IBM Plex Mono
Figtree · headings & body Round, calm, humanist sans-serif 400 · 500 · 600 · 700
Body + heading

Figtree

Round terminals, neutral character, a wide weight range. Reads calm, not corporate-cold. Open Font License (OFL), so bundleable. Works from 12px up to display sizes without changing character.

Considered: Inter (too SaaS, terminals too pointy). Roboto (too Google). Manrope (too geometric). Figtree's roundness gives the brand its calm.
$ cookies --reconfigure # IBM Plex Mono → for code, eyebrows, meta
Code + meta

IBM Plex Mono

Generous x-height, readable at small sizes, has character without becoming cute. For code blocks, eyebrows ("THE PLATFORM OVERVIEW"), code-style metadata, and our cookies CLI prompt. OFL licensed.

Considered: JetBrains Mono (slightly too techy). Source Code Pro (too neutral). Plex Mono has the right mix of authority + warmth.
Aa 9-step ramp · 12 → 48px + display
Why no display font

One family, more weights.

We don't ship a separate display font. Figtree at 700 with negative letter-spacing handles every heading up to 64px without invoking a second typeface. Less to load, more consistency, fewer foundry licensing questions.

Decision: a display font is a second brand voice. We have one. Figtree carries the whole ramp.
No ligatures No alternates No optional stylistic sets
Typographic discipline

OpenType features off by default.

Ligatures, swashes, alternates, all off. Why? They render inconsistently across platforms (especially WCAG screen readers + older PDFs) and pull the eye in ways that hurt scannability. Web-rendered Figtree always reads as Figtree.

Exception: we enable tabular-nums for numeric tables. Otherwise font-feature-settings: "liga" 0; on the root.
Hex motif · always pointy-top, never flat-top
POINTY-TOP · the only hex we ship
The shape rule

Pointy-top, every time.

Nowhere in the brand do flat-top variants appear. The pointy-top hex runs from app icons to bullets, status badges, pagination: anywhere a shape means something. Functional containers (buttons, inputs, cards) stay rectangular. Hexes point. Rectangles do.

Why not flat-top? Flat-top hexes read as honeycomb, food-tech, biology: the wrong industry signal. Pointy-top reads as crystal, modular system, purposeful construction.
APP ICON
STATUS
PAGINATION
RV
AVATAR
The hex as a system

Bullets, badges, avatars, dividers.

A logo wrapper is only the start. The hex appears as a bullet on every list, a status indicator next to every app, an avatar wrapper for every team member, a divider between sections, a timeline node in step diagrams. Wherever a shape means something, the hex is that shape.

Where it doesn't appear: buttons, inputs, cards, modals, tables. Rectangles do the work; hexes point.
Flat-isometric hex-prism style for every illustration. No people, no faces, no mascots. No stock photos, no 3D renders, no gradient backgrounds. Only flat colours; even Nextcloud blue is always solid #0082C9.
Illustration direction

Flat-isometric hex-prism. Reference: Honeycomb.io.

Hex prisms: the same pointy-top hex extruded with a slight isometric depth, flat shadow, no Pixar lighting. Every illustration in the system uses this geometry, with pastel category palettes per face. Reference: Honeycomb's platform-overview diagram.

What we don't use: photography, 3D renders, mascot figures (OpenPeeps, Tom-Froese style), gradient backgrounds, neon lighting. The geometry carries the image; we don't dress it up.