Noundry CLI v3.1.31 — ready
Hands-on senior engineer, not just an architect on paper.
I've been writing C# and shipping .NET systems for over two decades — from classic ASP.NET
WebForms, through MVC, through every revision of ASP.NET Core, to modern .NET 10
minimal APIs. My happy place is a terminal, a SQL window, and an open
Program.cs.
Today I spend most of my time building Noundry — a batteries-included developer platform for .NET — and shipping small, focused SaaS products on top of it. I still take on senior engineering engagements for teams that need someone who can design an API, write the EF migration, tune the query, and push the Dockerfile in the same afternoon.
Previously: Tech Lead / interim CTO for Catch Health (400K+ members), lead engineer across several data and fintech platforms, and a long tail of solo-founder .NET products. These days the work is fractional CTO, forward-deployed AI, and applied AI engagements. I know the enterprise playbook. I just prefer building the thing.
dotnet/
primary stack- ├─ C# 8 → 13, .NET 6 / 8 / 9 / 10
- ├─ ASP.NET Core — Minimal APIs, MVC, Razor Pages, Blazor
- ├─ Entity Framework Core & Noundry.Tuxedo (my preferred ORM)
- ├─ Background Services, Channels, System.Threading
- ├─ Source generators, Roslyn analyzers,
IL-aware code - └─ NuGet package authoring, semantic versioning, CI signing
data/
storage & search- ├─ PostgreSQL (preferred), SQL Server, MySQL, Oracle, SQLite
- ├─ Warehouse — Snowflake, ClickHouse
- ├─ Redis — cache, pub/sub, streams
- ├─ MongoDB, immudb (audit/immutable)
- ├─ Elasticsearch basics
- ├─ Schema migrations, online DDL, replication
- └─ Query tuning — reading
EXPLAIN ANALYZEis a hobby
infra/
ops & deploy- ├─ Docker, multi-stage builds, slim runtime images
- ├─ Railway, Fly.io, Digital Ocean, AWS, Azure
- ├─ Cloudflare (Workers, R2, Pages, tunnels)
- ├─ GitHub Actions, GitLab CI, release automation
- ├─ Terraform — infra as code, reproducible envs
- └─ OpenTelemetry, Sentinel (APM I built myself)
frontend/
pragmatic not shiny- ├─ Razor + HTMX + Alpine.js (my default)
- ├─ Blazor Server & WebAssembly
- ├─ TypeScript, Vite, esbuild
- ├─ Tailwind CSS v3 / v4 (this site runs on v4)
- ├─ NounJS — my own client-side framework
- └─ Accessibility, semantic HTML, print stylesheets
ai/
LLM engineering- ├─ Anthropic Claude, OpenAI, local (Ollama) models
- ├─ Tool use, agents, structured output, caching
- ├─ MCP (Model Context Protocol) servers in .NET
- ├─ Vector stores, RAG pipelines, embeddings
- ├─ Noundry.AIG — multi-provider .NET gateway
- └─ Prompt engineering that actually survives prod
habits/
how I actually work- ├─ Write the migration before the feature
- ├─ Fewer dependencies > shinier dependencies
- ├─ Delete dead code aggressively, comments sparingly
- ├─ Benchmark before optimizing —
dotnet-counters - ├─ Ship small, ship often, revert without drama
- └─ Own the Dockerfile. Own the SQL. Own the outage.
The Noundry Platform
A batteries-included developer platform for modern .NET. 20+ production NuGet packages covering
ORM, auth, jobs, email, APM, AI, validation, scaffolding, and more — all written by me, all
opinionated, all licensed permissively. The goal: go from dotnet new
to a deployed, monitored, authenticated, job-scheduled, email-sending app in an afternoon.
A .NET CLI that scaffolds 53 owned Razor UI components straight into your project — no Node.js, three built-in themes, and full source ownership of every component. Powered by Noundry.UI, a 73+ component library built on Alpine.js and Tailwind CSS for Razor Pages and MVC: server-rendered for SEO, interactive on the client, including charts (bar, line, area, pie, donut, radar) — no separate JavaScript app required. studio.noundry.com →
A performant, modern drop-in replacement for Dapper with EF-Core-like features but no foot-guns. CRUD, migrations, auditing, across SQL Server / PostgreSQL / MySQL / SQLite.
Sessionless OAuth 2.0 abstraction for ASP.NET Core — Google, Microsoft, GitHub, Apple, Facebook. Built for microservices and scale.
Feature-complete AI gateway for .NET — similar to Vercel's AI Gateway, but native to the .NET ecosystem. Multi-provider, streaming, tool use.
Cloud-agnostic, self-hosted APM for .NET. Performance metrics, exception tracking, HTTP monitoring — full data ownership for LOB apps.
Comprehensive job scheduling — simple APIs for DB ops, file ops, HTTP calls, and email. Paired with Jobably, a heartbeat monitor for missed pings.
Flexible mailing library for .NET 8/9/10 that separates template rendering from delivery. Mailgun + SendGrid adapters included.
A Zod-inspired fluent validation schema library for .NET. Type-safe, zero deps, transforms, refinements, coercion, rich error paths.
Lightweight, high-performance guard clauses for defensive programming. Inline, zero-allocation on success paths.
Fluent assertion library for .NET — readable, intuitive, zero runtime dependencies. A lighter alternative to FluentAssertions.
High-performance CSV → database ingestion. Millions of rows per second, schema inference, auto-indexing, CLI and library.
Self-contained event stream ingestion + relay. 50K+ msgs/sec, p99 sub-ms, durable SQLite, built-in retry, OpenTelemetry.
Cross-platform .NET CLI that provisions cloud infrastructure — VMs, networks, load balancers — on AWS, Azure, GCP, DO via Terraform.
Strongly-typed HTTP clients built on Refit — auto auth, CRUD scaffolding, LINQ querying, and a CLI generator to create clients from specs.
Secure .env loader for .NET — ECIES encryption, multi-environment files, variable expansion, first-class ASP.NET Core DI.
Tailwind CSS for ASP.NET with zero Node.js dependency. Hot reload, v3 + v4 support, two NuGet packages and you're done.
Render Razor components to HTML strings or IResult from Minimal APIs. Fluent HtmlBuilder, TableBuilder, SelectBuilder.
Lightweight client-side UI framework — CLI, routing, theming, and Cloudflare-edge hosted deployments. The "just enough" alternative to React.
Realistic test data generation for Tuxedo entities via Bogus — auto-honoring foreign keys and PK constraints, library + CLI.
# add the entire platform's feed $ dotnet nuget add source https://nuget.noundry.com/v3/index.json -n noundry # then install what you need $ dotnet add package Noundry.Tuxedo $ dotnet add package Noundry.Authnz $ dotnet add package Noundry.Jobs $ dotnet tool install -g Noundry.Engine.Cli
Things I've actually shipped.
Production SaaS products built on .NET — most running on the Noundry stack. Every one of these has a live URL, a Stripe integration, or paying users behind it.
BurnNote.org
LIVE · STRIPEZero-knowledge, self-destructing encrypted notes. AES-256-GCM done properly — the server never sees the key. Paying customers and a clean API tier.
YieldHQ
LIVE · ERPSelf-hosted, modular ERP sold as a one-time purchase with lifetime ownership — 13 integrated modules (CRM, sales, inventory, accounting, manufacturing), unlimited users, and AI-native customization via Claude + MCP.
PdfFrom
LIVE · v1.0High-performance document → PDF API. Text, Markdown, HTML, DOCX input — single endpoint, tiered pricing, built for compliance systems that churn through PDFs.
SlimWin
LIVE · v1.0Windows cleanup tool for developers — removes bloatware, cleans dev caches, reclaims disk. Signed, licensed, sold as a Pro/Team product.
LeadKumo
LIVE · ENTERPRISEEnterprise-grade self-hosted ping/post platform — real-time competitive bidding for web and call leads across solar, mortgage, and home services. Customer-controlled AES-256 keys, smart routing, Telnyx call distribution.
Track record // the short version
Let's write some C# together.
Three ways I work with teams: fractional / interim CTO, forward-deployed AI — embedded with your engineers to get real AI features into production — and applied AI builds on top of your existing stack. Email is the fastest way in.