Colophon & privacy
Every page here is plain HTML first. Motion is added on top and can be switched off. Before anything ships, a set of guards checks the build: claims, consent, links, fonts, secrets, accessibility and speed.
The guards
This build (b8b953e, production): 5/8 build guards passed, 3 flagged. The rest run before every push to main.
- 01 ClaimGuard Every number on a page comes from a cited claim; retracted claims block; unproven ones are left out. Flagged
- 02 PlaceholderGuard No unfinished copy, and nothing left to confirm, in a launch build. Flagged
- 03 ConsentGuard Clients, collaborators, films and recognisable people appear only with their confirmed OK. Passed
- 04 AssetGuard Every image has dimensions and a text alternative; development files never ship. Passed
- 05 InternalLinkGuard Every link and anchor on the site leads somewhere real. Passed
- 06 NoJSGuard With JavaScript off, every heading, project and contact link is still visible. Before every push
- 07 A11yGuard No serious accessibility problems (axe), with and without reduced motion. Before every push
- 08 FontLicenseGuard Only openly licensed fonts, self-hosted; never a trial font. Passed
- 09 SecretGuard No keys, tokens or private notes in anything that ships. Passed
- 10 BudgetGuard Pages stay inside their weight and speed budgets. Before every push
- 11 ExternalLinkGuard Links to other sites still answer. Before every push
- 12 ResumeGuard The résumé exists, is small, and repeats no retracted claim. Flagged
- 13 MotionGuard With reduced motion on, nothing loops, pins or autoplays. Before every push
Stack
- Astro (static output; every page is complete HTML) 7.4.4
- Sitemap 3.7.4
- GSAP (motion, after the page is readable) 3.15.0
- Lenis (smooth scrolling on mouse and trackpad) 1.3.27
Hosted on Cloudflare Pages. Checked with:
- Playwright (tests on Chromium and WebKit) 1.64.1
- axe (accessibility checks) 4.14.0
- Lighthouse CI (performance budgets) 0.15.1
Budgets
| Page | JavaScript (gzip) | First load | Largest paint (mobile, slow 4G) |
|---|---|---|---|
| / | ≤ 120 KB | ≤ 1.2 MB | ≤ 2.5 s (goal 2.0 s) |
| /afrotech, /hi | ≤ 40 KB | ≤ 400 KB | ≤ 1.8 s |
| /work/* | ≤ 80 KB | ≤ 1.0 MB | ≤ 2.5 s |
| /work | ≤ 90 KB | ≤ 1.5 MB | ≤ 2.5 s |
Type and colour
- Newsreader, by Production Type (SIL OFL 1.1)
- Instrument Sans, by Instrument (SIL OFL 1.1)
- IBM Plex Mono, by IBM / Bold Monday (SIL OFL 1.1)
- wine #541824
- wine-deep #400B17
- curtain-light #C0BDBA
- suite #171312
- paper #F6EFEA
- cream #F6F0E6
- ink #1E1917
- tally #CB4644
Privacy
Cookieless analytics (Cloudflare Web Analytics). No tracking cookies, no forms, no third-party scripts until you press play on a video.
Credits
- Studio light: Paulina Milde-Jachowska on Unsplash (unsplash.com/photos/eAeMtyc0WnE), cut out and retouched for this site.
- Portrait: Mide Wey Studios.
Interaction ideas owe a debt to oyin.design and rayaverse.org.