Why I rebuilt this portfolio
A WebGL hero, magnetic buttons and a much lighter site. What changed, what it cost, and what I would do again.

This site used to ship about 73 MB of project screenshots. Today the same pages load roughly 3 to 4 MB of images, converted to WebP and sized for the screen that asks for them. That single change did more for how the site feels than any animation I added afterwards.
What changed
- Real, higher resolution screenshots of every project instead of reused or stretched ones.
- A WebGL hero built with Three.js that loads as a separate chunk after the page is ready, so the portrait still paints immediately.
- Buttons that lean toward the cursor, with the effect switched off on touch screens and for people who prefer reduced motion.
- One square visual language: thin frames, corner anchors and a single white accent.
What I would do again
Measure first. Every animation on the site has a cost, so each one now earns its place: effects pause when they scroll off screen, the canvas goes idle when nothing is moving, and the pinned sections are only as long as they need to be.
What is next
More case studies, written up properly, and this Updates section as the place where I share what I learn while building client platforms.
- Next.js
- Performance
- WebGL


