How to over-engineer a simple website

A while back I made my first website. It was a static site generated with Hugo and my custom theme. I love Hugo. It's a fantastic and very easy to use static site generator. I'd recommend it for everyone who wants a simple website or blog. But I wanted something more. I wanted a full control over my website. I had two options. Either learn Go and contribute to Hugo, or make my website from scratch.

Since I was already learning React and Node.js I chose the second option. At first I started building the website as a standard React app. I created all the components that I though I might need. The website quickly grew.

Then I learned about universal (isomorphic) rendering and decided that I should try it. This part of development took me the longest. In fact the first commit on the universal rendering branch was on April 9, 2017 which is over a year ago.

Obviously I wasn't working on it this entire time. During that year I was finishing my Bachelor's degree, moving to a different city and starting my Master's.

My problem with implementing universal rendering was a distinct lack of up-to-date tutorials. They all used an outdated version of Webpack or React Router or didn't use React Router at all. Another issue was that some tutorials used babel-node in production which is not recommended.

After I finally implemented universal rendering the next issue to solve was how to deliver content. A very simple way would be to just create a new React component for each blog post and "hard code" the content. However that's not very React-like. Instead I implemented a simple api in Express.

There are many more things that I didn't mention that I worked on for hours and when I finally implemented it I changed my mind. Honorable mention goes to CSS and the overall style of the website which was changed several times. I also reinvented the wheel several times where I wrote a feature from scratch instead of using an existing module.

So now I have a new website which is a lot more complex and has a lot less features than my old one. But it's mine, I have full control over it and I learned a lot building it.