KOEBELT
All projects
Projects

This portfolio

This site: a React front end with a hand-written WebGL particle engine that changes shape for every section.

Personal projectWebWebGLCreative development
The particle sphere: one WebGL draw call behind every sectionThe home page, the projects and a case study, on desktop and on a phoneThis site on a laptop and a phone: the hero with its particle sphere, the projects, a case study, and the same pages laid out for a phone, where the sphere drops to 3,000 points.
RoleSole designer and engineer
StackReact · TypeScript · Three.js · GLSL · Vite
The problem

A portfolio has to say a lot to someone who will give it a minute. I wanted the page itself to show the work: one cloud of points that becomes a globe, orbits, a row of projects and a timeline as you scroll, without getting in the way of the text, slowing down a phone, or breaking for anyone who prefers less motion.

Constraints
  • One draw call, from 3,000 points on phones to 7,000 on desktop
  • Smooth on mid-range phones, stepping down in quality when the frame rate drops
  • Every piece of content readable without the animation, and a static render under reduced motion
  • Two languages sharing one layout
Decisions

Keep the engine outside React

The engine owns its render loop and exposes a small imperative interface. Scrolling and hovering change shader uniforms, not React state, so animating at 60 frames per second never triggers a re-render.

Derive every shape from each point's home position

Each scene is computed from where a point sits on the sphere rather than sampled fresh, so every point travels a short way to a nearby spot in the next shape. Transitions read as the form deforming, not the cloud scrambling.

Draw the globe as coastlines

Filled continents needed far more points to be recognisable and turned the far side into a competing mass. A coastline mask generated from world map data is sparse enough to fade with depth, and still makes France readable with a few thousand points.