My Rebuilt Portfolio Using Next.js and WordPress
Welcome to the fresh new version of my personal website! It’s been on my to-do list for a while, and I finally carved out the time to give it the rebuild it deserved. This relaunch isn’t just about a visual upgrade — it’s a shift in how I want to present my work and ideas going forward.
My last site was about as basic as it gets — a static HTML/CSS page hosted on GitHub Pages. It worked… kind of. But it didn’t scale well (as in, adding or changing anything was annoying), and it didn’t really reflect where I’m at now as a developer.
It was clean, sure. But a little too quiet — and I wanted something with a bit more life.
Tech Stack: Next.js + Headless WordPress
This new build is all about flexibility, speed, and future-proofing.
Frontend: Next.js
Next.js gave me everything I wanted:
- Great performance with static and server-rendered pages
- Built-in routing and API routes
- Room to build in dynamic interactivity
- A modern dev experience with React under the hood
CMS: WordPress (headless)
I’m using WordPress purely as a content backend — no themes or frontend rendering at all. It’s just the admin UI and custom post types powering my blog and portfolio.
Data Layer: GraphQL
Instead of using the REST API, I hooked into the WordPress GraphQL endpoint (via WPGraphQL) to query only the data I need. It keeps things clean, fast, and flexible on the frontend.
What You’ll Find on This Blog
Now that I’ve got a real blog in place, I’m planning to use it for:
- Dev deep dives (Next.js, WordPress, GraphQL, etc.)
- Side project write-ups
- Lessons learned from client work
- Ideas and experiments I’m playing with
Basically: anything I’d want to read from someone else in the same space.
What I Learned Rebuilding This
- Going headless with WordPress feels like the best of both worlds (especially with GraphQL)
- Tailwind + Next.js is ridiculously productive
- Having a proper content model from the start (custom post types, fields, etc.) makes life easier down the line
- You don’t need to build everything perfectly upfront — just ship, then iterate