Blog
Latest
News from my projects - new tools, releases and lessons from the field. Also available as an RSS feed.
Finding a name for your software? What to watch out for
Code is often written faster than a name is found. A name should be free, findable and free of any troubling meaning. This post shows the order in which to check, which sources exist and where my own projects got stuck: Jira, Halma and a rename.
A web interface without a JavaScript project? FastHTML in the Python stack
FastHTML writes HTML as Python functions and gets its interactivity from HTMX. No npm, no build step, one language. What convinced me, where the tool does not belong, where you can run it - and how such an app turns into a single HTML file that works offline in the browser.
Why my timesheet tool now exists twice: terminal and desktop
Turning Jira worklogs into a timesheet, as Excel or PDF - my Textual application has been doing that in the terminal for a while. Now the same application exists a second time, as a native desktop interface built with Qt. Why you build the same tool twice, why the core is copied instead of imported, and why the desktop version comes under a different licence.
Built with .NET: Where the Apps Nobody Counts Actually Are
Ask for a ".NET application" and most people name KeePass, then Paint.NET, then go quiet. Yet one of the best-selling games of all time is written in C#, and so are the screenshot tools on your machine. A stocktake with hard numbers - and why GitHub stars are the wrong yardstick for it.
Quo Vadis: Building Desktop Applications with .NET
WinForms in 2002, WPF in 2006 - and then? Microsoft kept .NET desktop development confined to Windows for two decades and discontinued Silverlight and Xamarin along the way. If you want to build for Windows, Linux and macOS today, you do not end up at Microsoft. A stocktake with a timeline, a platform matrix and NuGet numbers.
Tracker music: a nostalgic trip back to the 90s
One Vivaldi piece as OGG is 2.3 MB, a complete Amiga soundtrack only 339 KB. What tracker files are, why they stay so small, how to play them in the browser and when it pays off.
Using someone else's music in your own game? What to watch out for
I wanted relaxed background music for geo-finder. The first question was not which library to pick, but whether I was allowed to do it at all. What came out of it: the legal side, sources, formats, a player comparison and the special case of AI music.
"We are not only responsible for what we do, but also for what we do not do"
The line is attributed to Voltaire, and it describes software development better than much of what the industry says about itself. My tools look for errors on websites and analyse other people's servers to do it. Misuse cannot be prevented. My own defaults can: rate limit out of the box, robots.txt, a confirmed disclaimer, legal text in the reader's language.
Deploying self-hosted GitLab to Azure - secretless, but the wildcard federation does not apply
Workload Identity Federation replaces long-lived deploy secrets with short-lived OIDC tokens. On GitLab.com it is a single click - on a self-hosted GitLab instance you run into two Azure limits and end up building the token exchange yourself.
Tabler or AdminLTE 4? Two Bootstrap 5 dashboards compared
Both are free, MIT-licensed admin UI frameworks on Bootstrap 5.3, both jQuery-free, both with dark mode. Yet they make different choices. A comparison from practice - and why I ended up with Tabler for a build-step-free interface.
c2pa-scanner: finding AI-generated images on your own website
From August 2, 2026 the EU AI Act requires labeling of AI-generated content. My new TUI tool scans your website and finds images with AI provenance - via C2PA manifests and XMP/EXIF metadata.
retro-text-effects.js: terminal text effects for the browser
A browser port of the Python library TerminalTextEffects: 42 retro effects from decrypt to fireworks - in vanilla JavaScript, shipped as a single file, zero dependencies. Plus one new effect inspired by Ghostty: any emoji becomes a floating ASCII figure. With a live demo right inside this article.