Personal blog powered by Eleventy and hosted on GitHub Pages.
Live site: https://yarboa.github.io
- Static Site Generator: Eleventy (11ty)
- Template Engine: Liquid
- Deployment: GitHub Actions → GitHub Pages
- Local Development: Podman containers (UBI9 or Fedora)
Posts must follow the naming convention: YYYY-MM-DD-post-title.md
Example: 2026-02-18-my-new-post.md
---
layout: post
title: "Your Post Title"
categories: category-name
---
Your post content goes here...The frontmatter MUST start and end with exactly three hyphens (---):
--- ✅ Correct (3 hyphens)
layout: post
----- ❌ Wrong (2 hyphens) - will NOT work!
layout: post
---Important fields:
layout: post- Required, tells Eleventy to use the post layouttitle: "..."- Your post title (use quotes)categories: ...- Used in the URL path
Category Format:
- Single word:
categories: fedora→/fedora/YYYY/MM/DD/title.html - Multi-word (spaces):
categories: podman update→/podman/update/YYYY/MM/DD/title.html - Multi-word (hyphens):
categories: code-quality→/code-quality/YYYY/MM/DD/title.html - Multiple categories:
categories: containers code-quality→/containers/code-quality/YYYY/MM/DD/title.html
Note: Do not use commas in categories (e.g., containers, code-quality will fail)
Use standard Markdown syntax. The post will be available at:
https://yarboa.github.io/{category}/{YYYY}/{MM}/{DD}/post-title.html
Example:
- File:
_posts/2026-02-18-my-fedora-tip.md - Category:
fedora - URL:
https://yarboa.github.io/fedora/2026/02/18/my-fedora-tip.html
Example with multi-word category:
- File:
_posts/2026-03-11-sonarqube-setup-guide.md - Categories:
containers code-quality - URL:
https://yarboa.github.io/containers/code-quality/2026/03/11/sonarqube-setup-guide.html
See "Running Locally" section below.
git add _posts/2026-02-18-my-new-post.md
git commit -m "Add new post: My New Post"
git push origin mainGitHub Actions will automatically build and deploy your post in ~2-3 minutes.
You can develop locally using Podman containers or Node.js directly.
./run-eleventy-container.shThis builds and runs the container, then serves the site at http://localhost:8080
Build the container:
# Using Red Hat UBI 9 (recommended)
podman build -f Containerfile.eleventy -t eleventy-ubi:latest .
# OR using Fedora 40
podman build -f Containerfile.eleventy.fedora -t eleventy-fedora:latest .Run the container:
podman run -d -u root --replace -it \
--name eleventy-dev \
-v $(pwd):/app:Z \
-p 8080:8080 \
localhost/eleventy-ubi:latestView logs:
podman logs -f eleventy-devStop the container:
podman stop eleventy-dev- Hot reload: Changes to files auto-rebuild the site
- Live server: Runs on http://localhost:8080
- npm install on startup: Dependencies installed automatically
- Security audits: Runs
npm audit fix --forceon startup
Requirements: Node.js 20+
Install dependencies:
npm installRun development server:
npm run serveSite available at http://localhost:8080
Build only (no server):
npm run buildOutput goes to _site/ directory.
yarboa.github.io/
├── _posts/ # Blog posts (YYYY-MM-DD-title.md)
├── _layouts/ # Eleventy layouts
│ ├── default.liquid # Base layout (header, footer)
│ ├── post.liquid # Blog post layout
│ ├── page.liquid # Static page layout
│ └── home.liquid # Homepage with post list
├── assets/ # CSS, images, etc.
│ ├── main.css # Theme styles
│ └── custom.css # Custom backgrounds & styling
├── _site/ # Built site (generated, not in git)
├── .eleventy.js # Eleventy configuration
├── .github/workflows/ # GitHub Actions
│ └── deploy.yml # Auto-deploy workflow
├── Containerfile.eleventy # UBI9 container
├── Containerfile.eleventy.fedora # Fedora container
├── run-eleventy-container.sh # Container helper script
├── package.json # Node.js dependencies
└── README.md # This file
Edit assets/custom.css and uncomment one of the background options:
/* Option 1: Purple gradient (default) */
/* Option 2: Dark tech gradient */
/* Option 3: Warm sunset gradient */
/* ... 18+ options available */Or add your own image:
body {
background-image: url('/assets/your-image.jpg') !important;
background-size: cover !important;
background-attachment: fixed !important;
}Edit assets/custom.css:
.wrapper {
max-width: 940px !important; /* Change this value */
}Edit files in _layouts/ directory:
default.liquid- Site-wide structurepost.liquid- Blog post templatehome.liquid- Homepage post listing
Every push to main branch triggers automatic deployment:
- GitHub Actions runs the workflow (
.github/workflows/deploy.yml) - Installs Node.js and dependencies
- Builds Eleventy site
- Deploys to
gh-pagesbranch - GitHub Pages serves the site
Check deployment status: https://github.com/Yarboa/yarboa.github.io/actions
Go to Actions tab and click "Run workflow"
Eleventy configuration:
- Input/output directories
- Template engines (Liquid, Markdown)
- Date filters
- Post collections
- Passthrough copy for assets
NPM scripts:
npm run serve- Development servernpm run build- Build site to_site/npm run debug- Debug mode with verbose outputnpm run lint- Check markdown files for errorsnpm run lint:fix- Auto-fix markdown issuesnpm run setup-hooks- Configure git hooks
This project uses git hooks to ensure markdown quality before commits.
After cloning the repository, run:
npm install
npm run setup-hooksThis configures git to use the .githooks/ directory.
The hook automatically runs before each commit:
- Checks staged markdown files in
_posts/ - Validates frontmatter format (checks for
---delimiters) - Checks markdown syntax and style
- Blocks commit if errors are found
Check for errors:
npm run lintAuto-fix issues:
npm run lint:fixNote: Most linting errors can be automatically fixed with npm run lint:fix. For errors that cannot be auto-fixed (like frontmatter delimiters), you'll need to manually correct them.
Linting rules are defined in .markdownlint.json. Key rules:
MD001: Heading levels increment by oneMD022: Headings should be surrounded by blank linesMD047: Files should end with a single newlineMD013: Disabled (no line length limit)MD033: Disabled (allows inline HTML)
- Check file naming:
YYYY-MM-DD-title.mdformat - Verify frontmatter has
layout: post - Rebuild:
npx @11ty/eleventy - Check
_site/index.htmlhas posts listed
- Verify Settings → Pages → Branch is set to gh-pages
- Wait 2-3 minutes for cache to clear
- Hard refresh browser:
Ctrl+Shift+R
- Check Actions tab for errors
- Verify
package-lock.jsonis committed - Check
.eleventy.jssyntax
If the pre-commit hook doesn't run:
# Re-run setup
npm run setup-hooks
# Verify git config
git config core.hooksPath
# Should output: .githooks
# Check hook is executable
ls -la .githooks/pre-commit
# Should show: -rwxr-xr-xThis is a personal blog, but issues and suggestions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - Feel free to use this setup for your own blog!
- Live Site: https://yarboa.github.io
- GitHub Repo: https://github.com/Yarboa/yarboa.github.io
- Eleventy Docs: https://www.11ty.dev/
- GitHub Pages Docs: https://docs.github.com/en/pages