Articles

Every article, newest first: architecture, security, messaging, data, testing, front end, C# & .NET and tooling.

All articles

77 articles.

Architecture

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

Architecture

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

Architecture

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

Front end

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

Security

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

Security

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

Front end

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

Testing

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

Architecture

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