AI Tech
Type-Safe LLM Tool Calling in C#: 6 Months in Production
How discriminated unions, JSON Schema validation, and a 4-retry loop cut hallucinated tool arguments from 18% to 0.3% in a real Claude + GPT-5 production stack.
A working journal of software engineering, AI tooling, and the craft of building things that last.
.NET, C#, Blazor, ASP.NET Core, EF Core — production engineering on the .NET stack.
Cross-platform mobile, Dart, widgets, performance, and shipping apps to iOS and Android.
LLMs, agents, MCP, RAG, fine-tuning, and the new shape of software work.
Cloud, Docker, CI/CD, edge, static sites, and the actual cost of running things.
AI Tech
How discriminated unions, JSON Schema validation, and a 4-retry loop cut hallucinated tool arguments from 18% to 0.3% in a real Claude + GPT-5 production stack.
Six months into production, RAG failure is silent. Here is what to measure, how to measure it, and the LLM-as-judge tradeoffs nobody tells you about in 2026.
EF Core 10 compiled models, batched query splitting, raw SQL with tracking — what works in production after months of real use, and what the docs skip.
A working engineer's deep dive into Flutter's custom RenderObject: how layout, paint, and hit-testing really work, with production code from a 50K-user app.
Two years running Caddy in front of 12 production services: what 2.8 got right, what the docs skip, and the gotchas I wish I'd known on day one.
I shipped a NativeAOT ASP.NET Core 9 service in February. After 4M requests, here's what changed: cold start, memory, image size, and trimming traps.
Dart FFI lets Flutter call C, Rust, and C++ directly. After shipping it in production, here is what works, what breaks, and the patterns I now use by default.
A working engineer's guide to building a custom AI skill for your codebase in 37 lines of code — the skill reviews a git diff and returns a structured critique covering bugs, security, style, and performance.
A working engineer's hands-on look at OpenCode — the open-source, AI-assisted coding tool that does most of what Claude Code does, ships with free models out of the box, and lets you wire up your own API providers without selling a kidney.
A working engineer's field guide to the new shape of AI-assisted development in mid-2026: the Model Context Protocol, the agent loop, model selection, and the engineering practices that turn agents into production teammates.
A working engineer's guide to the unified Blazor story in .NET 9 — what Blazor United actually changed, what stayed the same, where the framework wins in production, and where it still hurts.
A working engineer's field guide to Flutter in mid-2026 — the Impeller rendering engine, the widget model, what actually shipped, and the engineering practices that make Flutter apps feel right on iOS, Android, and the web.
A working engineer's guide to self-hosting a static site on a $4 VPS in 2026 — Caddy, Cloudflare, automated deploys, and the engineering practices that make a small site fast, reliable, and cheap to run.
A working engineer's guide to Minimal APIs in .NET 9 — when the endpoint-as-a-function model beats controllers, when it does not, and the small set of conventions that make a Minimal API codebase feel like one.
A working engineer's guide to calling Rust from Flutter in 2026 — FFI, flutter_rust_bridge, the cases where the pairing wins, and the cases where you should reach for something simpler instead.
A working engineer's guide to vector databases in mid-2026 — embeddings, ANN indexes, the choices that matter in production, and when you do not need a vector DB at all.
A working engineer's defense of using Postgres for async work in 2026 — the operational story, the at-least-once delivery pattern, and the surprising places where a dedicated broker is the wrong answer.
A working engineer's guide to edge compute in mid-2026 — what the edge is good for, where the regional cloud still wins, and the engineering practices that make edge functions feel right in production.