How I build a website
One build, start to finish: a concept rebuild of Narval Bio’s technology page, with a 3D molecule that turns as you read. Four tools, each doing the job it’s best at.
The finished site, scrolled top to bottom.
References & direction
Every build starts with the site that already exists. I bring the old page into ChatGPT and generate a few reference directions from it, collect the examples I’m drawn to, and write out my thoughts: what the page has to say, how it should feel, and what’s getting in the way.
By the end of this step there’s a clear picture of the finished page before a single line of code.
Notes from the start
- Lead with one clear idea, not a wall of text.
- Tell the science as a story, one beat per scroll.
- Make the molecule the hero, moving with the reader.
- Keep the brand: Narval navy and amber.
The real 3D object
The molecule on Narval’s site was a pre-rendered clip, not a model I could light or animate. But the site credits its source, so I followed it to the public NIH 3D listing and downloaded the actual structure: the VEGFR-2 / VEGF-A complex, PDB entry 3V2A.
That means the build uses the genuine molecule, not a lookalike, credited under its CC-BY license.
Build & render, side by side
With Claude I build the functionality: a scroll-driven story, and a canvas that scrubs 120 rendered frames of the molecule as you scroll, always showing the nearest frame that has loaded so it never goes blank.
Meanwhile in Blender I fine tune the object itself: amber, navy, and bone materials, a four-light rig aimed at a single target, and a seamless ten-second turntable, then render the frame sequences the site plays.
Blender · Amber
Blender · Specimen// Draw the nearest frame already decoded, // so the molecule never blanks while the rest stream in. function nearest(i) { if (frames[i] && frames[i].ok) return i; for (var d = 1; d < count; d++) { if (frames[i - d] && frames[i - d].ok) return i - d; if (frames[i + d] && frames[i + d].ok) return i + d; } return -1; }
Compile & fine tune
Then it all comes together, and the small numbers decide whether it feels effortless. The header animation is 336 frames; as images it would weigh about 20 MB, so it ships as a 3.2 MB video instead, with a lighter cut for phones. Motion respects visitors who prefer less of it, and every section is tuned until it reads cleanly.
Finally I take the screen recordings into DaVinci Resolve and cut a before-and-after reel, so the launch has something to share on day one.
See it live
Scroll it yourself and watch the molecule follow along.
A concept demonstration, not a client project. Not affiliated with Narval Bio. Molecular structure from NIH 3D (3DPX-012103), used under CC-BY.