Get in touch
Design Systems · Design Tokens

lexicon defines the design language once — an OKLCH-derived token architecture with a React library, a Tailwind preset, a Figma plugin and a CLI conformance validator. The four public sites are its cross-platform proof: parlancelabs.net, thepace.io, pacerfitness.com and thepace.me, each running the same token discipline, each wearing its own accent and voice.

Design systemsDesign tokensOKLCHAccessibilityMulti-brand
One OKLCH-derived token methodology, defined once and expressed across a product, a studio, a consumer brand and a personal site
Role
I designed and built all of it, solo and in first person: lexicon itself — the OKLCH derivation engine, the three-layer token architecture, the 122-component React library with zero runtime dependencies, the Tailwind preset, the Figma plugin and the CLI conformance validator — and the four public surfaces that carry its methodology to launch.
Project type
lexicon design system · four-surface cross-platform proof
Featured outcome
Four surfaces , Product · studio · consumer · personal

A design system is only worth the name if it holds up more than one thing. I maintain all of this alone — there is no team to catch drift, no review gate between a careless value and four live sites — so the discipline had to live in the system itself, not in my vigilance. lexicon is that system: one way to derive colour, one accessibility floor computed in lexicon's engine and carried into each site's own CSS, and one accent-swap model. The four public sites carry the method, not the code — none of them imports lexicon as a package, which is what lets each move at its own pace while the estate still reads as a single hand.

The Estate: hero showcase
Problem

The challenge

The problem sits underneath all four sites at once: how do you make a product, a studio, a consumer brand and a personal site feel related without making them identical, when one person maintains all of them and there is no team to catch drift? A shared component library would couple them — one release could break four sites in a single commit, and none could move at its own pace. Four hand-rolled designs would drift apart. The token layer is where colour, type, spacing, motion and the accessibility floor actually live, and it was being re-decided from scratch on every site, in different colour spaces, with the contrast floor left to chance.

The Estate: problem visual
Research

Discovery & research

Before writing a line of token CSS, I treated the estate as a research problem: what do four independent sites actually need to share, and in which colour space should a system be defined so it survives translation to any platform? I audited each site's token layer and grounded the colour work in OKLab colour science, then codified the accessibility floor as something the engine measures rather than something I assert.

Dependency audit — grepped every site's package.json for a shared design-system dependencyRead each site's token layer (globals.css / tokens.css) and catalogued its semantic structureCompared colour spaces across the estate (grep for oklch versus hex/rgb authoring)Implemented and validated sRGB-to-OKLCH maths (OKLab) with an in-gamut chroma-reduction loopCodified a contrast floor via ensureContrast against the hardest surface, recording each pair's ratio
What I found · 05
01 The sites share a discipline, not a dependency

None of the four public sites installs a shared design-system package; each authors its own semantic tokens. Coupling them through a package would have let one release break four sites, so the shared layer had to be method, not code.

EvidenceA grep across every package.json — parlance, thepace.io, pacerfitness.com, thepace.me — returns no @lexicon dependency, and pacerfitness.com has no package.json at all. lexicon's name survives only as an internal label in a parlance stylesheet comment ("Theme the driver.js popover with Lexicon tokens").

02 Colour should be derived perceptually, then shipped resolved

Authoring in OKLCH makes lightness, chroma and hue behave predictably across a theme, but runtime oklch() is not the deliverable. lexicon derives in OKLCH and emits resolved hex/rgba.

Evidencesrc/lib/theme-engine/color.ts carries hand-rolled sRGB-to-OKLCH (OKLab) maths with an in-gamut chroma-reduction loop in oklchToRgb; base.css and dist-lib/tokens.css ship resolved custom properties, not oklch().

03 An accessibility floor has to be computed, or it drifts

A stated AA commitment is not a guarantee. The floor holds only when contrast is measured against the hardest surface a colour will sit on and recorded as a number.

Evidencederive.ts computes text and on-accent colours with ensureContrast(...) and records each ContrastPair's ratio and required minimum; parlance's tokens.css documents severity-high moving from 3.31:1 (failing) to about 4.9:1, and keeps --input darker than --border to clear WCAG 2.2 1.4.11's 3:1 non-text minimum.

04 One property can carry a whole identity

If accent and focus ring share a single hue and every accent shade derives from it, an entire brand swaps by moving one value — which is exactly what lets four sites diverge cheaply.

Evidencelexicon exposes a single --accent (with hover/active/deep/contrast/subtle/ring) flipped by a data-brand attribute and surfaced as a Tailwind utility; parlance's ring and accent both sit at OKLCH hue 285; thepace.me's SystemsLab rewrites --theme-accent at runtime across four brand chips.

05 Native is a translation problem, not a second codebase

CSS tokens do not cross to a native platform by themselves, but a format-neutral export and hand-matching a web accent to the platform's own make the translation cheap. Only one estate surface (pacer) is native, and lexicon ships no native SDK — this is translation, not a second codebase.

Evidencepacerfitness.com's coral #ff946b is hand-matched to the iOS app's AccentColor (sRGB 1.000/0.580/0.420); lexicon's theme engine serialises to W3C design-tokens JSON (Style-Dictionary compatible) alongside CSS, SCSS and WordPress theme.json.

Process

How I approached it

I started with discovery, not CSS. I audited the token layer of every site — reading each globals.css, grepping the dependency graphs, checking which colour space each one authored in. That confirmed the shape of the answer: the sites did not need to share code, they needed to share a method. So I built lexicon to settle the method once. Colour is authored and derived in OKLCH — I hand-rolled the sRGB-to-OKLCH maths from Ottosson's OKLab so every token is computed in a perceptual space — then resolved to plain hex and rgba before it ships, because runtime oklch() is not the point; the derivation is. The accessibility floor is computed, not asserted: the engine measures each text-and-surface pair against the hardest background it will sit on and records its contrast ratio. On top of that base sit a theme layer (light and dark, both first-class) and a brand layer (a single accent property). Then I expressed lexicon four ways — the product, the studio, the consumer brand, the person — each choosing its own accent and voice while carrying the same floor.

01

Discovery: audited every site's token layer — dependency graphs, globals.css, colour spaces

02

Chose methodology over dependency — a shared discipline, not a shared package

03

Built the OKLCH derivation engine (hand-rolled OKLab maths, in-gamut chroma-reduction loop)

04

Computed the accessibility floor into derivation — ensureContrast against the hardest surface

05

Layered the tokens base to theme (light/dark) to brand (one accent property, scoped to .lexicon-root)

06

Expressed lexicon across four surfaces, each with its own accent and voice

07

Shipped the system to five targets — lexicon, CSS, SCSS, W3C JSON and WordPress theme.json — plus a Figma plugin and CLI

The Estate: process visual
The Estate: key decision visual
Challenges

Trade-offs

The hard part was restraint. It would have been easier to publish lexicon as a package and make all four sites depend on it — but then a system release could break the product, the studio, the fitness brand and my portfolio in one commit, and none of them could move at its own pace. So I held the line at methodology: the sites share lexicon's discipline, not its code. The cost is that discipline is now a human responsibility, backed by a CLI conformance validator that flags off-token colour rather than a compiler that enforces it. And I have kept lexicon honest about its own maturity: it is pre-v1 (0.1.x), React-only, with the theme-creator's export program still gated behind a "coming soon" flag.

The Estate: solution detail
Solution

Final direction

lexicon is the deliverable: a three-layer token architecture scoped to its own .lexicon-root, a 122-component React library with zero runtime dependencies, a Tailwind preset that maps the whole scale onto utilities, a Figma plugin that runs the exact same derivation engine offline, and a CLI that scans a consumer repo for hardcoded, off-token colour. The four sites are its proof across platforms: parlancelabs.net, the design-to-code contract platform, in OKLCH violet at hue 285; thepace.io, the studio, in restrained indigo-violet, hosting the lexicon docs at thepace.io/lexicon; pacerfitness.com, the consumer brand, breaking to a coral matched by hand to the iOS app's accent colour (sRGB 1.000/0.580/0.420); and thepace.me, this portfolio, in the same indigo ink as the studio. One method, four accents, light and dark on every one, and an accessibility floor each of them carries — expressed in each site's own authoring (parlance in oklch(), the others in hex and rgb), because the discipline travels even when the colour space does not.

The Estate: final solution visual
Impact

Outcomes

The estate is one colour system, derived once in OKLCH, carried across four independent sites with no shared package to couple them and no team to catch drift. One person derived the system, computed an accessibility floor into lexicon's engine, and expressed the same token discipline across a product, a studio, a consumer brand and a personal site — parlance in OKLCH, the others in hex and rgb — with the OKLCH values ready to translate to native through a format-neutral export rather than a shipped native SDK. parlance, at the centre of the estate, is built to audit design files, code, live URLs and native apps against WCAG 2.2, WAI-ARIA 1.2, Section 508 and EN 301 549 — which makes the estate a natural first target for its own engine. But the point is lexicon: it is the reusable artefact, and the four live sites are the evidence the method holds across surfaces.

Four surfaces
Product · studio · consumer · personal
OKLCH-derived
One method, four accents
Five targets
lexicon · CSS · SCSS · W3C JSON · WordPress
AA contrast floor
Computed in the engine, targeted per site
The Estate: metrics visual
Across devices

One system, every screen

The design-to-code contract platform, in OKLCH violet at hue 285, with class-based light and dark via next-themes. It is also the engine built to audit the rest of the estate against WCAG 2.2, WAI-ARIA, Section 508 and EN 301 549.
parlancelabs.net — the productThe design-to-code contract platform, in OKLCH violet at hue 285, with class-based light and dark via next-themes. It is also the engine built to audit the rest of the estate against WCAG 2.2, WAI-ARIA, Section 508 and EN 301 549.
The studio's front door, in restrained indigo-violet authored in hex. It hosts the lexicon docs at thepace.io/lexicon and presents parlance and lexicon as the studio's work.
thepace.io — the studioThe studio's front door, in restrained indigo-violet authored in hex. It hosts the lexicon docs at thepace.io/lexicon and presents parlance and lexicon as the studio's work.
The pacer marketing site — the one surface that breaks the indigo family to a coral matched by hand to the iOS app's own accent colour, on the same data-theme light/dark discipline.
pacerfitness.com — the consumer brandThe pacer marketing site — the one surface that breaks the indigo family to a coral matched by hand to the iOS app's own accent colour, on the same data-theme light/dark discipline.
This portfolio, in the same indigo ink as the studio for deliberate sister-site parity, with a live accent-swap lab proving one hue can carry a whole identity.
thepace.me — the personThis portfolio, in the same indigo ink as the studio for deliberate sister-site parity, with a live accent-swap lab proving one hue can carry a whole identity.
The docs for the token architecture, React library, Tailwind preset, Figma plugin and CLI — pre-v1 and honest about it, with exports still gated behind a coming-soon flag.
lexicon — the system itselfThe docs for the token architecture, React library, Tailwind preset, Figma plugin and CLI — pre-v1 and honest about it, with exports still gated behind a coming-soon flag.

One derivation. Four surfaces. The system is the artefact; the sites are the proof it travels.

Jonathan Pace One OKLCH-derived token methodology, defined once and expressed across a product, a studio, a consumer brand and a personal site
The Estate: final showcase
Takeaway

The proof isn't that the four sites match; it's that one derivation reaches React, CSS and Figma, translates to a native palette, and carries an accessibility floor — with no shared package binding the four sites together. That is the estate: one method, four voices, and evidence that the system travels.

Next project

Nettaker

An iOS calculator for people weighing a move: enter a salary and a country and see real take-home pay, local cost of living, and which destination lets you keep the most — across 129 verified tax models plus honestly-labelled estimates everywhere else.

Open case study