This is my engineering blog. Before the posts about Cloud Run bills, Terraform drift and MQTT fan-out, a quick note on the platform hosting this site, because the architecture is the point.
The constraints
I spend most of my time keeping cloud bills down for clients, so the blog had to follow the same rules:
- Static pages, fast and SEO-friendly
- Publish =
git push, nothing else - Near-zero running cost
The shape
A static Astro site. At build time everything becomes plain HTML and CSS: no server rendering, no database.
git push → Gitea Actions builds Astro → dist/ synced to gs://softion-blog-indra
→ Cloud Run (nginx) serves the bucket → the browser
Two components:
- GCS bucket (
softion-blog-indra) holds the built files, private to the project, written only by the deploy service account. - Cloud Run runs a minimal nginx image that mounts the bucket read-only
at
/srv/blogvia the gcsfuse CSI driver, and serves it. Ingress is the only public surface. The service scales to zero when nobody is reading.
Adding a post
Drop a markdown file in src/content/posts/:
---
title: "My post"
description: "One-line summary for SEO"
pubDatetime: 2026-08-10T00:00:00.000Z
tags: ["kubernetes"]
---
Your content here.
Commit, push, done. The build validates the frontmatter, so a malformed post can’t ship.
More soon.