
One of the goals for this site was a frictionless writing pipeline — write in Obsidian, publish to the web with a single command. Here’s how it works..
The Stack#
- Obsidian — where posts are written, on the laptop
- Hugo — static site generator, builds the HTML
- GitHub Actions — builds and deploys on every push
- GitHub Pages — hosts the final site
The Pipeline#
A single bash script handles everything between writing and publishing:
rsynccopies posts from the Obsidian vault to Hugo’scontent/blog/directory- A Python script converts Obsidian image syntax (
) to standard Hugo markdown and copies images tostatic/images/ - Git commits and pushes to main
- GitHub Actions picks up the push, runs
hugo --minify, and deploys to GitHub Pages
The whole thing takes about two minutes from running the script to the post being live.
Why This Setup#
Hugo is fast, free to host, and the source files are plain markdown in a git repo — no database, no CMS, no lock-in. Obsidian is already where notes and documentation live, so writing a blog post feels no different to writing any other note.
The pipeline itself is a small bash script and a short Python file — nothing exotic. It will eventually move to a custom domain via Cloudflare Pages, but for now GitHub Pages works perfectly.
What’s Next#
The next step is pointing this at a custom domain via Cloudflare and integrating it with the broader homelab stack — the same k3s cluster, ArgoCD, and CI/CD pipeline that manages everything else.
The source for this site is at github.com/pakube999/pakube999.github.io.
Credit#
The Obsidian-to-Hugo pipeline concept was inspired by NetworkChuck’s blog post on his writing workflow. The bash and Python scripts were adapted from his approach and modified for this setup — GitHub Actions deployment rather than Hostinger, and Linux paths throughout.