<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hi, I'm Ben. I use code to solve your problems. on BEN ABT</title><link>https://benjamin-abt.com/</link><description>Recent content in Hi, I'm Ben. I use code to solve your problems. on BEN ABT</description><generator>Hugo</generator><language>en-US</language><atom:link href="https://benjamin-abt.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Azure Static Web Apps with GitHub Actions: Pull Request Preview Environments, automatic teardown and stable production URLs</title><link>https://benjamin-abt.com/blog/2026/05/06/azure-static-web-app-pull-request-preview-urls-with-teardown/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/05/06/azure-static-web-app-pull-request-preview-urls-with-teardown/</guid><description>&lt;p&gt;Azure Static Web Apps has one feature that is easy to underestimate until a team starts using it seriously: pull requests can behave like first-class deployment units.&lt;/p&gt;</description></item><item><title>Backing Up GitHub Repositories on Synology NAS with gickup</title><link>https://benjamin-abt.com/blog/2026/04/23/backup-github-repositories-on-synology-with-gickup/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/04/23/backup-github-repositories-on-synology-with-gickup/</guid><description>&lt;p&gt;GitHub is an operational platform, not a backup strategy. For a long time, that distinction often felt theoretical because GitHub is - usually - highly available and because Git itself already distributes history well. The gap becomes visible once repositories are treated as regulated business assets instead of convenient hosting locations.&lt;/p&gt;</description></item><item><title>The new Microsoft Testing Platform for .NET: An introduction with practical samples and migration guidance</title><link>https://benjamin-abt.com/blog/2026/03/25/dotnet-microsoft-testing-platform/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/03/25/dotnet-microsoft-testing-platform/</guid><description>&lt;p&gt;Testing in .NET has historically been associated with VSTest. That choice was reasonable for a long time because VSTest offered broad tooling support, deep IDE integration and a familiar execution model for MSTest, xUnit and NUnit projects. But the .NET ecosystem has changed. Native AOT, trimming, simplified deployment models, executable-first workflows and more explicit build-time configuration have pushed the platform toward models that do not fit particularly well with the older test infrastructure.&lt;/p&gt;</description></item><item><title>GitHub Copilot - Custom Agents for Full-Stack Teams: A Practical Operating Model for .NET, React and Azure</title><link>https://benjamin-abt.com/blog/2026/03/17/github-copilot-custom-agents-team/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/03/17/github-copilot-custom-agents-team/</guid><description>&lt;p&gt;GitHub Copilot custom agents allow teams to define specialized AI assistants, each with its own role, tool access and behavioral boundaries. Instead of relying on one general-purpose assistant for everything, a team can create multiple agents that mirror the actual roles in the engineering organization. After working with custom agents for a while, the biggest insight was simple: the quality of AI-assisted engineering improves dramatically once the AI knows what role it is supposed to play.&lt;/p&gt;</description></item><item><title>.NET NuGet Trusted Publishing with GitHub Actions</title><link>https://benjamin-abt.com/blog/2026/03/10/dotnet-nuget-trusted-publishing-github-actions/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/03/10/dotnet-nuget-trusted-publishing-github-actions/</guid><description>&lt;p&gt;Publishing NuGet packages has traditionally required one uncomfortable compromise: a long-lived API key had to exist somewhere in the delivery pipeline. Even when that secret was stored in a secure CI system, the model still relied on a credential that could be leaked, copied, mis-scoped or forgotten. Once exposed, that key could often be reused until someone noticed the incident and rotated it.&lt;/p&gt;</description></item><item><title>C# 15 Unions: Unions are finally in .NET</title><link>https://benjamin-abt.com/blog/2026/03/09/csharp-15-unions-and-unio/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/03/09/csharp-15-unions-and-unio/</guid><description>&lt;p&gt;After many years of workarounds, design discussions and library-level substitutes, unions are finally becoming a first-class part of C#. The proposal in the &lt;a href="https://github.com/dotnet/csharplang/blob/main/proposals/unions.md"&gt;C# language repository&lt;/a&gt;
 is no longer a distant idea. With the feature now appearing in the .NET 11 preview train as an early C# 15 capability, the direction is concrete enough to discuss in practical terms.&lt;/p&gt;</description></item><item><title>Unio: High-Performance Discriminated Unions for C#</title><link>https://benjamin-abt.com/blog/2026/03/02/unio-high-performance-discriminated-unions-csharp/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/03/02/unio-high-performance-discriminated-unions-csharp/</guid><description>&lt;p&gt;C# is a powerful language, but there is one road it has not yet fully paved: native discriminated union types. Developers have been working around this absence for years, typically choosing between throwing exceptions for non-exceptional paths, returning nullable values, using &lt;code&gt;out&lt;/code&gt; parameters or layering custom wrapper classes on top of every service boundary. Each of these approaches carries a cost - in clarity, type safety or runtime efficiency.&lt;/p&gt;</description></item><item><title>Run Azure Cosmos DB locally with .NET Aspire and make emulator endpoints visible in the dashboard</title><link>https://benjamin-abt.com/blog/2026/02/26/dotnet-aspire-cosmosdb-local-emulator/</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/02/26/dotnet-aspire-cosmosdb-local-emulator/</guid><description>&lt;p&gt;When building cloud-native .NET applications, two goals often matter at the same time: a fast local development loop and a clean path to real Azure resources for publish mode. .NET Aspire with Azure Cosmos DB supports exactly this pattern.&lt;/p&gt;</description></item><item><title>.NET 11 Preview 1 Is Here: What's New and What to Expect</title><link>https://benjamin-abt.com/blog/2026/02/20/dotnet-11-preview-1/</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/02/20/dotnet-11-preview-1/</guid><description>&lt;p&gt;The .NET team just released the first preview of .NET 11 and there is already a lot to talk about. While this is an early preview - not a release candidate - the breadth of changes touching the runtime, libraries, ASP.NET Core, Blazor, C#, the SDK and Entity Framework Core gives a clear picture of where the platform is heading. Let me walk you through the most important changes you should know about.&lt;/p&gt;</description></item><item><title>Agent Skills Standard: The Quality Contract Behind Reliable AI Agents</title><link>https://benjamin-abt.com/blog/2026/02/12/agent-skills-standard-github-copilot/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/02/12/agent-skills-standard-github-copilot/</guid><description>&lt;p&gt;Large language model agents can appear intelligent while still producing unstable output across runs, contexts and tasks. In practice, this instability is rarely caused by model quality alone. The dominant factor is often missing operational structure: no explicit boundaries, no role-specific constraints, no reusable task patterns and no agreed execution policy.&lt;/p&gt;</description></item><item><title>Create a Local SQL Server Database File with .NET</title><link>https://benjamin-abt.com/blog/2026/02/09/create-localdb-file-dotnet/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/02/09/create-localdb-file-dotnet/</guid><description>&lt;p&gt;Local SQL Server database files provide a pragmatic way to keep a real SQL Server engine close to the application without provisioning a full server. A LocalDB database lives in a single .mdf file (plus a log file), runs in user mode and behaves like SQL Server for most application scenarios. That makes it a strong fit for local development, integration tests and tooling that needs relational features without the overhead of infrastructure setup.&lt;/p&gt;</description></item><item><title>Building Custom AI Tooling with the GitHub Copilot SDK for .NET</title><link>https://benjamin-abt.com/blog/2026/02/03/github-copilot-sdk-dotnet-tooling/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/02/03/github-copilot-sdk-dotnet-tooling/</guid><description>&lt;p&gt;The landscape of AI development is shifting rapidly from simple chat interfaces to fully integrated, agentic workflows like the &lt;a href="https://awesomeclaude.ai/ralph-wiggum"&gt;Ralph Loop&lt;/a&gt;
. GitHub has recently introduced the &lt;a href="https://github.com/github/copilot-sdk"&gt;GitHub Copilot SDK&lt;/a&gt;
, a powerful toolkit that allows developers to programmatically harness the engine behind the GitHub Copilot CLI.&lt;/p&gt;</description></item><item><title>Ralph Loop: Autonomous Coding with GitHub Copilot CLI</title><link>https://benjamin-abt.com/blog/2026/01/19/ralph-loop-github-copilot-cli-dotnet/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/01/19/ralph-loop-github-copilot-cli-dotnet/</guid><description>&lt;p&gt;What if an AI agent could write code, run tests, fix errors and repeat this process autonomously until the job is done? The Ralph Wiggum Method makes this possible with a simple but powerful loop pattern. Named after the lovable Simpsons character, it embodies the philosophy: &lt;em&gt;persistence wins over perfection&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Serve SPAs correctly on Cloudflare Workers</title><link>https://benjamin-abt.com/blog/2026/01/05/cloudflare-workers-react-spa-routing/</link><pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/01/05/cloudflare-workers-react-spa-routing/</guid><description>&lt;p&gt;Single Page Applications like React expect the server to always return &lt;code&gt;index.html&lt;/code&gt; and let the client-side router take over. On Cloudflare Workers you can do that without custom code as long as &lt;code&gt;wrangler.toml&lt;/code&gt; is set up correctly. This post shows the minimal configuration and why two options are essential for SPAs.&lt;/p&gt;</description></item><item><title>Automate Pull Request Comments with GitHub Actions</title><link>https://benjamin-abt.com/blog/2026/01/04/github-action-add-or-update-custom-comment/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/01/04/github-action-add-or-update-custom-comment/</guid><description>&lt;p&gt;When working with Pull Requests (PRs) in GitHub, it is often helpful to provide immediate feedback or relevant information directly in the conversation view. Whether it is a deployment preview URL, code coverage results or a summary of changes, having this information automatically posted as a comment saves time and improves collaboration.&lt;/p&gt;</description></item><item><title>Build a Custom FeatureGate Attribute in ASP.NET Core with C#</title><link>https://benjamin-abt.com/blog/2026/01/02/custom-featuregate-attribute-asp-net-core/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2026/01/02/custom-featuregate-attribute-asp-net-core/</guid><description>&lt;p&gt;Feature management is a key technique in modern web applications, allowing you to enable or disable features dynamically without redeploying your code. In ASP.NET Core, the &lt;a href="https://www.nuget.org/packages/Microsoft.FeatureManagement"&gt;Microsoft.FeatureManagement&lt;/a&gt;
 library provides a robust way to implement feature flags. But what if you want to ensure that administrators can always access certain features, even if those features are disabled for regular users?&lt;/p&gt;</description></item><item><title>Home Assistant via Docker auf einer Synology NAS installieren</title><link>https://benjamin-abt.com/blog/2025/12/27/home-assistant-auf-synology-mit-docker-installieren/</link><pubDate>Sat, 27 Dec 2025 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2025/12/27/home-assistant-auf-synology-mit-docker-installieren/</guid><description>&lt;blockquote&gt;
&lt;p&gt;You can find the English version of this guide here: &lt;a href="https://benjamin-abt.com/blog/2025/12/27/install-home-assistant-on-synology-with-docker/"&gt;Install Home Assistant on Synology NAS with Docker&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Home Assistant ist für viele der &amp;ldquo;Hub&amp;rdquo; im Smart Home: lokal, erweiterbar, mit riesigem Ökosystem. Wenn du bereits eine Synology NAS hast, ist sie oft die perfekte Plattform, um Home Assistant als Container zu betreiben – ohne extra Raspberry Pi.&lt;/p&gt;</description></item><item><title>Install Home Assistant on Synology NAS with Docker</title><link>https://benjamin-abt.com/blog/2025/12/27/install-home-assistant-on-synology-with-docker/</link><pubDate>Sat, 27 Dec 2025 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2025/12/27/install-home-assistant-on-synology-with-docker/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Die deutsche Version findest du hier: &lt;a href="https://benjamin-abt.com/blog/2025/12/27/home-assistant-auf-synology-mit-docker-installieren/"&gt;Home Assistant via Docker auf einer Synology NAS installieren&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Home Assistant is the &amp;ldquo;hub&amp;rdquo; for many smart homes: local-first, extensible and backed by a huge ecosystem. If you already run a Synology NAS, it’s often a great platform to host Home Assistant in a container-no extra Raspberry Pi required.&lt;/p&gt;</description></item><item><title>TOON Format: Token-Oriented Object Notation for LLM-Friendly Data Exchange</title><link>https://benjamin-abt.com/blog/2025/12/12/ai-toon-format/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2025/12/12/ai-toon-format/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If you build systems that pass structured data through large language models (LLMs), you eventually hit the same set of issues:&lt;/p&gt;</description></item><item><title>IMemoryCache Entry Invalidation (Manual Cache Busting)</title><link>https://benjamin-abt.com/blog/2025/12/05/imemorycache-entry-validation/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0000</pubDate><guid>https://benjamin-abt.com/blog/2025/12/05/imemorycache-entry-validation/</guid><description>&lt;p&gt;&lt;code&gt;IMemoryCache&lt;/code&gt; is great for speeding up expensive operations (database reads, HTTP calls, heavy computations). But many real systems need more than a TTL:&lt;/p&gt;</description></item></channel></rss>