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

Building Winget Search - A fast web interface for Windows Package Manager

Learn how I built a fast web-based winget search tool to quickly find Windows Package Manager packages and generate installation commands instantly

Continue Reading