Hello, everyone 👋! Welcome to my corner of the internet. This is a place where I will write about technology, software, and the occasional rabbit hole of building things from scratch. And what better way to start a blog than by sharing how I built this application? In this 0st post, I will explain my motivation for building a blog, the approach I took, everything I implemented, everything I wish I had implemented, and everything I learned while working on this project.
Nowadays, there are many well established blogging platforms, website builders and blogging solutions ready to be used for an easy start into blogging. But why should someone opt to create another blogging solution themselves?
As a software developer, there is a certain urge to do things in a way I see them and in a way of doing them my way. Also, creating and using my app is a showcase of my skills and competences. I began my blogging journey by searching for a platform that is the best to start my blog on and unfortunately; I did not find a platform that suits all my needs. That’s how I decided to develop my blogging platform, that fits my specific needs, from scratch.
With this blog, I wanted to showcase my talents - build a fast website that simultaneously offers great user experience and act as a platform for creating and managing posts. This approach gives me freedom to implement features like administration, analytics, and extensibility that other cannot.
When I started planning this blog, I intended to do as minimal use of a variety of technologies as possible. Why, you might ask? Because making a personal blog can be a simple CRUD application. However, I am passionate about my projects and (very) often want to create the greatest end product of all time! Therefore, I started researching which technology stack would best suit my project. That is how I landed on SvelteKit 5, Go and PostgreSQL - the stack that gives me a lot of freedom, flexibility and good developer experience.
Out of all frameworks I know, Vue.js is the one that I am best at, and have used it in way too many of my personal projects already. Opting to use Vue.js would be a sensible approach, given my extended knowledge. But given I place top priority on SEO while Vue.js not supporting SSR would make it not the best candidate. A suitable alternative would be Vue.js in combination with Nuxt.js - this is the approach which would work very well. In the end, I opted to go with the newly released SvelteKit 5. SvelteKit incorporates SSR as a first-class citizen, but it also supports hybrid rendering with CSR and SSG. Compared to Vue.js it lacks Virtual DOM, thus offering overall better performance while having less boilerplate and more built-in features, reducing the amount of dependencies used. Also, for a change, it would finally end a streak of Vue.js as frontend on my personal projects and bring a very much needed change.
Go, like SvelteKit, is another relatively new technology. After its initial release back in 2008, it quickly gained use in REST APIs. Being statically typed and compiled language offers great performance. Its simple and powerful syntax helped with Go’s rapid adoption. Go is the language I started using recently in my personal and professional environment. And it has become one of my favourite languages and a certainly the favourite to develop REST APIs in. Its feature-rich standard library and tooling offer an easy start to development.
With databases, we can choose between two database paradigms - SQL and newer NoSQL. Both have their pros and cons and are best suited for specific use scenarios. I went with SQL as I appreciate ACID properties, data structure and relationship, stable data schema and many more. As DBMS I opted to use PostgreSQL. It is free and open source with a very strong community of developers and users. Compared to others, it also offers many advanced SQL features and has a very stable ecosystem.
I wish I didn’t have to write this section... but here we are - writing this section! Creating new software is never easy, neither it goes according to the plan, and sometimes trade-offs have to be made. This project was ambitions and, initially, very large. Through development, goals changed and so did the final product.
Search engine optimization is one of the key properties that helps you drive more traffic to a website. Better SEO means better and more organic traffic, which is quite crucial for a web blog like mine. It was a driving force behind many decisions and technologies I adopted. The SSR ability of SvelteKit led to its selection. I created the search engine files robots.txt
and sitemap.xml
. I made the backend fast, and I optimized static sources and images for faster delivery. I took care of all of that and much more.
Software developers often overlook the importance of quickly responsive apps. There are many apps that are fast enough not to hinder user experience while still providing great user experience. Users get used to this level of responsiveness and do not mind this, however when you try a piece of software that has very little delay between each action, it leaves a pleasant and lasting impression. However, speed is not only about users’ perception of app responsiveness. Fast loading times improve SEO ranking on mobile platforms that prioritize speed, as crawlers can access the website more easily, thus improving the site’s ranking factor. Companies like Amazon and Walmart report an increase in conversion rate for each 100ms per app delay, thus making it an integral part of every web application.
One of my pet peeves is that I am ambitious about my work, hobbies, ... And this is very true here - a lot of goals and not so much time to complete them. I did not implement functionalities such as a search bar, searchable tags, post versioning, and localization to simplify this web application. However, I will implement them eventually!
Although my blog has been deployed, this does not mean work is not done. Right now, it offers everything that is needed for nice and pleasant user experience. The field that will receive a lot of attention and care is administration pages, as they are very barebone for now and could use some improvements. Blog side will receive updates as well, many of them were not implemented as they seemed unnecessary, such as blog post searching or comment section, but will be implemented in the future.
It has been almost a year from starting this entire process of “writing” a personal blog. I spent a lot of time planning, designing mocks, programming, and, finally, making last-minute specification changes that ruined everything I had implemented. During this entire process, I got to deepen my knowledge and learn new technologies and frameworks. Building my blog was an enjoyable experience, but an exhausting one! At first, it seemed like a simple task, like another GitHub project. But when I look back at all the time and effort I have invested, I ask myself if it was worth it. After all, this could have been a 2 hour project had I used Hugo. Now I have a platform that is specifically tailored to my needs and have the skills that are needed to continue with the implementation of features I want.
2025-05-19