06 Aug 2026
My GA4 reports happily showed 2023 data while my Explorations refused to look past a few weeks. The cause was a default nobody changes, event data retention set to 2 months. It does not affect standard reports, which is exactly why it goes unnoticed, and it cannot be undone after the fact.
Continue Reading
04 Aug 2026
An OpenRouter email warning me that unused credits expire turned into a 300 line single-file .NET app. Covers .NET 10 file-based apps, streaming chat completions over server-sent events, reading per-token costs back from the API, browsing the live model catalogue by price, why the obvious usage endpoint reports the wrong number, storing the API key in the macOS keychain, and publishing the whole thing as a 5.4 MB native binary.
Continue Reading
03 Aug 2026
A start-to-finish account of building solrevdev.bbx, a .NET global tool for Bitbucket Cloud. Covers the System.CommandLine 2.0 rewrite, feature-slice architecture, API token auth, the four bugs that only show up against a live API, testing with a fake HTTP handler, and a publish workflow that will not push a duplicate version to NuGet.
Continue Reading
14 Nov 2025
Complete tutorial for upgrading .NET global tools to .NET 10 LTS. Learn how to add .NET 10 support while maintaining compatibility with .NET 8 (LTS) and .NET 9 (STS) using multi-targeting. Includes project configuration, dependency management, CI/CD pipeline updates, testing strategies, and real-world migration examples.
Continue Reading
27 Oct 2025
Complete tutorial on creating ytx, a .NET global tool for extracting YouTube video titles, descriptions, and transcripts as JSON. Covers YoutubeExplode library, caption selection logic, JSON serialization, NuGet packaging, and automated CI/CD with GitHub Actions.
Continue Reading