A new blog
A new blog

Background

Until now this blog has been rendered using Pelican, a Static Site Generator written in Python that uses Jinja templates. It's accessible and has all the functionality I needed, but as the amount of blog content has grown it has become slow and cumbersome.

Waiting for edits to a blog post had become slow enough to discourage me from making changes or creating content quickly. This would change the way I used the site, and it would only get worse as the amount of content increased.

I started looking for a more performant static site generator by looking at this list on jamstack.org, and thought that Hugo would be a good choice.

But then I got to thinking how JavaScript is everywhere, and anything that I spend time learning needs to have multiple benefits. Hugo would teach me some Go, but that hasn't been necessary yet. JavaScript on the other hand is everywhere, and I seem to increasingly be having to work hard to avoid learning it. React seems to have become a de-facto framework.

It was this firebase video that convinced me to commit to React and Next.js, rather than some other framework, or meta-framework, like Vue, or Nuxt. Nuxt might be simpler, but if you're only going to be familiar with one framework, you might as well make it React. It is the de facto standard.

Conversion

Converting the old blog to Next.js was a much larger undertaking than expected. Partly because I needed to convert the markdown files containing the post data, but mostly because I wanted to bring across all the functionality from the Python site:

  • state management,
  • dark theme,
  • keyboard shortcuts,
  • search,
  • custom web analytics,
  • the snippets page,
  • the collections,
  • embedding YouTube videos, or other content using MDMX

None of these features are novel or groundbreaking, it just requires a level of proficiency that isn't trivial, and that I didn't have.

Converting all the blog posts took a long time because the frontmatter had to be converted to yaml, and timestamps, tags and categories had to be formatted correctly. I also needed to change how iframes (mostly youtube videos) were embedded in blog posts.

Converting Jupyter Notebooks to blog posts was another mini project. State management across components, not just passing state to children, took a while to figure out. Grokking react is not trivial.

I now have something that will hopefully remain performant and fun-to-use for a long time. React doesn't seem like its going anywhere soon. Maybe (just maybe) this will be the last front-end web framework I decide to learn. Ha.