How I Built This Website and Why
My old website was a Hugo template with a few dummy posts and a “Download CV” button. It didn’t say much about what I actually do, and I never felt like updating it. I wanted a place I would actually use, to write about things as I learn and keep a drawing journal on the side.
I also wanted full control over how it looks and where it runs, same as my Docker setup, which I wrote about here. I don’t want a page builder or a theme I have to fight with, and I don’t want to babysit a backend.
The stack
I build the site with Astro, a static site generator. Each article and drawing is a markdown file in a content collection, and Astro turns them into plain HTML at build time.
I picked Astro mostly because it ships almost no JavaScript, so pages are just HTML and CSS and they load fast. Content collections let me put a schema on the frontmatter, so a typo in a post’s metadata fails the build instead of breaking quietly. It also handles images for me. Raster images come out as WebP with responsive sizes, and SVG diagrams stay as they are.
The look took the longest. I wanted a hand-drawn, sketchy feel. Headings use the Architects Daughter font, which I self-host. The background is a faint grid on paper, cards have wobbly borders, and the squiggles and dividers are SVG files I drew by hand, so there is no runtime drawing library to load. Light and dark mode both come from CSS variables, with a small inline script that sets the theme before the page paints so there is no flash.
How the infrastructure works
Since the whole site is static, hosting is simple. The source lives in a public GitLab repository, and Cloudflare Pages is connected to that repo through its Git integration. Every push to main runs npm run build and deploys the result to Cloudflare’s network. There is no .gitlab-ci.yml and no server to manage. I just push, and Cloudflare builds and deploys.
That’s the part I like most. I don’t run or pay for a server. The site is just files served from a CDN, and the domain (yemyintoo.com) is managed on Cloudflare too.
Adding an article is just a markdown file with a bit of frontmatter:
---
title: "Some article"
description: "What it's about."
pubDate: 2026-10-28
categories: ["astro"]
---
The build also generates a few things on its own: rss.xml for a feed of new articles, sitemap-index.xml for search engines, and llms.txt with JSON-LD structured data so search and answer engines can read and cite the articles cleanly.
Final Thoughts
This setup keeps me writing. A new article is just a markdown file I drop in the right folder and push. The site costs basically nothing to run, and I own the whole thing from the font to the deploy pipeline.