Personal blog at blog.misha.casa, built with Jekyll + a handwritten theme, served by GitHub Pages.
_config.yml site config
.github/workflows/
pages.yml build + Pagefind index + raw-markdown copy + deploy
_layouts/ default / home / page / post
_includes/ head / header / footer / giscus
_sass/
syntax.scss Rouge syntax colours (light + dark)
assets/
css/main.scss theme styles
js/copy-code.js copy-to-clipboard buttons on <pre>
_posts/ posts — YYYY-MM-DD-slug.md
tags.html /tags/ — index + per-tag sections
search.html /search/ — Pagefind-powered
index.md home
about.md /about/
CNAME custom domain
We use a GitHub Actions workflow (not the default Pages builder) so we
can run modern Jekyll 4, Pagefind, and a small post-build step. On every push
to main:
bundle exec jekyll buildrenders the site into_site/.- A shell loop copies each
_posts/*.mdto its permalink path with a.mdextension — sohttps://blog.misha.casa/2026/05/04/hello-world/also has a raw source at.../hello-world.md. Handy for LLMs / agents / scrapers. - Pagefind indexes the built HTML and drops its assets at
/pagefind/. - The
_sitedirectory is uploaded and deployed to Pages.
To enable: GitHub → Settings → Pages → Build and deployment → Source = GitHub Actions.
Create _posts/YYYY-MM-DD-some-slug.md:
---
layout: post
title: "Your title"
date: 2026-05-04 12:00:00 +0000
tags: [tag1, tag2]
---Optional front-matter extras:
description:— a one- or two-sentence summary. Shown under the title on the home page and/tags/, and used byjekyll-seo-tagfor<meta name="description">and Open Graph previews. If omitted, the first paragraph of the post is used as a fallback (truncated to ~180 chars). You can also force a cut point in the body by inserting<!--more-->— text before that marker becomes the excerpt.redirect_from: [/old/path/]— rename-proofs your URLs (jekyll-redirect-from).image: /assets/img/foo.png— used by jekyll-seo-tag for Open Graph previews.
To insert a table of contents at the top of a post, drop this just after the intro paragraph:
* toc
{:toc}- Enable Discussions on the repo: Settings → Features → Discussions.
- Install the giscus GitHub App: https://github.com/apps/giscus.
- Go to https://giscus.app/, enter
RatherBland/ratherbland.github.io, pick a Discussion category (a "General" or "Announcements" one works). - Copy the generated
data-repo-idanddata-category-idvalues into thegiscus:block in_config.yml, replacingFILL_ME_IN. - Push. Comments appear under every post.
- Typography: IBM Plex Mono throughout.
- Dark mode is automatic via
prefers-color-scheme— no toggle. - Colors, spacing, and syntax highlighting live in
assets/css/main.scssand_sass/syntax.scss. Both use CSS custom properties so retheming = edit:root. - Analytics: Umami, injected in
_includes/head.html, production-only.
Requires Ruby 3.x and Bundler:
bundle install
bundle exec jekyll serve --livereload
# -> http://127.0.0.1:4000Search won't work locally unless you also run Pagefind:
bundle exec jekyll build
npx -y pagefind --site _site --serve