1--- 2title: I rewrote my blog and it was more trouble than I expected 3description: The last time I changed anything on my previous blog was almost exactly 2 years ago. Wayyy too long. So I rewrote it completely. 4date: 2024-11-14 5updated: 2025-05-28 6authors: 7 - name: finxol 8tags: 9 - rants 10published: true 11--- 12 13I never was never quite satisfied by how my blog looked and felt. 14When I first set it up I didn't want to bother much with it so I took the first template I found in a language and framework I knew: Nuxt.js. 15_Spoiler: I went for Nuxt again, but for different reasons this time._ 16 17## Version one was not good 18 19If you're curious, I'm keeping the original version up and running for a bit on [v1.finxol.io](https://v1.finxol.io/) 20 21The starter package I used to get my blog up and running was [some random npm package](https://www.npmjs.com/package/@jsilva-pt/nuxt-content-theme-blog) 22I found god knows where that's barely maintained. 23Last published version was _4 years ago_, which means it was already 2 years old when I used it. 24 25Another problem with it is that it's an npm module, so I can't fork or customise it easily. 26 27I mentioned it was built with Nuxt, which is perfectly fine in itself, but the problem is with the version. 28You see, Nuxt 3 was officially released almost exactly 2 years ago, so basically when I had last committed on this blog. 29I started it only a few months before, so Nuxt 3 was already at the Release Candidate stage, yet I stuck with Nuxt 2 despite the much closer EOL to come. 30 31Nuxt 3 is a complete rewrite, so the API changed A LOT, enough for lazy me to stick with the soon-to-be-killed framework. 32It admittedly caused quite a mess in a number of production codebases. 33 34Anyway, all this to say I made a bad choice when I initially built it, so I decided to start over. 35 36## Building a new blog 37 38I had a few requirements before starting my quest to find a suitable heir to Nuxt. 39It has to: 40 411. Accept markdown. 42 I don't want to have to rewrite all my (6) previous blog posts. 432. Customisable — _to some extent_. 44 I'm after a simple theme, but I want to have things like external links in the nav bar, a list of posts on the home page, and an about page. 45 I don't consider these to be unreasonable asks — _please let me know if any of these sound outrageous._ 463. Not TOO hard to setup. 47 I'll get to it in a minute, but some "easy" options are a nightmare to customise properly. 484. Generate to static files. 49 I don't want to bother with manual hosting, copying the files by hand everytime I make a little change, 50 but I also don't want to have a full Node server running on an expensive VPS just for a simple blog. 51 52With these more-or-less well defined requirements in mind, I started looking at things I'd heard good things about before. 53 54### Researching my options 55 56#### Eleventy 57 58I'd heard amazing things about 11ty, especially 59[from](https://bell.bz/eleventy-excellent-truly-is-excellent/)  60[Andy](https://bell.bz/importing-eleventy-content-into-wordpress/)  61[Bell](https://github.com/Andy-set-studio/personal-site-eleventy). 62I kept reading it was a solid option for static site generation. 63So I gave it a shot. 64 65Well let me tell you it is definitely not for the weak. 66The syntax is quite weird in the `.njk` files. 67 68To be fair though, it does seem fairly straightfoward to use only with markdown files and a template. 69But unfortunately that doesn't fill in my second requirement... 70 71#### Hugo 72 73My starting point with Hugo was the same. I'd seen a few of my [peers](https://blog.itarow.xyz/) 74and university friends use it, and it seemed a solid option too. 75For some reason I deliberately chose to stay clear of it in the past, but I don't remember why. 76 77Having tried it again, it was a fairly good call. 78I think it's mostly the unfamiliar syntax that put me off, and I'm not a fan of TOML. 79It's not a bad format, it's quite readable, but somehow I can't wrap my head around it and use it properly. 80 81I was quite surprised by the nuber of themes available though: 181 themes listed under "blog" on the official themes website. 82I managed to find one that was close enough to what I wanted, but I really struggled to customise it and make it work with my info. 83 84#### Deno blog 85 86Lately, I've been using and loving Deno quite a bit, so when I saw [\*the\* Deno guy's](https://tinyclouds.org/) blog was built with a [simple Deno lib](https://deno.land/x/blog@0.7.0), 87I had to try it out. 88 89Much to my disappointment, it didn't work with the current version of Deno. 90I guess version 2.0 broke a few things. 91 92Looking at it again now, it doesn't seem very customisable, if at all, so I suppose it wouldn't've been a good fit anyway. 93 94#### VitePress 95 96Next one I tried was VitePress. I'd barely heard of that one before, only in passing, but it's built on Vue, which I really like and know decently well. 97 98It's supposed to be built rather for documentation websites, but I came accross a few tutorials on how to make a blog out of it, 99so I tried that one out. 100 101Turns out I couldn't break free from the default "docs" style template — even though I quite liked it visually, 102so that's a no go. 103 104#### Nuxt (again) 105 106I can picture Nuxt looking at me laughing while I come running back to it after trying out other option. 107 108Nuxt is a solid choice for Static Site Generation (SSG), it comes with all sorts of bells and whistles, 109is super extensible, while still being really fast. 110 111First I set out to find a minimalist blog template or starter to kick things off. 112However, I couldn't find anything that I really liked during my (not hugely) extensive research. 113 114The only logical solution is to make my own thing :) 115 116To be clear, I didn't completely rewrite everything because that's way too time consuming for a little blog like this. 117I just made the UI and pages, and used [Nuxt Content](https://content.nuxt.com/) along with [Tailwind](https://tailwindcss.nuxtjs.org/). 118I'll be honest, minimum effort was big criteria in the final choice too. 119 120### Result 121 122If you're reading this on the actual website, then you're seeing the result. 123Not too bad for an afternoon's work! 124*Edit:* To be fair, it's been updated and improved a good bit since. 125You can still see the original (new) version [here](https://finxol-blog-z6f9qqkjrjz5.deno.dev/). 126 127The website is really fast and snappy, as expected for a simple blog like this. 128Hosting is dead simple and pretty fast with Github Pages too. 129 130And that's some pretty damn good results from PageSpeed Insight. 131 132![PageSpeed Insight result](/posts/blog-rewrite/pagespeed-insight-result.jpg) 133 134## Publish it as a blog starter 135 136I want to help out the comunity along the way, so I'll adjust a few things to make it into a template repo to use as a starter, 137in case anyone out there is looking to build a simple markdown blog with Nuxt. 138 139*Update:* I've finally taken the time, so it's now [available as a template](/posts/blog-template)!