Skip to content

← Work

Side project · React Three Fiber · Private repo

horizon

The seafront of Cubelles, modelled in Blender and scrolled through in WebGL. A 3D page that is still a page: every word is HTML, and every reader gets one.

v0.4.0 · Oct 2026Next.js 16 + React Three FiberEnglish, Spanish and Catalan

Demo

The seafront in 30 seconds

The frames in the video are the live page's own, taken from a production build: the beach, the town and the promenade, by day and by night. The numbers are the test report's.
Video poster · the town at night · MP4 1080p · controls, no autoplay · WebVTT EN + ES

01 · Scene

Your scroll drives the camera

Three keyframes, one per section: the beach looking west, the town climbing to its bell tower, the promenade under the palms. The camera follows the document's own scroll and eases between them; the words scroll natively over it.
Screenshot · keyframe 0, the beach by day · 1920×1080

02 · Day and night

One attribute, two skies

The scene reads data-theme off the page and holds no theme of its own. Night lights the town, turns on the bell tower's beam — one hand-written shader — and the only bloom pass the page runs.
Screenshot · keyframe 1, the town at night · 1920×1080

03 · Every reader

Nobody gets a blank canvas

Without WebGL2, under reduced motion, or after a lost context, the reader gets the poster; with JavaScript off, the server's page: every word and the poster. The scene carries no text and is hidden from assistive technology.
Screenshot · the night poster, what a reader without WebGL sees

04 · Budget

Measured, not assumed

The scene's chunk is 321 kB gzipped against a 325 kB cap and is never in the document; the model is 438 kB with 29,434 triangles; the page's own JavaScript is 182 kB, with no Three.js in it; mobile LCP is 2.6 s, and the LCP is the poster.
Video still · the budget: four measured numbers against their caps

The repository is private; the page, its three languages and the numbers it was judged by are public and checkable.

Next

Keep your codebase verifiable. Get your mornings back.

Open to Lead and Senior Full Stack roles and contract work, remote across Europe or hybrid in Barcelona and Madrid. A 30-minute call on your own codebase, no slides.