Blog
Thoughts on .NET, open source, and building software.
Rag.NET: A RAG Pipeline That Isn't Tied to One Vendor
A modular retrieval-augmented generation library for .NET built on Microsoft.Extensions.AI — parsers, chunking, vector stores, reranking, and evaluation as swappable stages.
BlazorNative: Blazor Without the WebView
Rendering Blazor components as real native iOS and Android widgets through NativeAOT — no WebView, no JavaScript bridge, Yoga for layout.
Unearth: Data Recovery in Rust, Drivable by an Agent
A read-only recovery and disk-forensics toolkit — filesystem-aware undelete, signature carving of 150+ formats, lost-partition recovery, and an MCP interface.
AI.Sentinel: Security Middleware for Your LLM Calls
Drop-in monitoring for any IChatClient — detectors for prompt injection, PII leakage and hallucination signals, with an intervention engine and audit forwarding.
Giving AI Agents a Memory That Never Leaves Your Machine
LongtermMemory-MCP is a fully local MCP server for persistent semantic memory — SQLite, a local transformer for embeddings, and no API keys anywhere.
Catching the OWASP Top 10 at Compile Time
Owasp.Analyzers is a set of Roslyn analyzers covering the OWASP Top 10 2025 for C#, turning security review into a build step instead of a scanning pass.
AdoNet.Async: Bringing `await foreach` to ADO.NET
AdoNet.Async adds async-first interfaces and base classes to System.Data — IAsyncEnumerable rows, ValueTask operations, and a drop-in .AsAsync() adapter.
Lucent Code: AI That Reads Your Code Like Your IDE Does
Lucent Code is a VS Code AI assistant that uses your language server for code intelligence — not file search. Any model, any provider.
Building Zero-Allocation .NET with Source Generators
The ZeroAlloc suite wires mediator dispatch, DI registration, validation, and more at compile time — no reflection, no boxing, no dictionaries at runtime.
MailPeek: Stop Sending Test Emails to Real People
MailPeek is an in-memory fake SMTP server with a real-time web dashboard for ASP.NET Core. Capture every email your app sends during development.
MemoryLens MCP: Letting AI Read a Memory Profile
An MCP server that wraps JetBrains dotMemory and turns snapshots into concrete, AI-actionable code fixes instead of a wall of retention graphs.
Giving AI Agents Eyes Into Your .NET Codebase
Roslyn CodeLens MCP gives AI coding assistants semantic .NET code understanding — type hierarchies, call graphs, DI registrations — without grep.
Hello World — Why I Started This Blog
A first post about why I'm writing, what excites me about programming in 2026, and how AI is changing the way I build software.