A quick disclaimer. This article is not intended to disparage Next.js – I work with Next.js every day, and really quite enjoy it. This is simply a study in using an outsized solution for a trivial problem.
Unfortunately, when it came to updating the blog, things didn't quite go so well. It can be hard enough to motivate yourself to write on your blog (especially if you're just getting back into it), and having a site that doesn't build correctly due to a dependency issue or a platform issues doesn't make it any easier.
For example, I recently tried to update the Twitter authentication (used solely by me to post statuses to the aforementioned feed page) to use Mastodon. This meant I had to update NextAuth.js, which meant I had to rewrite most of the session config for the whole site. The latest version of NextAuth.js is in beta, and I ran into a number of bugs that prevented me from proceeding.
This sentiment kind of echos my overall experience of using the Next.js App Router has been – feels like beta and a lot of unreconcilable issues. I'm not the only one. I'm a huge fan of their Pages Router though, and will continue to use and recommend it.
In the end, I rewrote the blog in PHP, hosted on Vercel using the unsupported vercel-php runtime. It's probably brittle and is not really production battle-tested, but I don't forsee running into a whole lot of scaling issues on my personal website.
This was a lot of fun. This made me feel like developing for the web felt like when I started two decades ago. No frameworks or metaframeworks, just a few PHP files and a PHP dev server. Sure, there was some platform quirks I had to work around (a result of my own architectural choice), and I reached for a few libraries to simplify the process, but overall, it felt a bit closer to bare metal that I have been for a while.
Props to the Next.js team for the work they've done to make developing full-stack applications as simple as possible (in their own flavour) in a world jam-packed with tools, practices, and tutorials.
This is goodbye, but not really.