Articles
Every article, newest first: architecture, security, messaging, data, testing, front end, C# & .NET and tooling.
All articles
77 articles.
The Factory pattern in C#: a model client built for each organization's key
Learn when a factory earns its place in .NET: building an object from a value known only at call time, keeping what DI provides, testing it, and when new or Func<T> is enough.
3 min read
The Strategy pattern in C#: pick an implementation by key with dependency injection
The usual shape of the Strategy pattern in .NET: one class per variant, a discriminant, IEnumerable injection, what to do when no strategy matches, and keyed services.
3 min read
The Strategy pattern in C#: every strategy runs, one per field of an issue
A less usual shape of the Strategy pattern in C#: an issue activity log where one strategy per field runs on every change, selected by generic type rather than by key.
3 min read
Replacing Disqus with Giscus
Move a blog's comments from Disqus to Giscus and GitHub Discussions: why, the setup, a React component that loads on demand and follows the site's theme, the Content Security Policy and a test.
4 min read
Cookie consent on a static blog
Measure the cookies a static site really sets, see what the rules ask of a blog, and load Google Analytics only after consent, with a small store, a fair banner and tests that check it.
7 min read
A Content Security Policy for an Astro site
Add a Content Security Policy to a static Astro site with security.csp: hashed inline scripts, third parties, why strict-dynamic broke the islands, and tests that fail on any violation.
5 min read
Tailwind CSS 3 to 4: what the upgrade tool does not catch
Twelve differences found by comparing a site pixel by pixel before and after moving to Tailwind CSS 4: borders, line heights, cascade layers, table cells, stacking, colours.
6 min read
Moving a blog from Gatsby to Astro without a regression
How this blog moved from Gatsby to Astro with the same URLs, HTML and behaviour, and how we proved it: an HTML oracle, pixel diffs and interaction tests on both builds.
6 min read
Expose your ASP.NET Core API as an MCP server
Learn how to let agents read and change what their user can through an MCP server in ASP.NET Core, with OAuth, scopes, a per-organization switch and rate limits.
8 min read