Building this portfolio: what I learned from designing and shipping my own product in five days
Building a portfolio is a design problem like any other. The constraint: represent five years of work honestly, without it feeling like a brochure or a CV. The approach: build it from scratch, make every decision deliberately, and document what I learned along the way.
This version is built with Vite and React. I chose it partly because it made sense technically, and partly because I wanted to understand what I was actually building rather than hiding behind a template. Version control lives in GitHub, partly for safety, and partly because pushing commits to a repo called "portfolio" at 2am feels right in a way that's hard to explain.
The bit I'm most proud of is the comment system. It's built on Supabase with real-time presence. Visitors can drop Figma-style comment pins anywhere on the page, see live cursors of other people browsing at the same time, and leave notes that persist. I built it because I wanted the portfolio itself to be a proof of concept, not just a container for them.
Since writing this the portfolio has kept evolving. Moved from Vite to Next.js 15. Moved from GoDaddy cPanel to Cloudflare Pages with auto-deploys on every push to main. Debugged a cross-browser positioning issue that cost me a day and taught me more about getBoundingClientRect than I ever wanted to know. The full story is in the Extras tab if you want the unfiltered version.
Claude Code did a lot of the implementation heavy lifting. I'd describe what I wanted, review what came back, push back when it wasn't right, and iterate. It felt less like coding and more like designing with a very fast implementation partner. The decisions were mine. The 2am hours were entirely my fault.
The honest version of building with AI isn't magic. It's knowing enough to ask the right questions, recognising when the output is wrong, and caring enough about the details to keep going until it feels right. That's not so different from design, really. Just with more terminal errors.



