Building This Blog: Hugo + Forgejo CI + GitHub Pages
When I decided to document my homelab adventures, my first instinct was Kubernetes—because of course it was. I have a tendency to overengineer things. But this time I brainstormed with Claude Code and found a simpler solution. Something low-maintenance: built on my infrastructure, hosted elsewhere. Just write markdown and publish.
graph LR
A[Forgejo Repo] -->|push to main| B[Forgejo CI]
B -->|hugo build| C[gh-pages branch]
C -->|mirror sync| D[GitHub]
D -->|GitHub Pages| E[hai.wxs.ro]

Source stays private in Forgejo. Public site lives on GitHub Pages with free SSL.
Why Not Self-Host?
My homelab runs 90+ Flux-managed applications across a 3-node Proxmox cluster. Adding another service means more maintenance, more updates, more things that can break at 2 AM.
For a simple blog? Overkill.
The Stack
| Component | Choice | Why |
|---|---|---|
| Static generator | Hugo | Fast builds, Go templating |
| Theme | Hextra | Modern Tailwind-based, dark mode, search, diagrams |
| Source hosting | Forgejo | Self-hosted, private |
| CI/CD | Forgejo Actions | GitHub Actions compatible |
| Public hosting | GitHub Pages | Free, CDN-backed, zero maintenance |
| Comments | Giscus | GitHub Discussions-based, no separate account needed |
How It Works
- Push markdown to
mainbranch in Forgejo - Forgejo CI builds the site with Hugo
- Built files pushed to
gh-pagesbranch - Forgejo mirror syncs to GitHub automatically
- GitHub Pages serves the content
The entire pipeline runs in under a minute.
Key Decisions
Why not Cloudflare Pages? GitHub Pages is simpler for this use case - just push to a branch.
Why Forgejo mirror? I already use Forgejo mirrors for backup. The gh-pages branch syncs automatically alongside the main branch.
Why Hextra? Modern Tailwind-based theme with FlexSearch, Mermaid diagrams, and dark mode out of the box.
What’s Next
This blog will document the homelab journey - infrastructure patterns, automation workflows, and lessons learned from running self-hosted services at home.
