January 2026
Scrapping an over-engineered, 5-year-old setup that turned publishing a simple portfolio update into a Postman workflow. A modernized approach to content driven architecture and enhanced SEO using Next.js and Sanity Headless CMS.
Five years ago, I built my personal website to prove I could. Today, I'm rebuilding it to actually be useful.
When I first put together my personal website, I was deep in the mindset of proving technical competence. React on the frontend, NestJS handling the API layer, MongoDB as the data store, and AWS doing the infrastructure heavy lifting. It was a MERN-adjacent stack with some opinionated choices, and it worked — not because it was the right tool for the job, but because it demonstrated that I understood full-stack architecture.
That was the goal. And it was a reasonable one at the time.
But here's the thing about goals: they expire. The thought that once said "I know how to wire together a distributed web application" now quietly says "Is this even a good landing page?"
The old me was thinking more moving parts meant more to talk about in an interview. Every architectural decision was also a conversation starter and a technology I learned.
After shipping several products and marking checkboxes for hundreds of requirements, The current me thinks about the same problem through a product lens:
These aren't harder questions — they're just different ones. And asking them honestly forced me to confront some uncomfortable truths about what I had actually built.
After some flow charts, it came down to two groups:
Me (the content creator):
Anonymous visitors:
That's it. The anonymous visitor has no account. No complex relational queries that reference them. The site is, fundamentally, content about one person's thoughts, portfolio, and professional journey.
A NestJS API with MongoDB was not built for this type of visiting user. I could have used it to build my own CMS project. This stack is for applications with complex business logic, authenticated users, and dynamic data requirements. I had none of those things. I just had portfolio projects to write about. What I actually needed was a CMS service that can give me a proper editing experience and isolate this architecture with one user group only. Nothing complex, just something with a nice content editor like Sanity.
The pain points accumulated slowly, which is why they're easy to rationalize away:
The reduction in complexity is not cosmetic. It reflects a genuine reduction in operational surface area.
Migrating from React to Next.js is not a rewrite — it's important to say that clearly. Next.js is React. Your components, hooks, and mental models transfer directly. What you gain is a framework layer that handles things React intentionally leaves out:
next/image — automatic format conversion, lazy loading, responsive sizingThe incremental migration story is also real. You can start with the pages that matter most and move others over time. It's not a big-bang rewrite.
The choice of CMS is always contextual. For a solo content creator with structured content (posts, projects, metadata), Sanity fits well for a few reasons:
The author experience goes from "edit JSON and redeploy" to "open Studio, write, publish." That's not a minor UX improvement — it's the difference between a tool I use and one I avoid.
Beyond the authoring experience, the delivery side improves meaningfully:
| Concern | Old Stack | New Stack |
|---|---|---|
| SEO | Manual meta tags, CSR by default | SSR/SSG, automatic meta, structured data |
| Performance | Manual optimization | next/image, edge caching, Core Web Vitals-aware |
| Content editing | JSON + MongoDB shell | Sanity Studio |
| Deployments | AWS pipeline | git push → Vercel |
| Infrastructure management | EC2, ECS, CloudFront config | Managed, zero-ops |
| Caching | Custom cache headers | ISR, Vercel edge, CDN out of the box |
None of these are theoretical improvements. They're hours of maintenance I no longer spend, and page load times that reflect real engineering rather than good intentions.
This specific stack change makes sense for my context. It may not make sense for yours:
Context determines the right answer. This post is about my context, not a universal prescription.
The technical migration is the easy part. The harder thing was admitting that I had optimized for the wrong thing.
I built a system to demonstrate engineering capability, not to serve my users — even when my primary user was myself. Five years of friction while editing content, five years of over-engineered infrastructure for a site that publishes articles and lists projects.
The shift from engineering-first to product and content-first isn't a retreat from technical thinking. If anything, it requires more mature engineering judgment: the ability to look at a system and ask not just "does this work?" but "is this the right thing to build?"
A simpler, more purposeful system is not a compromise. It's the result of clearer thinking.
That's the version of myself I want the site to reflect now.
If you're considering a similar migration or have thoughts on the stack choices here, I'd genuinely like to hear from you.