Skip to content
Gua

How it’s built

The stack, the light, the checks and the budgets behind this site.

Stack

Stack

  • Astro, static: HTML and CSS first, scripts only where something is interactive
  • Tailwind v4 with its default palette, radii and type scale removed, so only the tokens exist
  • Mona Sans, one variable font file, set at two widths
  • three.js for the scene, loaded after the text has painted (arrives in P2)

The hero

A hero that fixes itself.

The hero opens with the flaws an audit finds in products as they ship, then fixes them one at a time: type, edges, contrast, target, keycaps. The labels on it are measured from the page as it renders, not written by hand.

Replay it on the home page

Checks

Checks

  • Contrast measured against the colour each text actually sits on, with margin over AA
  • Body text at 16 px or more, and 44 px targets on touch screens
  • Interface motion between 150 and 250 ms, and none under reduced motion
  • No sideways scroll from 360 to 1280 px, and axe clean on every page
  • Page weight, load time and layout shift held to the budgets below on every change

Budgets

Budgets

JavaScript before the scene
≤ 30 KB gzipped
This visit: —
The scene, loaded after the text
≤ 220 KB gzipped
This visit: —
Fonts
≤ 2 files, ≤ 120 KB
This visit: —
Largest contentful paint, mid-range phone
≤ 1.8 s
This visit: —
Layout shift
≤ 0.02
This visit: —

Type

Type

Mona Sans by the Mona Sans Project Authors, under the SIL Open Font License 1.1.

Inspect this page
Your call: review a card
Home
Offers
Polish Sprint1–2 weeks
Launch Site2–4 weeks
Product UI Build4–8 weeks
How it’s built
Sources
Delivery
About
Contact

Inspect

Largest paint
—
Layout shift
—
Slowest interaction
—
Script before the scene
—
The scene
—
Fonts
—