Miloš Jeremić

Product Designer

Choosing a Tech Stack

How to build a website in 2025? Being preoccupied with Product Design, I haven’t really been coding websites from scratch in a few years. Things have changed, new technologies, techniques and practices have emerged. I rolled up my sleeves and made some time to explore and re-learn, so I can figure out what’s best for my use case.

Choosing what to build with is important, and making the right bets will affect every step of the way.

“We shape our tools and thereafter our tools shape us.”

– John M. Culkin

Previous Experience

In the beginning of my career, I was working as a front of the front-end developer as much as a designer. I know HTML and CSS very well, and I’m familiar with JavaScript and PHP. I’ve built my fair share of websites and plugins with different CMSs, most notably WordPress, but Drupal, PrestaShop, and even a social network in elgg, as well.

No-Code Tools

When I got my first computer as a kid, before diving into coding, I was playing around with FrontPage and DreamWeaver. Recent popularity of tools such as Wix and Webflow reminded me of that WYSIWYG era. But Framer is the one that actually convinced me that no-code tools might have some advantages over the more traditional techniques in some use cases. And it’s fun to work with.

Still, one of the values that I wrote down in the previous post was that this site should be handcrafted. I like the idea of knowing it inside and out, having a fine-grained control, and I’d like to code some more, so these are the options I quickly moved on from.

Content Management System

Naturally, WordPress comes to mind first for two reasons: I had experience with it, and it’s still the most widespread CMS out there, so the support is great, as well as plugin ecosystem. But as I installed it, I couldn’t help but notice how bloated and over-featured it has become, for a personal site at least. I wanted something simpler and faster.

After some research, I found some compelling options that I really liked. ExpressionEngine, Kirby CMS, Craft CMS and statamic, to name a few. So I spun up a few local web servers via IndigoStack (a neat MAMP replacement tool), and gave them all a proper go. They’re all awesome in their matter, but out of the bunch, I liked Kirby so much that I instantly bought a license. It’s a flat-file CMS that so easy and logical to customize and use, it almost feels like you’ve built it yourself from the ground up. It’s delightful, and I’m amazed.

Static Site Generators

With flat-file CMS the need for managing databases was gone, but what if I can eliminate the need for managed servers, too? I started thinking about static site generators. Never really used one before. There are plugins for all of the CMSs above that generate static sites with a click of a button, but I wanted to try the real deal.

I love writing in markdown, and I’ve been using it for years to take notes. Since most of the SSGs leverage .md files for content writing, I had no problem with having no UI to manage it. On the contrary.

After a bit of research, I narrowed down what seemed like an infinite list of considerations, to four candidates: 11ty, Astro, Hugo and Jekyll. I went through the docs of each, and while Astro got a lot of points for the looks (yes, I know) and the islands architecture, Hugo seemed hands down the fastest, and with least prerequisites. I got up to speed with it really quickly and haven’t looked back.

Version Control

Not much to say here, I was the most comfortable with GitHub already, and after taking another look at GitLab and Bitbucket, I decided that I should stick with the familiar one.

Hosting

For the most of its 5000 days of age, this website has been on a shared hosting. This time around, I was determined to change that. While I was moving forward with Kirby, I explored some VPS, Cloud and Dedicated solutions. Since I don’t have an experience managing DigitalOcean droplets, Cloudways seemed like a good way to go.

But as I moved on to static site generators and removed the need for server management, I started looking into JAMstack solutions such as GitHub Pages, Vercel and Netlify. That’s when I stumbled upon Cloudflare Pages that won me over with their generous, unlimited bandwidth free plan, and a reliable CDN.

Analytics

Thought that I’d step away from Google Analytics in this instance, and find a more privacy-friendly and more focused tool, such as Fathom, Plausible or Umami. Umami has a free Hobby plan, so that’s probably where I’ll be starting. Cloudflare Pages offers some analytics services too, so I’ll probably switch between the two to see what fits my (really basic) needs.

Final Stack

In the end, I feel like a few years ago there was a lot less things to care about when it comes to building and deploying. Nevertheless, all of the tools and products I’ve mentioned have their advantages and deserve attention, and probably a separate in-depth posts. But, as I’ve tried to evaluate what suits me and this website the best, here’s the final stack:

  • Technologies: HTML, CSS, JavaScript and Markdown
  • Content Management: Hugo SSG
  • Version Control: GitHub
  • Hosting: Cloudflare Pages
  • Analytics: Umami

Oh, and I’m using Zed for coding. If you still haven’t, you should give it a go. It’s blazingly fast.

All of the tools that I chose are free, performant, and easy to move forward with. With these in place, I can focus on the design next.

Stay tuned.


Previous: What’s a Personal Website, anyway?