
Design-forward artist portfolio
A polished, design-led portfolio I built and shipped for an artist — calm typography, considered motion, and a distinctive look.
Live site · design-led frontend
Experiments, collaborations, and projects I'm especially proud to have shipped.

A polished, design-led portfolio I built and shipped for an artist — calm typography, considered motion, and a distinctive look.
Live site · design-led frontend

Upload DICOM scans, browse studies, and view medical images with window/level controls — plus auto-generated FHIR R4 resources. Hono + React + Orthanc.
Medical imaging · React · FHIR R4

A 12-case synthetic benchmark for diagnosis, certainty, and urgency across full, ablated, and alternative-supported evidence, with reproducible .NET grading and exact model transcripts.
Clinical AI evaluation · evidence calibration · .NET
Generates ASP.NET Core Minimal API endpoints with routing, validation, RFC 9457 problem details, OpenAPI metadata, and Native AOT support.
Source generator · RFC 9457 · AOT

A keyboard-driven catalog of 463 Ghostty themes with fuzzy search and live config apply — shipped on GitHub Pages.
Interactive · fuzzy search · live apply
Stable and incubating runtime constants, a source generator, analyzers, and a Nuke build component — typed OTel semantic conventions for C#.
OpenTelemetry · C# · source generator
A lean toolkit for the Microsoft Agent Framework — runtime governance primitives, MAF-native OpenTelemetry, workflow helpers, and deterministic testing infrastructure. An instrumentation core, not provider facades. 6 packages.
C# · Microsoft Agent Framework · 6 packages
Configures .NET projects from the first build — analyzers, nullable, and polyfills auto-injected. Three variants: Base, Web, Test.
MSBuild SDK · analyzers · polyfills
Diagnostics AL1000–AL1899 across nine domains — correctness, reliability, async/threading, AOT/trim safety, ASP.NET Core, and OpenTelemetry — each with a code fix.
Roslyn · 89 diagnostics + fixes
A full tour-planning single-page app with an OpenAPI-typed client against a .NET 10 backend — 429 tests across NUnit and Vitest, fully Dockerised.
TypeScript SPA · .NET 10 · 429 tests
Document-management ingestion and processing on typed RabbitMQ pub/sub consumers — a published package and a favourite playground for event-driven design.
RabbitMQ · pub/sub · published
A zero-dependency streaming Cobertura parser, a dotnet global tool, and a NUKE build component that gates CI on coverage — it handles 50 MB+ reports without ever loading the whole DOM.
.NET tool · NUKE · CI gate
A source generator that scans your Mapster [Generate] configs and emits one strongly-typed extension per mapping — turning user.Adapt<UserDto>() into user.ToUserDto().
Source generator · Mapster · C#

An MV3 extension for Chrome, Edge and Firefox that saves a video only when it can prove the bytes are a complete, playable file — direct MP4/WebM and plain HLS VOD remuxed to one MP4. No DRM bypass, no native host.
Browser extension · TypeScript · MV3

An MV3 extension that pulls the caption track for any YouTube video into a clean reader panel — and when no captions exist, transcribes the audio locally with Whisper. On-device AI summaries via Chrome Prompt API or Ollama; no server, no telemetry.
Browser extension · Whisper · on-device AI
Wires Microsoft's 1.58-bit BitNet (bitnet.cpp / llama-server) into the Microsoft.Extensions.AI IChatClient abstraction — keyed DI, a health check, and a digest-pinned [BitNet] xUnit fixture. A cheap local model to test against.
Microsoft.Extensions.AI · local LLM · xUnit
For ASP.NET Core minimal APIs: generates typed client SDKs with Kiota (TypeScript, C#, Python) and serves them inside a Scalar API reference — one call to add, one to map, Native AOT compatible.
OpenAPI · Kiota · Scalar · AOT
Thirteen opinionated Claude Code plugins for parallel agent orchestration — PR-to-merge ferrying, dependency migration, first-principles repo transformation, code review, and test-quality work. Every phase is gated: work only advances when the gate passes.
Claude Code · 13 plugins · 30 agents
A NativeAOT-ready, vendor-neutral auto-instrumentation runtime in pure managed code — Roslyn-generated interceptors, DiagnosticListener, and a module-initializer bootstrap turn an ordinary PackageReference into traces and metrics. No CLR profiler, no IL rewrite.
OpenTelemetry · Roslyn interceptors · AOT
A small, fluent .NET library for building PDFs — chain AddText, AddPixelText (bitmap glyphs) and AddLine, then SaveAsync. Text and bitmap rendering with optional OCR; ships on NuGet and Docker Hub for .NET 8/9/10.
PDF · text + bitmap + OCR · NuGet
Open to full-stack C# / .NET and React roles, freelance, and collaboration. Based in Vienna — happy to talk remote or on-site.