Systems designer · 2026 · client work

Shipped, not claimed.

Every property this site asserts about itself is checked by something that exits non-zero when the claim stops being true. That is the whole difference between a quality pass and a quality system.

Design tokensBilingual architectureCI-enforced contrastNot deployed
Overview02

448 pages held together by rules a machine can check.

My role
Executed — design system and engineering
Dates, from version control
4 – 23 September 2026
Contrast matrix
57 pairs, 0 failing, generated 4 Sep 2026
Routes audited
218, verified against the rendered head
Hindi coverage
1,664 of 1,664 strings, 0 orphaned
State
Complete and building. Not deployed
Token architecture03

Nothing in the app touches a ramp.

Four raw ramps hold the palette as values. Everything in the application references a semantic token instead, so light and dark resolve correctly without a single component knowing which one it is in.

Layer one · ramps

brand — deep retail indigo

Authority without corporate coldness.

accent — marigold

Warm, Indian, celebratory. Never body copy.

neutral — warm stone

Deliberately warm; a blue-grey would pull the brand toward generic SaaS.

Layer two · semantic

--surface-ground / --surface / --surface-sunk

What a surface is for, not what colour it is.

--border-control

A decorative border carries no contrast requirement. A border that is the only thing identifying a control does — and these inputs sit white on white, so the border is it.

Theme states04

The unstamped root is the default.

Before
Most visitors arrive with no theme chosen, so nothing is stamped on the root element.
What forced it
A colour whose only definition sits inside a media query or a [data-theme] block is invisible in exactly that state — the classic unreadable-page bug.
The decision
Every token is declared in the bare :root block first, with a complete light palette. The two dark states only ever override: one for operating-system preference, one for an explicit choice.
What it changed
Dark is designed rather than inverted — the ground stays warm stone rather than black, surfaces lift instead of the text dimming, and both brand and accent step up the ramp so they keep working against a dark ground.
The accent rule05

Marigold is a surface, not a sentence.

The accent is the call to action, and at its core step it is unreadable as text on a light ground — the single most common way a warm brand colour makes a site inaccessible. The rule lives as a comment directly above the ramp it governs.

StepUseOn whiteVerdict
accent-500 · #F59E0BSurfaces only on light grounds2.15 : 1Fails AA as text
accent-700 · #B45309The only legal accent step for text5.02 : 1Passes AA
n-950 on accent-500The call-to-action button9.20 : 1Passes AAA

Quoted from the generated contrast matrix. Adding a colour pair to a component means adding it to the register, and a test fails CI if any pair drops below the ratio it needs.

Enforcement06

Four scripts that fail rather than report.

  1. audit:seo — 218 routes

    Checked against the rendered head, not by grepping source. On this site copy arrives through shared components and a translation layer, so the source says very little about what reaches the page — which is precisely why source-grepping audits pass on broken sites.

  2. audit:prose — coverage and orphans

    Reports Hindi coverage and orphaned strings as numbers. The orphan count is the price of using the English sentence as the lookup key, made visible so it cannot rot quietly.

  3. normalise-gallery — exposure across 23 photographs

    Exposure only, and it skips five designed announcement cards because mean luminance is meaningless for a poster.

  4. generate-cards — 22 social cards from a URL

    A route renders a branded card from query parameters in four kinds. Any field not passed renders an em dash, so a card is a form waiting for a fact rather than a guess.

What the system guarantees, and what it does not07

Properties of a repository, not of a running site.

Where it stands
  • Unique title and description on every route; canonical and hreflang on all 35 route groups
  • Exactly one h1 per page; alt text on all 54 images
  • Structured data across Organization, Course, Occupation, JobPosting, FAQ, Breadcrumb, Article and LocalBusiness
  • A copy-protection feature that needs two independent gates, refuses the client's live domain outright, and is off by default
Still open
  • Nothing has ever been deployed, so no property here has met real traffic
  • The audits were written and run by their author; no external accessibility audit was commissioned
  • Contrast is one success criterion: keyboard navigation, screen-reader semantics and focus order were not systematically audited
  • 1,664 translated strings is a coverage number, not a quality judgement — no native reviewer has signed off the Hindi
B-SIDEOff the record