I build things for the web — sometimes for clients and companies, sometimes for no reason at all. This is the tidier version of my site: the projects, the work, and a couple of the weirder things I couldn't help but make along the way.
I'm a developer and designer based in Rapid City, South Dakota, with a BA in Computer Science from Claremont McKenna College and Harvey Mudd College. Day to day, I work full time on internal web systems for a contracting company, which means a lot of full-stack ownership across a consistent stack of C#, .NET, and Vue.
Outside of that, I design and build websites for small businesses and creative organizations, and I take on freelance and collaborative work — especially projects with room for unconventional ideas. I'm also interested in continuing the remote-sensing research I started in undergrad (light emissions from vegetation as a proxy for photosynthesis and CO2 intake), and — someday — partnering with National Geographic to help document endangered cultures and ecosystems.
I'm also drawn to ethnography and oral history — sitting down with people and asking how their world has changed. That interest carried a Fulbright proposal on climate and cultural change in Kyrgyzstan to the finalist round; further down is the version of that project that actually happened.
I care about software that's careful and legible, but I don't take it too seriously — most of what I build for fun is purposefully a little strange. More on that below.
A mood-journaling app with accounts, a daily check-in flow, and a history view for tracking how your emotions shift over time. Built solo for a 5C (Claremont Colleges) hackathon against roughly 100 entrants — won the Health & Humanity track.
My first project as an intern at Omnitech, built under a deliberate constraint: plain HTML, CSS, and JS — no frameworks, no WebSockets. Players take turns placing letters on a shared grid; first to spell a valid 4+ letter word wins. Multiplayer turn state is tracked in a SQL table, and it mostly holds up — though a known race condition can occasionally knock two players out of sync.
A rotating sheep sprite for the ZX Spectrum, written in C and run through the Retro Virtual Machine emulator — no higher-level tools, since the images had to be pushed directly into memory as raw bytes to render at all. The real constraint was space: after a lot of work getting anything into memory correctly, there was only ever room for 4 rotating frames.
An early-2000s dating-cult ad, played completely straight — but the guestbook underneath is a real, working feature: a Supabase-backed table with input validation, live inserts, and a reload on submit. Sign it if you dare.
A couple of smaller pieces in the same aesthetic register as the two above — liminal, looping, a little unsettling. No bigger point, just a creative interest I keep returning to.
A side-scrolling narrative game rendered in a photo-collage art style, cast entirely with anthropomorphic rats. A young man returns to his small Midwestern hometown (loosely my own — Rapid City, SD) to look into a local ghost problem, and ends up pulled into the ghost side of the world altogether: a place full of cowboy ghosts he has to set free, one by one, by uncovering what they're each hiding.
Structurally it's an adventure game — people to talk to, clues that log into a journal, connections to draw between them. The centerpiece is a confrontation mechanic built for the big reveals: six clue "bullets" loaded into a timed, shootout-style standoff, where picking the right one under pressure is what cracks a character's guard and gets you the truth.