How this site is made.

Last updated 13 October 2026. Version 5, Poster.

Typography

Display
Mona Sans Variable at wght 780 to 880, condensed on the width axis (wdth 78 to 92), tracked tight
Second voice
EB Garamond Variable italic, one or two words per major headline
Body
Mona Sans Variable, wght 400
Files
Two self-hosted latin woff2 files from Fontsource (OFL): Mona Sans (wght 200 to 900, wdth 75 to 125) and EB Garamond italic (wght 400 to 800)
Display metrics
The same two files declared again with ascent and descent overrides, so poster leading never stacks phantom line boxes

Palette

Bone
#EFE9DD
Ink
#151410
Teal
#1F5F5B
Sage
#C7D3C9
Print paper
#FBF8F1

Stack

Framework
React 19, Vite 6, TypeScript, with a small history router of its own
Styling
Plain CSS with custom properties: one colour field per section, square corners
Motion
GSAP with ScrollTrigger, Lenis smooth scroll, CSS for the first-paint entrance
Prerender
Every route rendered to static HTML at build time from the same components
Hosting
Coolify on Onidel Cloud (Sydney VPS)
Forms
Resend (transactional email)
DNS
Cloudflare
Repo
keitaemsden-lab/emsden-studio

Brand assets

Wordmark
Primary footer setting: Emsden in Mona Sans, Studio in EB Garamond italic; outlined SVG in the header and live text in the footer
Favicon mark
The E cut from the primary Mona Sans outline
Generation
Vertex AI gemini-2.5-flash-image via ADC, billed against AI Pro credit

Editorial details

Section labels
None. Headings carry their own sections
Motion
Two easings, two durations, one showpiece per page, and an entrance under 1.2 seconds
Reduced motion
Honoured everywhere: no smooth scroll, no scrubbing, nothing hidden

Honest disclosures

AI use
Used to speed the build. Everything reviewed and tested by me before it ships.
Built by
Keita Emsden, sole trader, ABN 71 729 409 987
Insurance
Ask me about current cover for your project before signing.
GST
Your written quote will say whether GST applies.

If something on this page is wrong, tell me at keita@emsden.studio and I’ll fix it.