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.
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
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.
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.
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.
| Step | Use | On white | Verdict |
|---|---|---|---|
| accent-500 · #F59E0B | Surfaces only on light grounds | 2.15 : 1 | Fails AA as text |
| accent-700 · #B45309 | The only legal accent step for text | 5.02 : 1 | Passes AA |
| n-950 on accent-500 | The call-to-action button | 9.20 : 1 | Passes 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.
Four scripts that fail rather than report.
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.
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.
normalise-gallery — exposure across 23 photographs
Exposure only, and it skips five designed announcement cards because mean luminance is meaningless for a poster.
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.
Properties of a repository, not of a running site.
- 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
- 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