Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
c6cbc27
chore(git): ignore .DS_Store
davidbudzynski Sep 7, 2026
08a9443
fix(posts): align filenames with front-matter dates
davidbudzynski Sep 7, 2026
d5b49a8
fix(posts): drop legacy category, preserve URLs with redirects
davidbudzynski Sep 7, 2026
86f8eb2
feat(posts): add SEO descriptions and normalize tags
davidbudzynski Sep 7, 2026
3d664dc
feat(config): set lang, UK timezone, stable permalinks, nav and SEO d…
davidbudzynski Sep 7, 2026
127e6a4
feat(home): add intro blurb with About, Tags, Archive and RSS links
davidbudzynski Sep 7, 2026
a8354ab
feat(archive): add chronological archive page grouped by year
davidbudzynski Sep 7, 2026
9068a61
fix(404): link home, archive and tags
davidbudzynski Sep 7, 2026
1f0db0f
feat(posts): add prev-next nav and related posts, stable comment threads
davidbudzynski Sep 7, 2026
2616677
polish(about): cross-link archive, tags, projects and RSS
davidbudzynski Sep 7, 2026
ce2e47a
polish(head): add theme-color and apple-touch-icon
davidbudzynski Sep 7, 2026
06ab7d4
polish(images): lazy-load screenshots and fix alt text
davidbudzynski Sep 7, 2026
6ccfbdf
feat(search): add offline-friendly client-side search over generated …
davidbudzynski Sep 7, 2026
ca2bcb4
docs(site): add license and link search from home
davidbudzynski Sep 7, 2026
aeeec03
test(site): add static regression suite and CI workflow
davidbudzynski Sep 7, 2026
1e40347
fix(config): drop minima 3.x-only social_links, document skin forward…
davidbudzynski Sep 7, 2026
2fa6612
fix(posts): correct prev-next labels and lock with test
davidbudzynski Sep 7, 2026
8494025
fix(config): exclude tests dir from built site
davidbudzynski Sep 7, 2026
91863dc
chore(git): ignore Python cache dirs
davidbudzynski Sep 7, 2026
e686cba
fix(posts): add excerpt markers so home shows previews, not full arti…
davidbudzynski Sep 7, 2026
b4c4836
test(site): enforce excerpt markers in posts and drafts
davidbudzynski Sep 7, 2026
b83c707
feat(home): show hand-written description teasers instead of raw exce…
davidbudzynski Sep 7, 2026
672175a
fix(posts): repair stale post_url left by rename; scan posts and draf…
davidbudzynski Sep 7, 2026
bbc92ab
test(site): rewrite suite in Ruby stdlib minitest, drop Python version
davidbudzynski Sep 7, 2026
f7a3232
fix(posts): bring new master posts up to branch conventions
davidbudzynski Sep 7, 2026
f791116
build(deps): bump json to 3.0.0 via bundle update
davidbudzynski Sep 7, 2026
25f7f9c
ci(build): verify Jekyll build and internal links with html-proofer
davidbudzynski Sep 7, 2026
28bc6d8
docs(license): GPLv3 for code and examples, all rights reserved for p…
davidbudzynski Sep 7, 2026
3af6174
docs(license): CC BY-NC-ND 4.0 for prose and images, GPLv3 stays for …
davidbudzynski Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: tests

on:
push:
pull_request:

jobs:
site-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Stdlib only (minitest + yaml) — no `bundle install` needed,
# so this stays fast.
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
- run: ruby -Itests tests/test_site.rb

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
# --strict-front-matter fails on YAML errors; --future also
# compiles scheduled posts so broken Liquid/post_url in them
# surfaces now instead of on their go-live date.
- run: bundle exec jekyll build --strict-front-matter --future
# Internal links, images, and alt text only — external URLs are
# left out to keep PR checks deterministic (no network flakiness).
# Installed outside the Gemfile on purpose: production (GitHub
# Pages) must keep the exact github-pages gem set.
- run: gem install html-proofer --no-document
- run: htmlproofer ./_site --disable-external --allow-hash-href
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ _site
.jekyll-cache
.jekyll-metadata
vendor
.DS_Store
__pycache__/
2 changes: 2 additions & 0 deletions 404.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ <h1>404</h1>

<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
<p><a href="{{ "/" | relative_url }}">Back to home</a></p>
<p>Or browse the <a href="{{ "/archive/" | relative_url }}">archive</a> and <a href="{{ "/tags/" | relative_url }}">tags</a>.</p>
</div>
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ GEM
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
json (2.21.2)
json (3.0.0)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
Expand Down Expand Up @@ -386,7 +386,7 @@ CHECKSUMS
jekyll-titles-from-headings (0.5.3) sha256=77366754e361ea7b5d87881f5b1380835f5ce910c240a4d9ac2d7afe86d28481
jekyll-watch (2.2.1) sha256=bc44ed43f5e0a552836245a54dbff3ea7421ecc2856707e8a1ee203a8387a7e1
jemoji (0.13.0) sha256=5d4c3e8e2cbbb2b73997c31294f6f70c94e4d4fade039373e86835bcf5529e7c
json (2.21.2) sha256=1f1d3b7cf2b3ba1a69beca0bb6db13d5438b80bff3cd54cdaaa620b9b07c1c6a
json (3.0.0) sha256=1ff82a28c05c5cc7b646f3e3a3ac710e4ae2aa933690cba12f1f650b0ecdeb99
kramdown (2.4.0) sha256=b62e5bcbd6ea20c7a6730ebbb2a107237856e14f29cebf5b10c876cc1a2481c5
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
liquid (4.0.4) sha256=4fcfebb1a045e47918388dbb7a0925e7c3893e58d2bd6c3b3c73ec17a2d8fdb3
Expand Down
694 changes: 694 additions & 0 deletions LICENSE.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ It's a simple Jekyll-powered site, that I deploy on GitHub pages.

Feel free to send PRs addressing typos, bad grammar, visual glitches, etc.

## License

Site code and fenced code examples in posts are [GPLv3 or later](LICENSE.md).
Post prose and images are © David Budzyński, shared under
[CC BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/).
See [LICENSE.md](LICENSE.md) for details.

To run the site locally, you need to have Ruby installed (macOS and Linux are
both supported). Then run the following commands:

Expand Down
33 changes: 33 additions & 0 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

title: David Budzyński
author: David Budzyński
lang: en-GB
timezone: Europe/London
# email: your-email@example.com
description: >- # this means to ignore newlines until "baseurl:"
This is my blog where I share my thoughts on statistics, computer science, software, and technology.
Expand All @@ -28,12 +30,42 @@ url: "https://davidbudzynski.github.io" # the base hostname & protocol for your
github_username: davidbudzynski
rss: RSS

# Explicit permalink without :categories so URLs stay stable even if a
# category ever slips back into front matter.
permalink: /:year/:month/:day/:title.html
# Scheduled posts (future-dated) stay hidden until their date — intentional.
future: false
excerpt_separator: <!--more-->
show_excerpts: true

header_pages:
- about.md
- projects.md
- archive.md
- tags.html
- search.md

minima:
# NOTE: github-pages pins minima 2.5.1, which ignores `skin`.
# Kept as forward-compat for minima 3.x (auto = light/dark by OS setting).
skin: auto
# Social icons on minima 2.5.x come from the legacy `github_username` /
# `rss` keys above via _includes/social.html, not from social_links.

defaults:
- scope:
path: ""
type: posts
values:
layout: post

# Build settings
theme: minima
plugins:
- jekyll-feed
- jekyll-sitemap
- jekyll-seo-tag
- jekyll-redirect-from
# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
Expand All @@ -49,6 +81,7 @@ exclude:
- Gemfile
- Gemfile.lock
- node_modules/
- tests/
- vendor/bundle/
- vendor/cache/
- vendor/gems/
Expand Down
4 changes: 3 additions & 1 deletion _drafts/agent-skills-i-like-using.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [AI, Software, Tooling]
---

A tour of the skills, tools, and capabilities I enable for my coding agent, and
which ones I keep disabled.
which ones I keep disabled.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/automating-boring-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Linux, Shell, Tooling]
---

How I stop repeating myself: scripts and Makefiles for the chores that used to
waste my time.
waste my time.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/browser-extensions-that-respect-privacy.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ title : "Browser extensions that respect your privacy"
tags : [Web, Privacy]
---

The extensions I trust and use, and the ones I avoid.
The extensions I trust and use, and the ones I avoid.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/firefox-customization-part-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Web, Software, Privacy]
---

A deeper dive into Firefox customization with userChrome.css examples, following
up on the earlier Firefox post.
up on the earlier Firefox post.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/five-years-in-linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Linux]
---

A retrospective on the original "Two Years in Linux" post, updated with what
changed over the following years.
changed over the following years.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/how-i-use-an-agent-day-to-day.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [AI, Software, Tooling]
---

A realistic walkthrough of a session with my agent: from prompt to a reviewed,
committed change, including where it shines and where it trips up.
committed change, including where it shines and where it trips up.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/lessons-from-10-years-of-r.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [R, Data Science]
---

What a decade of R taught me about statistics, coding, and tooling. Advice I
would give my younger self.
would give my younger self.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/my-dotfiles-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ title : "My dotfiles setup and how I manage them"
tags : [Linux, Tooling]
---

How I structure, version, and sync my dotfiles across machines.
How I structure, version, and sync my dotfiles across machines.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/my-python-setup-in-2026.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Python, Tooling]
---

uv, ruff, pyright. Why I stopped caring about pip and venv, and how a modern
Python setup looks in practice.
Python setup looks in practice.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/program-spotlight-cli-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Software, CLI]
---

Part of the Program Spotlight series (following rclone and file managers). Covers
fzf, ripgrep, tmux, zoxide, and bat.
fzf, ripgrep, tmux, zoxide, and bat.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/program-spotlight-paperless-ngx.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Software, Self-hosting]
---

Document management done right: OCR, tagging, and search. Part of the Program
Spotlight series.
Spotlight series.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/python-packages-beyond-pandas-numpy.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Python, Data Science]
---

A personal list of the Python packages I reach for constantly that most people
never hear about.
never hear about.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/self-hosting-paperless-ngx.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Self-hosting, Privacy]
---

Paperless-ngx as a gateway into self-hosting: the setup, the payoff, and what
came after.
came after.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/using-rss-and-why-its-good.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [RSS, Web, Privacy]
---

Why RSS is still the best way to follow what matters, and how to set up a
reader that actually fits your life.
reader that actually fits your life.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/what-is-agentic-coding.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [AI, Software, Tooling]
---

A grounded introduction to agentic coding: what the tools actually do, their
limits, and the hype vs. reality.
limits, and the hype vs. reality.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/why-i-keep-this-blog.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Meta, Writing]
---

Reflections on running a small Jekyll blog on GitHub Pages: the writing
pipeline, what I get out of it, and why I keep going.
pipeline, what I get out of it, and why I keep going.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/why-i-moved-my-r-workflow-to-python.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [R, Python, Data Science]
---

Follow-up to "R is a Terrible Programming Language". What drove the migration,
what I kept in R, and how the transition went in practice.
what I kept in R, and how the transition went in practice.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/why-i-still-read-diffs.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [AI, Software, Tooling]
---

Agent-generated code still needs review. What I auto-accept, what I always
rewrite, and how I keep my git hygiene intact.
rewrite, and how I keep my git hygiene intact.

<!--more-->
4 changes: 3 additions & 1 deletion _drafts/why-i-use-a-tiling-window-manager.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ tags : [Linux, WM]
---

The workflow and productivity argument for tiling window managers, based on my
own daily setup.
own daily setup.

<!--more-->
7 changes: 7 additions & 0 deletions _includes/footer.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@
</div>
</div>

<div class="footer-license">
<p>© 2021–2026 David Budzyński. Prose and images:
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">CC BY-NC-ND 4.0</a>.
Site code and code examples:
<a href="{{ "/LICENSE.md" | relative_url }}">GPLv3 or later</a>.</p>
</div>

</div>

</footer>
3 changes: 3 additions & 0 deletions _includes/head.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{%- seo -%}
<meta name="theme-color" content="#fdfdfd" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)">
<link rel="stylesheet" href="{{ "/assets/main.css" | relative_url }}">
<link rel="icon" href="{{ "/favicon.ico" | relative_url }}">
<link rel="apple-touch-icon" href="{{ "/favicon.ico" | relative_url }}">
{%- feed_meta -%}
</head>
Loading
Loading