Now that the CI/CD is live, I don't need to touch a web UI or run manual build scripts. Everything is handled through a pure Git workflow.

1. Structure

All my content lives in the content/ directory. Zola uses "Front Matter" (the +++ TOML block) at the start of each file to handle metadata.

2. Creating a Post

To create a post, I just create a new markdown file locally:

touch content/my-new-post.md

I add the headers at the top:

+++
title = "My New Post"
date = 2026-03-25
[taxonomies]
tags = ["idea", "tutorial"]
+++

Your content goes here...

3. Deployment

Once I'm happy with the content, I just push to main. This triggers the Forgejo runner, which pulls the keys from OpenBao and syncs the site to Garage.

git add content/my-new-post.md
git commit -m "content: new post about X"
git push origin main

I can track the build progress at git.jaf.sh/jaf-sh/blog/actions. If the green checkmark appears, the site is live.