Skip to main content

Engineering notes

A CV with an unnecessarily explorable galaxy

This site has two jobs: make the experience behind my CV easy to evaluate, and show the kind of engineering I enjoy. The content is prerendered and usable without a GPU; the galaxy is a progressively loaded enhancement: a small renderer of its own, written with TypeGPU and WGSL, that runs on WebGPU (or WebGL2) inside a worker thread.

How the galaxy works

Every marked star is a seed. It resolves to the same star class, planets, biomes and moons for everyone, and the hover label, the orbital view and the surface you land on all read that one generated result.

The part I like most is the least visible: terrain height and biome blending are implemented twice, once in WGSL for the GPU and once in TypeScript for the camera, landing sites and level-of-detail decisions. They have to agree, or the ground you see is not the ground you stand on. Both use the same integer-hashed noise, so they match to about a metre, and the renderer never stalls the page: the canvas is handed to a worker after load, which is why the galaxy can start on its own and still score 100 on mobile.

Source and lineage

The source for this SvelteKit iteration is available on GitHub. Earlier versions were built with Next.js and Gatsby.

The original galaxy study was inspired by Bruno Simon's Three.js Journey lesson. The current engine has moved far from that starting point: a raymarched galaxy volume, ray-traced star systems, streamed planet terrain with atmospheres, plants and shadows, and one continuous flight between them.

Measured first-load performance

The June 19, 2026 PageSpeed Insights report recorded 100 in all four categories on mobile, throttled to slow 4G on an emulated Moto G Power. This is a historical snapshot: scores change with deployments and test conditions. Initial-load audits complement runtime profiling and manual accessibility testing.

Open the recorded PageSpeed Insights report

The full Lighthouse report

Open the report in its own tab