Work

Two projects in production, and the smaller work underneath them. Both of the first two are running right now and one of them you can open in a new tab, which is the only portfolio claim that verifies itself.

Prebuilt Sheds LLC

Marketing site and inventory system for a shed builder.

Client
Prebuilt Sheds LLC
Role
Sole engineer — build, deploy, and operations
Period
2026 — ongoing

Server-rendered Go, SQLite, and htmx: one static binary, four direct dependencies, no JavaScript toolchain and no CSS framework. Public pages plus a management area behind auth, CSRF, and a separate body limit.

It runs on a DigitalOcean droplet I administer — nginx and certbot in front, fail2ban, scheduled and offsite backups — with CI gating format, vet, tests, a smoke run, and govulncheck before publishing an image to GHCR.

It has a real customer, which is the part that makes it engineering rather than a demo. Nobody files a bug against a portfolio project.

Decisions worth explaining

Illinois Public Defender Statistics

Statewide public-defense data, mapped, for all 102 Illinois counties.

Client
Illinois Supreme Court & the Administrative Office of Illinois Courts
Role
Sole engineer on the application
Period
2024 — still in production

Commissioned by the Illinois Supreme Court and the Administrative Office of Illinois Courts, after the Sixth Amendment Center's evaluation of the state's public defense system found structural deficiencies in oversight and independence. The application gives public defenders, researchers, and the courts a way to explore resource distribution across all 102 counties.

The interesting problem was serving one dataset through three different geographic hierarchies — counties, judicial circuits, and appellate districts — each needing its own identifiers, colour scales, and legend breaks to drive choropleth rendering. That shape drove the API: twelve route handlers, organised by hierarchy rather than by table, returning exactly what the map layer needs and nothing else. Query time came out of PostgreSQL aggregates, functions, and indexes rather than out of caching in front of slow queries.

It has been serving continuously since delivery.

Decisions worth explaining

Worth stating plainly. Worth stating plainly: I was the sole code contributor, but not the whole project. A Northwestern University team collected and analysed the underlying data, and the court commissioned the work. Worth stating too that this ran on managed Postgres and App Platform build-on-push — real deployment, but a platform I consumed rather than administered. Prebuilt is the other half of that answer, and having shipped both is what makes the comparison worth having.

On the bench

Small on purpose. They exist because the fastest way to stop guessing about a layer is to implement it, and because I have never stopped building things for the sake of building them. Newest first.

Currently open to remote platform, backend, and systems work, or hybrid in northern Michigan.