Vibeblogging

Welcome to VibeBlog, my playground for exploring GitHub's agentic workflows (that's the whole AI-powered automation thing everyone's talking about). It's also a daily experiment in AI-generated writing—one post per day, initially curated from my own knowledge but eventually evolving into a learning tool based on whatever topics catch my interest. The goal? Produce publicly useful content while I play copyeditor to Copilot's drafts, turning AI output into genuinely informative articles.

Real-Time Web Apps with SignalR

Real-Time Web Apps with SignalR

Most web apps follow a simple pattern: the client asks, the server answers. That works great for fetching a list of orders or loading a profile page. But what about a live dashboard, a chat app, or no...
Authentication and Authorization in ASP.NET Core

Authentication and Authorization in ASP.NET Core

If you're building any real ASP.NET Core app, you'll hit this question quickly: "How do I lock this down without making everything painful?" Authentication and authorization sound similar, b...
Using Json.NET in ASP.NET Core on .NET 10

Using Json.NET in ASP.NET Core on .NET 10

ASP.NET Core has shipped System.Text.Json as its default serializer since .NET Core 3.0. It's fast, it's trim-safe, and it keeps getting better. But Json.NET (Newtonsoft.Json) is still everywhere — in...
Building gRPC Services in ASP.NET Core

Building gRPC Services in ASP.NET Core

If you've built microservices with REST you've probably hit a point where JSON over HTTP starts feeling a bit heavy — verbose payloads, no shared contract, no streaming. gRPC fixes most of that. It's ...
Beautiful .NET Consoles with Spectre.Console

Beautiful .NET Consoles with Spectre.Console

If you've ever shipped a .NET command-line tool and felt embarrassed by its plain, colourless output, Spectre.Console is the library you've been waiting for. It brings Python's beloved Rich library to...
Feature Flags in .NET

Feature Flags in .NET

Shipping code is one thing. Deciding who sees it, and when, is another. Feature flags let you decouple deployment from release — you push code to production, but the feature stays off until you're rea...
Resilience with Polly in .NET

Resilience with Polly in .NET

Distributed systems fail. A downstream API goes slow, a database hiccups, a network packet gets lost. Your code can either pretend that doesn't happen (and get paged at 2am) or handle it gracefully. P...
Global Error Handling in ASP.NET Core

Global Error Handling in ASP.NET Core

Every ASP.NET Core app will encounter unhandled exceptions. A database goes away, a downstream service times out, someone passes a value your code didn't anticipate. How you handle those exceptions — ...
Validation with FluentValidation

Validation with FluentValidation

If you've been using data annotations to validate request models — [Required], [MaxLength], [Range] — you've probably hit the wall where they stop being enough. Conditional rules, cross-property valid...
Caching in ASP.NET Core

Caching in ASP.NET Core

Caching is one of those things that looks simple on the surface — store a value, read it back later — but there's a surprising amount of nuance once you start applying it to real services. ASP.NET Cor...
HttpClient Factory in .NET

HttpClient Factory in .NET

If you've ever written new HttpClient() inside a method call, congratulations — you've probably introduced a socket exhaustion bug. It's one of the most common mistakes in .NET, and it's subtle enough...
Rate Limiting in ASP.NET Core

Rate Limiting in ASP.NET Core

Every public API is one viral moment away from being hammered into the ground. Rate limiting is the mechanism that stands between your service and the flood — it caps how many requests a client can ma...
Middleware in ASP.NET Core

Middleware in ASP.NET Core

Every HTTP request that hits an ASP.NET Core application passes through a pipeline before it ever reaches your endpoint. That pipeline is built from middleware — small pieces of code that each get a c...
The Options Pattern in .NET

The Options Pattern in .NET

Configuration is one of those things that looks simple until it isn't. You start by reading a connection string from appsettings.json, and before long you've got a sprawling mix of IConfiguration.GetS...
Minimal APIs in ASP.NET Core

Minimal APIs in ASP.NET Core

When ASP.NET Core Minimal APIs landed in .NET 6, I'll be honest — I wasn't sure what to make of them. Controllers had worked fine for years. Why change things? Then I used them for a small internal to...