Building This Website
December 1st, 2025
Building websites has become a recurring theme in my life, but none have been rewritten as many times as my own portfolio. This version is number six, continuing a tradition that began back in middle school.
A portfolio has always felt like the world’s window into who you are, so it’s natural to want it to reflect your best self. That drive to make something unique and (moderately) interesting to others has pushed me to learn most of what I know about thoughtful web design and clear communication.
At the same time, the goalpost for what counts as “good” is always moving. What felt like a magnum opus two years ago barely holds up next to the version I’m releasing today. That’s exactly why I wanted to highlight the features in this iteration: why they exist, what problems they solve, and the thinking that shaped them.
Picking The Right Framework
Back when I started building my portfolio, the first three versions were stitched together with plain HTML, CSS, and the occasional sprinkle of JavaScript. In my defense, Khan Academy and GitHub Pages didn’t exactly offer many alternatives.
What those early attempts taught me is just how quickly “simple” code becomes unmanageable. The moment you try to add even a hint of dynamic behavior, the whole thing balloons into an unstructured mess.
By the time I had begun working on this version of my portfolio I had gained extensive experience with Django and NextJS , and it would’ve been effortless to fall back on one of them. But I deliberately chose not to.
Both frameworks are incredibly mature, packed with everything from database tooling to optimized hydration to dynamic components right out of the box. That’s perfect when you’re building a full-blown application. But for a personal portfolio, it’s mostly unnecessary machinery. In my case, it would’ve added more weight than value.
In the end I was stuck deciding between Astro , Gatsby , and Svelte . These all were great for static sites that were looking to incorporate some dynamic components. Ultimately I chose Astro as it integrated well with Vercel and supported many different libraries across other frameworks.
Consistency In Design
In my early portfolio designs (basically everything before V5), I kept trying to build something flashy: lots of bold colors, abrupt styling choices, and whatever gradients I was obsessed with at the time. I assumed the louder the design, the more it would “wow” people. Yeah… not quite. If anything, it just made the site feel chaotic. Exhibit A: my V4 design.
If it isn’t obvious at first glance, just look at the sheer number of colors I used for skill tags, the mismatched fonts, the wildly inconsistent font sizes, and the downright strange spacing between elements.
Now, if you look at this current portfolio, the difference is obvious. The color scheme stays consistent across every page, the entire site uses a single font, and the text follows a clear hierarchy as you move through it. I’ve intentionally avoided anything overly flashy, instead guiding the reader toward the most relevant content. Most of these changes came from diving into design principles and finally taking them seriously.
Maintainability
One of the biggest pitfalls I’ve run into when creating lots of blog-style content is the sheer pain of managing individual HTML pages. Once the writing starts to pile up, keeping track of tags, styles, scripts, and everything else quickly becomes a chore.
Everything you see before you is generated through MDX which converts markdown files into pages like this one. All the texts, headings, links, images, and lists are all generated from a simple markdown file with no HTML tags embeded within it. This is a lesson I learned after trying to maintain pages for each topic in V4 which I incorporated in the V5 design of my website.
Making It Mine
Across every iteration of my portfolio, one of my main goals has been to add elements that make the site genuinely feel like me. Blogs are easy to build, and the internet is full of tutorials for creating something generic, but I’ve always wanted my portfolio to stand out. Each version has pushed me to design components and features that reflect my personality and my workflow. As you view different pages of my website, you’ll notice different elements where I’ve extended functionality to include stuff I’m passionate for.
- I enjoy 3D modeling. On the top of most pages you can find a model spinning around. Including this one!
- I write a lot about code, some blogs have code blocks for you to inspect!
- I have a background in statistics and academic writing, you might see in a post or two.
- I love showcasing my work visually, the images you view are pre-optimized before being displayed to you.
- I host a lot of work on GitHub so my blog is capable of taking any
README.mdfile and generating a page with minimal changes.