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.

From a one-file scraper to a full background-jobs stack — personal projects, mostly Python, that I build for the itch of it and keep legible.Van een scraper van één bestand tot een complete achtergrondtaken-stack — persoonlijke projecten, meestal Python, gebouwd voor de lol en lekker overzichtelijk.

01 projectsprojecten

view all →bekijk alles →

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 →

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.