Case StudiesProductsBlogOpen SourceBook a call

Blog

How I build software that lasts: project write-ups, technical deep dives, and lessons from a one-person studio in Portland.

A room full of people all looking intently up towards the projected screen

Edible Neighborhoods

Evenings like this remind me why local matters, and that the best networks aren't always digital ones.

A Background Remover That Doesn't Want Your Money

A Background Remover That Doesn't Want Your Money

remove.bg is folding into Canva and free tiers shrink your photos. So I built one that runs in your browser, keeps your full resolution, and costs nothing to keep online.

Syncing Single Files Across Repos Without Ceremony

Syncing Single Files Across Repos Without Ceremony

Shared files drift across repos. npm is too heavy and copying by hand makes a mess. filesync closes the gap with git merges, a one-line provenance header, and private-first regions.

Arcanetable Insight

Arcanetable Insight

I checked in on an app I hadn't touched in over a year, and what I found had me utterly gobsmacked.

Build With People, Not In Isolation

Build With People, Not In Isolation

A lot of us want to help by building good, useful things. But retreating to make the elegant, principled "right thing" in isolation is a trap. Software matters because it gets used, and the surest way to get it used is to build it with the people who need it.

CryptPad's URL Trick Is Genius

CryptPad's URL Trick Is Genius

CryptPad stores the shared encryption key in the URL fragment, the part after the `#`. That one choice solves a whole class of secure-sharing problems.

OpenMLS Looked Like the Perfect Answer, Until It Wasn't

OpenMLS Looked Like the Perfect Answer, Until It Wasn't

On paper, it checked all the boxes. In practice, I ran into a hard constraint that made it the wrong fit for what I was trying to build.

Newsletter

Subscribe to my newsletter to be the first to hear about what I do next