Welcome to LuzTech’s official tech blog!
I built this space to share a bit of the practical knowledge that LuzTech’s engineering team has picked up along the way.
The idea is to share ideas, curiosities, and lessons learned from the team’s day-to-day work, including projects, architectural evolutions, and engineering decisions.
I also plan to share interesting curiosities and projects I come across in the community.
And for the very first post, I’d like to walk you through how I built this blog.
Table of contents
Table of contents
The requirements
My first requirement, which set the direction of the entire blog, was that it had to be static — that is, no backend.
Wait, a backend developer building a project without a backend?
Yep. One important lesson I’ve learned throughout my career is to pick the right tool for the right job.
Thinking about my current scenario — being the company’s sole developer and the blog’s only author — having a backend would only bring me more work and cost.
And that wasn’t the goal! The goal was a simple, cheap blog, easy to write content for (pnpm post:new) and easy to publish (CI/CD on GitHub). A backend would force me into a trade-off between cost and convenience:
-
Azure Webapp: Good and reasonably fast, but with a cost higher than I’m willing to pay right now
-
Azure Functions: Very low cost (as long as the blog didn’t blow up, which I don’t see happening initially), but with poor performance, since cold starts are inevitable (and brutal for this kind of application)
So I figured it was better to go with SSG, or Static Site Generation, which would give me a simple, fast, and easy-to-maintain blog. The downside here is if I ever want more complex features, like comments, many authors, RBAC, etc. I will need to migrate. But since that’s not the case (at least now), SSG works just fine for me.
After chatting with my imaginary friends (ChatGPT and Gemini), I concluded that Astro would be the best tool for the job.
But why Astro and not <insert your favorite framework here>?
Well, because on top of SSG, Astro lets me use MDX, which allows me to do things like drop React’s famous counter on the very next line:
And the integration between text and components is really good, so it ended up winning.
Theme
After that came my search for a theme I actually liked. I went to the Astro themes page for blogs and, to be honest, the current theme wasn’t the first one to catch my eye — that was Vector.

Screenshot of the Vector theme (commercial), by Andrei Alba. Reproduced here for editorial purposes.
But, since nothing in life is perfect, Vector is a paid theme. And since the blog’s initial requirement was to be cheap, I went with Astro Paper, which is free and fits my needs well.
I’ve got nothing against paid themes — in fact, I even considered buying this one, since I really liked it. But since the blog’s requirement is to be cheap, I opted for a free theme.
Astro Paper is no slouch either. It has a more minimalist vibe, which I think fits the blog’s proposal nicely:

Screenshot of the Astro Paper theme (MIT), by Sat Naing. Reproduced here for editorial purposes.
With the theme picked, it was time to ✨customize✨.
Customization
A key thing that helped me a lot at this stage was the existence of the LuzTech Typography repository. It allowed me to keep a visual identity consistent with the rest of the company, without having to reinvent the wheel.
And, of course, I wasn’t the one who did most of the customization — that was GitHub Copilot.
What do you mean? You used Artificial Intelligence to write code? Didn’t it end up full of slop?
Good question, my friend, and the answer is: yes, I used GitHub Copilot to generate a good chunk of this blog’s frontend, including the components used by the post (not the text though — that I still write the old-fashioned way).
Now, about the slop… Yes, it produced some slop, but surprisingly, not that much. See, I used one of the most powerful models available right now: Claude Opus 4.7, which generally writes code pretty reasonably. And, of course, I was testing and reviewing throughout the process, and asking for things little by little.
Artificial Intelligence doesn’t replace a person, it replaces a tool — or better yet, it is a tool, just another one, like compilers, linters, IDEs, etc. And, like any tool, it needs to be used with care and attention.
That said, I referenced the typography project in my prompts and was very clear about what I wanted to be implemented. Copilot often delivered something that wasn’t exactly what I wanted, but with a few tweaks and clearer prompts, it kept delivering what I needed, bit by bit.
Conclusion
It was a fun experiment, to be honest. It’s not the most over-engineered blog in the world, but sometimes, less is more than enough.
Hope you enjoyed it!