Journal
Posts and long-form series on AI, startups, venture capital, and more.
All Posts
idea.log Comes to macOS
idea.log, the terminal-inspired idea tracker, is now available on macOS with CloudKit sync, a native sidebar layout, and the same dark minimal UI.
Into the C: Making PyGeoHash Decode Twice as Fast
Last time I optimized the Python wrapper around PyGeoHash. This time I went into the C extension and found it was building objects it immediately threw away.
Evergreen Skills - Teaching Claude to Manage Your Relationships
I built 18 Claude Code skills that turn Evergreen into an AI-powered relationship management system. Now they're on the skills marketplace.
Evergreen Comes to iPhone and iPad
Evergreen, my local-first personal CRM, is now on iPhone and iPad, with optional iCloud sync to keep contacts current across all your devices.
Optimizing PyGeoHash Without Touching the C
A few days after benchmarking PyGeoHash against the field, I closed most of the gap to the C++ library without writing any C. Here is how.
Managing Context at Organization Scale
Why organizations need a defined hierarchy for AI context, and how to manage it without it falling apart.
Yakitori Negima: Chicken, Scallions, and a Pot of Tare
My first run at chicken and scallion yakitori (negima) on a new konro grill, including a simple homemade tare you can keep building on forever.
Benchmarking PyGeoHash: Where It Lands Against the Field
I benchmarked PyGeoHash against six Python geohash libraries with pytest-benchmark. It trails the Rust and C++ options and beats pure Python by a mile.
The OODA Loop for Startup Engineering
Boyd's OODA loop applied to startup engineering teams. How to make faster, better decisions when the landscape changes every week.
Rampart v0.7: Push Allowlists for Protected Branches
Rampart v0.7 adds push allowlists to branch protection configs. Specify which users, teams, and GitHub Apps can push directly to main.