May 22, 2026
Building an app with OpenSpec (openspec.dev) involves a process called Spec-Driven Development (SDD). Instead of jumping straight into coding, you define a …
May 15, 2026
The Repository That Doesn’t Grow: Criteria over Finder Methods SessionRepository in the Laptime Insights server is ~130 lines and exposes seven public …
May 14, 2026
Building useful software is the best way to learn. Building useful software for a problem you actually have is even better.
I race in Assetto Corsa …
May 13, 2026
Side projects are a good place to do things properly. Not because the project demands it, but because you want the practice.
My ACC dashboard project — …
May 12, 2026
Remote-controlling a simulator with gRPC and Protobuf I have an Assetto Corsa Competizione (ACC) simulator that replays recorded UDP traffic. It is a useful …
May 11, 2026
Anatomy of a Search Endpoint: Filter, Sort, Paginate, HATEOAS A walk through GET /api/1/sessions in the Laptime Insights server — from the Ktor route, down …
May 3, 2026
The Strategic Case for Programmable Sample Data I. The Core Thesis Manual database entry is a bottleneck that introduces inconsistency. The most effective way …
May 1, 2026
Completing your GitHub Profile While I’m looking for a job I thought I’d find out how I could improve my Github profile. This was the advice I …
April 30, 2026
Stop Serving PNG: Switch to WebP and Cut Your Image Sizes by 80% WebP is the modern image format your website should already be using. Google’s cwebp tool …
April 27, 2026
We all love Markdown. It’s the lingua franca of the modern developer—the default choice for READMEs, GitHub comments, and even this blog. But recently, I …