Blogging with Eleventy
I’ve been refining a blogging workflow to go more smoothly and less like a chore, and trying to do it without a big honking CMS like WordPress. Thanks to Forgejo, Eleventy, and a sprinkle of automation, it finally feels like it’s clicking. I’m hosting my site’s source and posts on Forgejo, a lightweight, open-source, self-hosted Git platform with a friendly interface and robust CI/CD. It feels like the right balance of power and control without the bloated overhead of larger platforms.
The site lives in a Git repository, and every post is just a Markdown file living in a /posts/ directory. All changes are version-controlled, and I can create new entries, fix typos, or even rework site layout with a pull request. Eleventy (11ty) is a static site generator that's super easy to get up to speed on. It doesn’t assume too much, doesn’t force me to use a particular framework or build pipeline, and it lets me keep things just how I likes it. Markdown, HTML, and a few custom templates.
Here’s how it all fits together:
This means I can blog from my laptop, tablet, or phone (the web based forgejo editor is Not Bad). No CMS, no database, no nonsense. It’s just enough automation to reduce friction, but not so much that it gets brittle or confusing. This setup is fast, minimal, and empowering. It’s a developer-friendly publishing flow that respects my time and doesn’t box me in. If you’ve been looking for a way to make blogging feel like hacking again—with full control over your stack—I can’t recommend Forgejo + Eleventy enough.
- Write a post – I create a .md file in /posts/, give it a title and frontmatter. (I made a little bash script to start the file with all the goodies)
- Push to Forgejo – I commit and push to the main branch (or submit a PR for myself to review if I’m feeling fancy).
- Forgejo Actions build the site – A Forgejo CI job automatically runs npx @11ty/eleventy and deploys to my server over SSH.
- Site updates automatically – My site rebuilds and reflects changes live, often in under 30 seconds.