Personal blog covering platform engineering, Kubernetes, and AI/ML infrastructure.
Built with Jekyll + Chirpy, hosted on GitHub Pages.
Requires Docker — no local Ruby/Jekyll install needed.
The theme's static assets (fonts, JS libs) are self-hosted via a git submodule
(assets/lib), so clone with --recurse-submodules:
git clone --recurse-submodules https://github.com/allexistence/allexistence.github.io.gitIf you already cloned without it:
git submodule update --initThen:
docker compose upOpen http://localhost:4000. Edit any file and refresh the page — Jekyll
auto-rebuilds on save. If you edit _config.yml, restart instead of just refreshing:
docker compose restartStop the server with Ctrl+C, or docker compose down if it's running in the background. If you
add a gem to the Gemfile, rebuild the image:
docker compose up --buildCreate a new file in _posts/, inside a folder named after the post's date, e.g.:
_posts/YYYY-MM-DD/YYYY-MM-DD-a-short-slug.md
The date must appear in both the folder name (for organization) and the filename itself — Jekyll only recognizes a post by its filename, not its folder, so the date prefix on the file is required either way.
Add front matter at the top of the file:
---
title: "Post Title"
date: 2026-08-15 09:00:00 +0800
categories: [Category Name]
tags: [tag-one, tag-two, tag-three]
---Then write the post in Markdown below the front matter. A few notes:
- Categories are broad sections (shown on the
/categories/page) — keep each post to one or two. - Tags are finer-grained keywords (shown on the
/tags/page) — reuse existing tags where they fit so the tag cloud stays useful; check/tags/for what already exists. - The homepage shows the 4 most recent posts with a "See more posts" button — no extra config needed, new posts just appear at the top automatically, newest first.
- Comments and emoji reactions are enabled by default on every post (via giscus) — nothing to turn on per post.
- To link out to an externally-hosted post instead of writing one here, see any of the existing
Medium-redirect posts in
_posts/for the pattern (a<script>redirect plus a fallback link).
Before opening a PR, verify your post's filename, folder, and front matter are all correct:
docker compose exec site ruby tools/check_post_format.rbIt checks that every post: has a YYYY-MM-DD-slug.md filename, lives in a matching YYYY-MM-DD/
folder, has valid YAML front matter, and has a non-empty title, date, categories, and tags.
This also runs automatically as a CI check on every pull request.