How this site is built
I write in Org, convert with pandoc, and build with Hugo. Here is the whole pipeline in one screen.
Writing
Every post is a file in org/{.verbatim}. This one starts like:
#+TITLE: How this site is built
#+DATE: 2026-10-02
Body text in Org.Org gives me headings, tables, source blocks, footnotes, and export keywords. I never hand-write HTML.
Converting
A small script turns each Org file into Hugo Markdown with front matter:
pandoc -s -f org -t markdown --wrap=none org/post.org \
-o content/posts/post/index.mdPandoc maps #+TITLE{.verbatim} and #+DATE{.verbatim} to YAML front matter. One extra step maps #+FILETAGS{.verbatim} to Hugo tags.
Building and shipping
hugo --minify # Org -> HTML into public/CI runs the same steps on every push:
- convert Org to Markdown
- run
hugo --minify{.verbatim} - build a small nginx image that contains
public/{.verbatim} - push the image to GHCR and bump its tag
ArgoCD watches the manifest and rolls out the new image. I never deploy by hand.
Four jobs, four tools
Job Tool
writing Org and Emacs conversion pandoc build Hugo deploy GHCR and ArgoCD
Each tool does one thing, which means I can replace any of them without touching the rest.