Things I've built, and how.
Anyone can list projects. These are the build logs: what each system does, how it's wired, the decisions behind it, and the failure modes it's built to survive. Every number here comes off the running system, not a pitch deck.
The write-ups
Three systems, all of them still running right now.
OpenClaw
An AI agent that lives in my iMessage. I text it like a person and it runs jobs on my Mac. 32 skills, two model providers with automatic failover, four scheduled jobs, and one guard that stops it talking to itself forever.
RunRace USA
25,239 races from five booking platforms, deduplicated, rendered into 20,000+ pages at the edge. Includes how a silent build-order failure took out most of the sitemap, and the verification step that makes it impossible now.
The All-In portfolio
A statistical test of whether podcast conviction predicts returns. It doesn't, at t = -2.26. The write-up walks the method, the construction that replaced it, and the risk analysis behind it.
The AI Stack
A research agent that maps a layer of the AI buildout every weekday, follows its own open questions, and puts every idea past three reviewers paid to kill it. Day one: fourteen ideas generated, fourteen killed. The graveyard is the published part.
How I tend to build
Four habits that show up in all of it.
Automate the boring part first
If I'd have to do it twice, it becomes a script. Every chart on this site exists because typing numbers into a page by hand is a job I refuse to keep.
Silent failure is the enemy
The costly bugs are the quiet ones: a sitemap that shrinks without complaining, a backtest that looks brilliant because it already knew the answer. Every pipeline here reports what it skipped rather than returning a smaller, plausible-looking result.
State the falsifier first
Before the result arrives, not after. Writing down what would disprove the thing is the only reliable way I've found to keep the goalposts still when a number comes back disappointing.
Build for the unattended case
All of this runs while I'm asleep. That means crash reports written to disk instead of vanishing with the process, a verification pass before anything deploys, and an explicit error state rather than an empty success that reads as fine.