Why My GA4 Explorations Only Went Back Two Months

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

Building orchat - A Single File .NET Client for OpenRouter

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

Building bbx - A Bitbucket Cloud CLI as a .NET Global Tool

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

How to Upgrade to .NET 10 LTS - Complete Guide for .NET Global Tools with Multi-Targeting

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

Building ytx - A YouTube Transcript Extractor as a .NET Global Tool

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