Cover image for A Massive Overhaul: Next.js 15 and Beyond

A Massive Overhaul: Next.js 15 and Beyond

Published 26 days ago 3 min read
Cover image for A Massive Overhaul: Next.js 15 and Beyond

The Big Refactor

No, I've not abandoned this website 😀

In fact, I've just pushed a massive update to the project. It's been a while since I last wrote about it, so here's a quick summary of what changed and why.

This update deserves its own chapter. I didn't just tweak a few details - I practically gave the entire project a makeover. The commit message, which might be the longest commit message I've ever written, says it all (and then some):

feat,refactor: update project to Next.js 15, update all dependencies,
migrate ESLint to flat config, migrate Tailwind to v4,
use consistent kebab-case naming for components, migrate to app router,
use more idiomatic static data retrieval techniques, edit the text data,
improve website metadata, reword website, turn section panels into a separate "/lore" page,
fix styles, update showcase cards to be wider, include project text,
and have the tech list wrap, update blog post list to include all posts,
completely redesign blog page, implement HTML prose rendering for blog posts,
implement "recommended posts" section in blog post view, add back button to blog page,
update page view logic, utilize "server-only" rule package in server lib files,
use zod-based schemas for Firestore de/serialization, remove unused files and functions

Yes, that’s one commit message. Maybe I should’ve broken it into ten smaller commits, but once you get into that flow state, it's hard to stop.

Also, yes, I will try to use properly formatted commit messages from now on (commit type, scope, message).

Highlights of the Update

  • Next.js 15 upgrade, complete with the new app router.
  • Tailwind v4 migration, so styles are cleaner and more modern (not that there was anything wrong with v3 :D)
  • ESLint flat config adoption, because this project is the only one of mine which is still on the legacy config.
  • Kebab-case component names because I am used to shadcn/ui.
  • A brand-new /lore page, moving the old section panels into their own dedicated home. This is mostly done so you don't need to read my entire life story before heading into the project showcase.
  • A complete blog redesign: full prose rendering, recommended posts, and a back button.
  • Firestore schemas with Zod because I expect future changes to the existing Firestore schema.

Why such a big refactor?

The reason for the config migrations, package updates, and routing overhaul isn’t just about shiny new versions - it’s about making the project more maintainable, more scalable, and more fun to work on. The structure is cleaner, the blog is actually pleasant to look at, and the codebase feels like it’s grown up a little.

The best part? These changes open the door to adding features faster without everything feeling duct-taped together. It’s the foundation for the next wave of improvements.

Recommended Posts