About this blog
When I started to polish my coding skills in 2021, I made a blog with Gatsby, a static code generator - it seemed easy and I found quite a few tutorials explaining patiently how to create static websites with it. Then I got pretty busy with my job, and I only found time to revisit my blog in summer 2022… I wanted to make my blog multilingual and ran into issues with Gatsby, as I couldn’t figure out which plugin was compatible with which Gatsby version. I spent a month running in circles, and I decided to give up.
Step 2: Hugo
I wanted to prioritize writing speed, so I decided to use a dedicated static blog generator. I hesitated between Hugo and Eleventy. In order to choose I gave myself one hour to study each platform, and looked at how far I could go with those and find the way to deal with multilingual features. Hugo won the challenge, internationalization being included into the basic features
Fast forward a month or so after, and I struggled to display the site as I wanted - documentation on basic features was not ready there. I would strongly recommend hugo though for people who want a quick solution and are ready to use an already-made template. But as a software engineer, I thought that I could (should?) be able to design my own solution quickly
The next solution: Next.js
I decided to use then Next.js, as it was in JavaScript / TypeScript, based on React, and it has a pretty big community of users. Surely I will be able to do whatever I want with this framework. This was great - but a bit overkill for a static website. I ended up going sideways, coding a full content management system, storing markdown for posts in Firebase and providing admin pages, editing capabilities etc…
Various ways to store content
I was first using markdown files stored in the project repo. However I wanted to keep the repo and the content separate, so that other people could fork the repo without having to deal with tons of personal content. I then made a version using [Github API] to download files stored in a private repo, dedicated for my content. This was great, but still not a great writing experience, especially to actually edit files and save them. So I went for the full solution and decided to code my own CRM, with Firebase. I am not saying that this is the most efficient solution - but the goal was as much to write than to be able to learn stuff! The CRM Repo is the following: https://github.com/AlixFachin/next-portfolio
CRM Features
- Accessible only for authenticated users
- Markdown editor
- Content saved in Firebase
- Draft posts
- Featured posts
Current solution: Astro.js
The CRM became a bit cumbersome to use, and I was curious about Astro, a quick solution dedicated to static (ish) websites. So my current solution is:
- Astro for the framework
- tailwind.css for design
- Vercel for deployment
- Zod for object validation (coming from Firebase and from user data)