Hugo to Astro Migration

Screenshot of old Hugo version of the blog

Screenshot of old Hugo version of the blog

Init

The initial version of this blog was built using Hugo, a popular static site generator written in Go. It was a good fit at the time, mainly to its simplicity and performance.

However, as time went on, I found myself wanting a bit more flexibility, especially regarding styling and introducing potentially my own components. Though both are possible in Hugo, I found that I don't really want to go through a theme source code and modify it to achieve what I want. Also I don't use that much of CSS and JS, to start setting up my own theme in Hugo.

For my next version of the blog I wanted something that satisfies the following:

  • Still blog as a static site
  • A bit closer to HTTML/CSS/JS so that I can easily customize the look and feel
  • Though not purely HTML, to allow some components to be created and reused
  • Good performance (not too much JS overhead for a simple blog)
  • I don't mind writing posts in HTML instead of Markdown
This change was always rather low priority for me, so I didn't really rush into it. But when I was writing down docs for ppacer using Astro Docs, I realized that Astro might be a good fit for my blog as well.

New prototype

So I started sketching a new prototype using actual Astro (no Astro Docs). I've built the initial components like, the header, list of posts, post layout, title, etc. Then I've migrated two or three posts to see how it would look like in my new prototype. It kind of worked out well.

It's not the final version yet, but I'm happy with the initial sketch and I do have a plan about upcoming modifications and customizations. What's most important is that I can easily create and modify components as I want. I feel like I have much more control over the look and feel of the blog now, compared to Hugo.

Migration

Since joining a start-up in September 2024, I've had little time to write blog posts, and even less to work on the new version of the blog and migrate the existing ones. However during my summer vacation in August 2025 I've sketched the initial version of the new blog using Astro and was ready to migrate the existing posts. During the vacation I migrated 5-10 posts, but after returning to work, I had little time to continue the migration.

At the end of October 2025 I wanted to write down my thoughts on the 19th Chopin Competition and I decided to write it up using only the new version of the blog. Also November was pretty close to the end of the year when I usually write my annual summary post. So I decided to fully switch to the new version of the blog and finish the migration of the remaining posts.

Migration of markdown posts to Astro components was a perfect task for LLM agents. It helped me significantly. In the end migration of almost 40 posts took me only 2 or 3 evenings (for 1-2h each). When LLM agents were migrating the next post I've been reading and fixing the previous one. It went pretty smoothly.