00 — homehome

My corner of the internet for the projects I find exciting.M'n hoekje van het internet voor de projecten waar ik enthousiast van word.

Personal projects I build because I need them: from Python tools to a design system in TypeScript. Kept legible, and all open source.Persoonlijke projecten die ik bouw omdat ik ze nodig heb: van Python-tools tot een design system in TypeScript. Overzichtelijk gehouden, en allemaal open source.

01 — projectsprojecten

view all →bekijk alles →

lintje

2026

The Rijkshuisstijl as web components, for applications as well as websites. Most component libraries stop at content pages; I also needed what an application is made of: charts, a side navigation, a dark mode that holds up everywhere and animation that feels right. Designed in Claude Design, with WCAG AA as the floor, and every component checked by axe in three browsers — light and dark, desktop and phone.De Rijkshuisstijl als webcomponenten, voor applicaties én websites. De meeste componentbibliotheken houden op bij contentpagina's; ik had ook nodig waar een applicatie uit bestaat: grafieken, een verticale navigatie, een dark mode die overal klopt en animaties die goed aanvoelen. Ontworpen in Claude Design, met WCAG AA als ondergrens, en elk component door axe gecontroleerd in drie browsers — licht en donker, desktop en telefoon.

typescriptlitweb-componentswcag

kobo2readwise

2026

Highlights from sideloaded Kobo books live only in the device's local SQLite and never touch the cloud, so Readwise can't fetch them. The known fix is a desktop app (October); I did it in the browser instead — read KoboReader.sqlite with sql.js over the File System Access API and forward the highlights through a stateless proxy that forgets your token.Aantekeningen uit zelf-geüploade Kobo-boeken staan alleen in de lokale SQLite van het apparaat en bereiken de cloud nooit, dus Readwise kan ze niet ophalen. De bekende oplossing is een desktop-app (October); ik deed het in de browser — KoboReader.sqlite lezen met sql.js via de File System Access API en de aantekeningen doorsturen via een stateless proxy die je token vergeet.

pythonfastapisqlitewasm

online-bibliotheek-catalogus

2026

The official onlinebibliotheek.nl search drove me up the wall, so I scraped the whole catalog into SQLite + FTS5 and gave it the fast, faceted search it deserved. Enumerate, parse, normalize with an atomic rebuild, rank with bm25.De officiële zoekfunctie van onlinebibliotheek.nl dreef me tot wanhoop, dus schraapte ik de hele catalogus naar SQLite + FTS5 en gaf 'm de snelle, gefacetteerde zoekfunctie die-ie verdient. Enumereren, parsen, normaliseren met een atomische rebuild, ranken met bm25.

pythonfastapisqlitefts5

firm

2026

I wanted Rails 8's Solid stack in Python, so I built it. Background jobs, caching, pub/sub, and an append-only audit log that all live in the SQL database you already run — no Redis. Four independent modules; SQLite, PostgreSQL, and MySQL.Ik wilde de Solid-stack van Rails 8 in Python, dus bouwde ik 'm. Achtergrondtaken, caching, pub/sub en een append-only auditlog die allemaal in de SQL-database draaien die je toch al hebt — geen Redis. Vier onafhankelijke modules; SQLite, PostgreSQL en MySQL.

pythonpostgressqlitemysql

02 — writingartikelen

view all →bekijk alles →

lintje: the Rijkshuisstijl, for applicationslintje: de Rijkshuisstijl, voor applicaties

Most component libraries are made for content websites. An application needs more — charts, a side navigation, a dark mode that holds up everywhere — so I built a design system that has all of it. Designed in Claude Design, tested against WCAG in three browsers.De meeste componentbibliotheken zijn gemaakt voor contentwebsites. Een applicatie heeft meer nodig — grafieken, een verticale navigatie, een dark mode die overal klopt — dus bouwde ik een design system waar dat allemaal in zit. Ontworpen in Claude Design, getest tegen WCAG in drie browsers.

How firm's audit log knows if someone tampered with itHoe firm's auditlog merkt dat er in geknoeid is

An audit log is only useful if you can trust it wasn't edited. Here's how firm proves nobody quietly changed, deleted, or faked a log entry — explained as simply as I can.Een auditlog is alleen nuttig als je erop kunt vertrouwen dat er niet in gewijzigd is. Zo bewijst firm dat niemand stiekem een logregel heeft veranderd, verwijderd of vervalst — zo simpel mogelijk uitgelegd.

Kobo highlights into Readwise — no desktop app, just the browserKobo-aantekeningen naar Readwise — zonder desktop-app, gewoon in de browser

Highlights from sideloaded Kobo books live only on the device. October solves that with a desktop app; I did the same thing in the browser, using the File System Access API and sql.js.Aantekeningen uit zelf-geüploade Kobo-boeken staan alleen lokaal op je e-reader. October lost dat op met een desktop-app; ik deed hetzelfde in de browser, met de File System Access API en sql.js.

release-please bumps your version but forgets uv.lockrelease-please bumpt je versie maar vergeet uv.lock

release-please updates pyproject.toml but not uv.lock's self-referential version pin, so `uv sync --locked` fails on the release commit. Here's a clean fix that keeps the lock in sync inside the release PR.release-please werkt pyproject.toml bij maar niet de zelf-verwijzende version-pin in uv.lock, dus `uv sync --locked` faalt op de release-commit. Hier is een nette fix die de lock in sync houdt binnen de release-PR.

firm: the Rails Solid stack, in pure Pythonfirm: de Rails Solid-stack, in pure Python

Background jobs, caching, pub/sub, and an audit log that all live in your existing SQL database. Ports of Rails 8's Solid stack — no Redis required.Achtergrondtaken, caching, pub/sub en een auditlog die allemaal in je bestaande SQL-database draaien. Ports van de Solid-stack uit Rails 8 — geen Redis nodig.

Owning the catalog: a faster search for the Dutch online libraryDe catalogus in eigen hand: sneller zoeken in de Nederlandse online bibliotheek

The official onlinebibliotheek.nl search is poor, so I scraped the whole catalog into SQLite + FTS5 and built my own fast, faceted search UI.De officiële zoekfunctie van onlinebibliotheek.nl is slecht, dus schraapte ik de hele catalogus naar SQLite + FTS5 en bouwde er mijn eigen snelle, gefacetteerde zoek-UI op.