Johan Alphonso Braga
Typing test⌘J
AboutProjectsReadingStackDesign

Utilities

Ask anything Typing test

Elsewhere

GitHub

Design system

42 tokens

The tokens this site is actually built from, read out of the stylesheet at build time.

Nothing here is transcribed. The page parses site/assets/style.css during the build, so a token that is renamed or removed changes this sheet in the same pass. The specimens are live elements, not screenshots: resize the window and the type scale moves, because every step is a clamp rather than a fixed size.

Type scale

A perfect fourth at the top of the viewport range easing to a minor third at the bottom, so the headline cannot bully the rest of the page on a phone.

Aa I make projects
--step--2 --t-micro clamp(0.69rem, 0.67rem + 0.11vw, 0.75rem)
Aa I make projects
--step--1 --t-small clamp(0.83rem, 0.79rem + 0.20vw, 0.94rem)
Aa I make projects
--step-0 --t-body clamp(1.00rem, 0.95rem + 0.24vw, 1.13rem)
Aa I make projects
--step-1 clamp(1.20rem, 1.11rem + 0.43vw, 1.44rem)
Aa I make projects
--step-2 --t-item clamp(1.44rem, 1.30rem + 0.71vw, 1.84rem)
Aa I make projects
--step-3 clamp(1.73rem, 1.50rem + 1.13vw, 2.36rem)
Aa I make projects
--step-4 --t-sec clamp(2.07rem, 1.72rem + 1.76vw, 3.05rem)
Aa I make projects
--step-5 clamp(2.49rem, 1.95rem + 2.68vw, 3.98rem)
Aa I make projects
--step-6 clamp(2.99rem, 2.18rem + 4.02vw, 5.23rem)
Aa I make projects
--step-7 --t-hero clamp(3.58rem, 2.37rem + 6.05vw, 6.95rem)

Colour

Each token in light and dark. Both themes are audited against WCAG AA on every build by npm run contrast.

--bg #fcfbf9#0d0d0f
--bg-2 #f5f3ef#141417
--bg-3 #edeae4#1c1c21
--text #14140f#eceae5
--muted #63615c#9d9a94
--faint #726f66#8a877f
--line #e2ded6#24242a
--line-firm #cdc8be#34343c
--accent #1b4fd8#89a9ff
--accent-bg #e8eeff#16203a

Components

Button

Chip

Case study Live

Eyebrow

04   STACK

Lede

Only things I have actually shipped with.

Row

2026

A project

One sentence a recruiter can skim.

WebGPU

Stat

57projects shipped
24live in the browser

Everything else

--sans "Instrument Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif
--serif "Newsreader", Georgia, "Times New Roman", serif
--mono "JetBrains Mono", ui-monospace, "Cascadia Mono", Menlo, monospace
--pad clamp(1.15rem, 4.5vw, 4rem)
--maxw 1180px
--readw 68ch
--ease cubic-bezier(0.2, 0.8, 0.2, 1)

The header's own height, named once so anything that has to clear it (the sticky rail, scroll-margin on anchor targets) stays correct if it ever changes.

--hdr-h 3.4rem

Named roles, so components ask for meaning rather than a number.

--t-hero var(--step-7)
--t-sec var(--step-4)
--t-item var(--step-2)
--t-body var(--step-0)
--t-small var(--step--1)
--t-micro var(--step--2)

Line heights tighten as type grows, which is how it stays readable at both ends instead of loose at the top and cramped at the bottom.

--lh-display 1.02
--lh-heading 1.15
--lh-body 1.65
--lh-tight 1.35

Tracking follows size in the opposite direction.

--tr-display -0.032em
--tr-heading -0.018em
--tr-body -0.003em
--tr-caps 0.16em