+234 Design System

Plus234Feed Design System

Editorial tokens, a named type scale and the components a news intelligence platform needs. Newspaper hierarchy, accessible colour in both themes, one component per job.

Start here

Why this exists

The frontend had 252 component files and 40,638 lines of TSX, but only 25 shared components. Measured on 4 November 2026:

page.tsx files bypassing the shared layout92 of 108
Files re-implementing an article card47
Radius variants in use11rounded-lg 447, rounded-xl 354, rounded-full 289
Ad-hoc text sizes in use9text-sm 1,019 and text-xs 720, so the site is mostly 12 to 14px
Hardcoded uses of one green27
Variables used but declared nowhere5a live bug, not a matter of taste

That last row was real breakage. --text-muted (42 uses), --border (36), --bg-elevated (13), --bg-secondary and --bg-hover were referenced with no fallback and declared in no stylesheet, concentrated in the price and cost-of-living pages.

What the traffic said

Over the 28 days to 3 November 2026: 1,612 users, 1,602 of them new, 1.17 pages per session, 75 per cent bounce. Organic search visitors spent 114 seconds on the page and then viewed 1.18 pages. They read, and then found nothing to do next.

The homepage was 148 of 1,790 sessions, 8 per cent. Almost everyone arrives on an article. That is why the article template leads this work and the homepage does not, and why the next step component exists at all.

The shape of it

tokens/core.tokens.json          159 tokens, W3C DTCG format
tokens/themes/dark.tokens.json   colour only, enforced by a test
scripts/build-tokens.mjs         emits build/*.css, fails on unreadable colour
scripts/build-docs.mjs           site/pages/** -> docs/**
src/components.css               every rule reads a token
src/fonts/                       Charter, four faces, 64KB
test/tokens.test.js              13 checks

Forty-four colour pairs are checked in each theme, 88 checks in all, and the build exits non-zero on any failure. The first run caught three real problems, two of them dark-theme only.