Personal editorial site and journal for Selja Keränen — built with Material for MkDocs and deployed to GitHub Pages. Quiet, text-first, with a hand-drawn survey-plate visual system.
make install # venv + dependencies (uv)
make serve # live preview at http://127.0.0.1:8000
make build # strict production build
make test # strict build + frontmatter + design-invariant checks
make new TITLE="A new post" CATEGORY=NotesRun make on its own for the full list.
Posts live in docs/blog/posts/. make new scaffolds one with valid front
matter; the full authoring contract (front matter, the closed category set, the
design-token rules, the art system) is in AGENTS.md.
docs/ content — index, about, archive, blog/, stylesheets/, javascripts/, assets/
overrides/ forked Material templates (masthead, home, archive, 404, footer, inline art)
hooks/ build hooks — hero_art.py: homepage cards, archive groups, per-post art
scripts/ author tooling — new_post.py
tests/ pytest — strict build, link + alt checks, front matter, design invariants
- Colour literals live only in
docs/stylesheets/tokens.css; everything else references tokens. Type is Fraunces (display) / Inter (body) / IBM Plex Mono (metadata), loaded once inoverrides/main.html. - The recurring datum line — a hairline, graduated ticks, one clay
benchmark ▲ — is the site's signature. See AGENTS.md and
docs/assets/art/README.md.
Push to main. .github/workflows/deploy.yml builds with
mkdocs build --strict and publishes to GitHub Pages. ci.yml runs lint +
tests on every push and pull request. Nothing to do by hand.