I build production-safety tooling for .NET teams: Roslyn analyzers, developer workflows, and focused utilities that catch expensive mistakes before they ship.
The thread running through my work is simple: make the failure visible while the developer is still in the editor, keep the diagnostic precise enough to trust, and ship the fix with tests, docs, and release automation.
| Project | Focus | Why it matters |
|---|---|---|
| ConfigContraband | Configuration correctness | Catches broken appsettings, missing sections, duplicate JSON members, and option-shape drift before runtime. |
| LinqContraband | EF Core and LINQ safety | Flags query shapes that cause client-side evaluation, N+1s, cartesian explosions, and costly production behavior. |
| DependencyInjection.Lifetime.Analyzers | Dependency injection lifetimes | Detects captive dependencies, unsafe scopes, and lifetime mismatches that usually fail late. |
| CancelCop.Analyzer | CancellationToken discipline | Keeps cancellation flowing through public APIs, handlers, EF Core, HTTP calls, and Minimal APIs. |
| automapper-analyser | Mapping safety | Moves AutoMapper configuration failures from runtime surprises into compile-time feedback. |
| CPMigrate | Package management | Helps .NET solutions move to Central Package Management with dependency health checks and rollback. |
| AOEOverlay | Tauri desktop overlay | A TypeScript/React/Tauri app that shows I also build polished local desktop tooling, not just compiler analyzers. |
- High-signal analyzers over noisy rule volume.
- Runtime failures converted into compile-time feedback.
- Developer-facing diagnostics that explain the fix, not just the failure.
- Small packages that are documented, tested, versioned, and releasable.
I like boring reliability, fast feedback, clean diagnostics, and tools that pay for themselves the first time they stop a bad deploy.



