Overall, I'm pretty much satisfied with Next.js. The biggest advantage of Next.js is that it includes modern technologies such as static & server rendering, which would be a much work if you do it all by your self. In fact, I tried to do it myself before and spent many hours on it. Still, I couldn't make it work right. If you are thinking about going that route, please don't. Just use Next.js. It's already in there.
After using Django for over a year, I realized that I didn't need a database at all for running a simple portfolio site. Sure, I sometimes edit the application list, but that can easily be managed by editing the JSON file directly. Having an admin page for that simple change seems like overkill. Also, I decided to use markdown files for the blog section instead of using CMS (Content Management System). This way, you have to build & deploy eachtime you add a new post. But it actually doesn't take much effort (it can be done less than a minute), and in return, you have full control over the content. Overall, by swithching from dynamic to static, I got everything (codebase and data) in one place, and have little reliance to third-party services.
The most of the design and the concept are borrowed from this portfolio site catnose.me by Catnose (a software developer in Japan). For the blog part, this YouTube video Static Blog With Next.js and Markdown was very helpful.