Skip to content

Software Developer · Nashville, TN

Will Kotheimer.

I cut API response times by 80% on a claims platform I didn't design, and built an event-sourced simulator that I did.

I started in Support and QA. Most of my experience is as a software developer: .NET, Azure, React, and occasionally Python.

bash — willkotheimer@dev

~/selected-work

Built, and running in production

Simple means easy to understand the app without much explanation. Complex means an implementation of a more difficult concept.

Every card: a live link, the GitHub repo, and a full case study.

Receipt Reader

C#.NET 10TypeScriptReactAzure Document IntelligenceBicepPlaywright

Receipt scanner · Azure Document Intelligence, nothing stored

LIVE

My first go at anything AI, and deliberately the smallest thing that could work: upload a receipt, get a table. The interesting part turned out to be what happens when the model cannot read it. Photographed sideways, the one creased receipt in the house scored 0.258 against a 0.50 threshold and was refused; rotated upright, same paper and same creases, it read PRIMARK, $10.00.

The Primark receipt lying on a dark surface, creased and photographed on its side so the printing runs vertically down the frame.
The photograph exactly as I took it. This is the orientation that scored 0.258 and was refused.

StockAggregator

C#.NETAzure App ServiceAzure SQLApplication InsightsPlaywright

Market analytics dashboard · solo build

LIVE

A .NET service that ingests daily market snapshots into Azure SQL and computes the analytics on top of them: a seasonality calendar, sector-rotation views, rebound and range statistics, and a correlation matrix. Pick any date span and every symbol gets a plain verdict on how it behaved across it.

HowToDoIt

TypeScriptReact.NETAzure App ServiceAzure Blob StorageSQL ServerBicep

Structured how-to app · an evolution of Playbook

LIVE

A checklist names the task and stops: it never says what "finished" is supposed to look like. An ordered set of captioned photos settles that: a compliance tool for a shop instead of a kitchen.

Sounds Like

JavaScriptCanvasLast.fm APISpotify EmbedNetlifyPlaywright

Artist similarity tree · Last.fm data drawn on canvas

LIVE

A simple idea kept simple: name a band, see the bands that sound like it, keep going. A force-directed graph is not a form I would normally reach for, it is usually decoration, but discovering music is the case where it earns its place, because wandering is the task rather than a detour on the way to an answer. The center node carries a Spotify player, so the tree is something you listen to.

~/about

A developer who thinks like a tester

I started in QA: nearly two years testing an enterprise fintech CRM across web, mobile, desktop and the stored procedures underneath, in Selenium and C#, before I moved to building the software rather than breaking it.

My testing influence shows up in my interest in prioritizing tests: we've moved on to Playwright now, but also I am interested in Vitest for frontend modules, CI/CD testing, Moq and xUnit for Service Tests, and Bruno for integration.

But this influence also carries over to how I think about AI governance. Good AC isn't just a checkbox, but a harness. This includes DTO and schemas, that provides knowledge of how the data will flow, before handing over the job to any AI, as well as what cannot change, what can change, and what should fail gracefully.

My day to day is Claude + Thinking, specifically .NET and React on Azure, App Services, Functions, Bicep, CI/CD, usually against systems and yes even manual testing. This is a muscle memory I try to infuse in everything I do.

Let's build something.

Have a project, a question, or just want to talk shop about web dev or QA? The fastest way to reach me is email.