Over the years I've worked on a bunch of projects: a zero-knowledge-proof space game, a poker agent RL'd to profit from population tendencies in anonymous online poker rooms (2019), and a 3-inch quadcopter built from the circuit boards up. Maybe you'd like the low-level stuff, like the time I patched a Linux kernel while dumping the .sos from an Android game, or a custom robot controller programmed in bare-metal Rust. If you lean more startup-y, there's an AI video editor with a million users, a flashcard product, and an OpenRouter-for-media. When I was young, I made a chess engine, MMORPG bots, and a spreadsheet processor from before I understood HashMaps. There are also some open-source contributions, like runtime abstraction work in Hyper, plus a post about Scheme's weird control flow operators, a fast component search service, and a dozen other things.
You're welcome to check out my technical writing too, especially the mathier stuff, which is underrepresented here.
Focal
- TypeScript
- Python
- Postgres
- Redis
- ClickHouse
An agentic AI video creation tool.
There were some moderately heavy technical lifts here; we managed production infrastructure for a million plus users, ran a distributed inference fleet across hundreds of GPUs, and shipped an in-browser video editor against raw WebCodecs with support for transitions, effects, captions, exports, and more.
We did YC, and the company raised $2M in venture funding and reached $500k/yr in run rate.
Poker AI
- Python
- PyTorch
- Machine Learning
An RL agent for anonymous fast-fold Hold'em, trained to profit from suboptimal population tendencies.
The purpose of this project was not to play game theoretic poker, but to profit from typical opponent misplays in anonymous fast-fold Hold'em.
First I trained a model to infer a probability distribution over all 1,326 possible private hands from public betting history and showdown data, including hands that rarely appear in datasets because players usually fold them early. Then I trained action models to mimic average players based on those inferred ranges. Finally I trained a proximal policy optimization (RL) actor against frozen simulated player-pool opponents using an asymmetric critic with privileged simulation information.
I also had to build a bunch of surrounding infrastructure: a fast poker engine, batched model inference for thousands of asynchronous simulated tables, and a screen-scraper/mouse-clicker with jiggle to avoid getting banned from poker rooms.
Android Reversing
- Linux
- Reverse Engineering
- C
- Java
Dumped the bins from a protected Android app. Fought all the way down to custom kernel patches.
This was a crazy adventure. I tried decompiling the JARs (annoying, decryption key computed at runtime), hooking libc (detected), patching their libc integrity checks (failed), and ptraceing the process (blocked) before ultimately compiling a hand-patched kernel for my phone to dump the .so files. After you dump a bin with a hand-patched Linux kernel you develop a new sense of confidence around low level systems.
Links: Write-up
Homemade Wi-Fi Micro Drone
- Hardware
- C
A tiny homemade Wi-Fi quadcopter built around a custom circuit board.
I built this entirely from scratch: designed and manufactured the circuit board, wrote the firmware, designed and fabbed the frame, soldered the parts together, brought up the Wi-Fi/IMU/motors, wrote the software to control it from my laptop, etc.
Dark Forest
- TypeScript
- Crypto
- Circom
- Solidity
- Zero Knowledge
- Team
A space exploration game built from zero-knowledge proofs. Popular!
I worked on a game called Dark Forest with three friends. The game became quite popular, and Vitalik tweeted that he loved us! I spent most of my time building the circuits that generate the zero knowledge proofs at the heart of the game.
In practice, zk-SNARKs are restricted to addition and multiplication modulo some field prime p, so I spent a lot of time finding ways to rewrite operations like bit decomposition, comparison, hashing, and distance checks inside a prime field. Consider: what does it even mean to ask about bits in the context of a prime field (!?)
Links: Blog Post: Intro to zk-SNARKs, Blog Post: Dark Forest's Initialization Circuit
Zeptovolt
- Rust
- TypeScript
An SMT search tool with regex support, parallelized scans, and prefix-aware bitmap caching.
I wrote this after becoming frustrated with laggy part search services. It's backed by data from yaqwsx/jlcparts and typically returns search results more than twenty times faster than the original.
Adventures in Scheme
- Scheme
Did you know that Scheme has control flow operators that can rewrite the stack? Me neither.
Links: Blog Post
OpenPixels
- TypeScript
- Distributed Systems
- Redis
- Postgres
- ClickHouse
OpenRouter for media. Globally distributed and highly available AI media proxy, with aggressive latency targets.
Requests typically complete at the edge with zero round trips to the main database. Written for internal use, later published.
Hyper Contributions
- Rust
- Open Source
Runtime abstraction work for the Hyper HTTP library.
Threaded a generic timer abstraction through Hyper's client/server connection code, pools, and HTTP/2 keep-alive paths. The point was to move direct Tokio timer usage behind Hyper's runtime traits, so alternative runtimes could provide their own timers for the 1.0 release. (Hyper is the core HTTP library underneath much of Rust's web ecosystem, including reqwest, axum, and warp.)
Links: PR #2904
Custom Robot Controller + Embedded Rust
- Rust
- Hardware
A custom PCB for my robot for MIT's 2.007, programmed in embedded Rust.
I designed and fabricated a board around an STM32F302, then wrote the firmware for the class competition in Rust. Everyone else used an Arduino to control their robot.
Quantized.co
- React
- TypeScript
- Mongo
- Postgres
- Docker
- AWS
- GraphQL
- Team
A spaced repetition service where users collectively spent 16,000 hours doing 4.3 million reviews.
I spent sophomore summer making Quantized.co, a spaced repetition (flashcard) service and marketplace for spaced repetition decks. Several vendors used Quantized to sell their decks, and plenty of users used both our free and paid decks.
Piano Webapp + "River Flows In You" Grind
- React
- TypeScript
osu! meets sheet-music sight-reading.
I wanted to learn River Flows In You, which is one of my favorite piano pieces.
I made this webapp, which converts sheet music and MIDI files into measure-by-measure exercises, checked against live keyboard input. It also gives you a score (up to 3 stars) for each measure.
I practiced piano for 150 hours in 30 days, starting with learning where each note is and how to read music.
I got pretty good at River Flows in You, and several other pieces I had always wanted to play (especially from Your Lie In April)!
I decided that piano is not as fun as other things I could be doing.
I have not touched a piano since January 2019.
FastCitations (cydr.io)
- JavaScript
- React
- Mongo
- Python
- PyTorch
- AWS
- Docker
- Machine Learning
A citation website for students that turned batches of URLs into formatted bibliographies.
Users could paste in a pile of URLs, and we would process the websites (with some ML but mostly heuristics) and return your complete bibliography. This was the first consumer product I ever built! I learned a ton about writing production software, what users want, etc.
Mini Zygote.jl
- Small
- Julia
A small source-to-source reverse-mode automatic differentiation system in Julia.
Rebuilt the basics of Zygote.jl: for each differentiated function, it generates IR, rewrites the IR to add adjoint propagation, then compiles new machine code that returns both the original result and the gradient.
Links: GitHub, CUDA.jl essay
Experiments with Artificial Chemistries
- Julia
A Julia artificial-chemistry simulator that searches random programmable cellular automata for lifelike dynamics.
The motivating question was whether a minimally opinionated chemistry could stumble into nontrivial replicators instead of immediately becoming noise, stasis, or boring tiling behavior. The simulator compiles each generated program into LLVM-optimized machine code before running it, which produces a dramatic speedup over a naive interpreter.
Links: GitHub
ML Catch-up
- PyTorch
- Python
- Machine Learning
Got back into the groove of manipulating tensors.
Links: TokenFlow Implementation
PharmaSuitable
- JavaScript
- AWS
- Hackathon
- Team
Helped build a health webapp. Won four best-of prizes at HackUMass V before starting college.
Links: Devpost
Checkers Engine
- C++
Wanted to get familiar with C++, so wrote a simple checkers engine. This project also helped me get familiar with the fact that I’m embarrassingly bad at checkers.
Fast Poker Engine
- Go
A fast no-limit Texas Hold'em engine for running simulated tables.
This is the core infrastructure required to simulate poker. It dealt cards, managed players and stacks, processed betting rounds, evaluated showdowns, and distributed winnings. Required for the later reinforcement learning.
MIT PRIMES: Concurrent D-Cache
- Go
- C
Researched the feasibility of lock-free directory entry caches in garbage collected languages.
Links: GitHub
Drone Build
- Hardware
Built a drone from off-the-shelf parts with a friend.
We got some funding and bought motors, controllers, ESCs, flight controller, a frame, a few cameras, etc, and put them together. It flew, but it was hard to fly.
Links: WordPress Log, Flight Video
Han Character Art
- Java
An art project I did, rendering images as orderings of the 2200 most common han characters.
Links: GitHub
MMORPG Bots (for trading & fighting)
- Java
Created bots that traded on the marketplace and fought monsters in an iOS MMORPG.
6k lines of Java, which was a lot for me at the time. I ran the game in an emulator, with screen-scraping and auto-clicking. The hard parts were detecting monsters in real-time and determining which tiles were walkable as you were running away from the monsters. Optimized patch-based detectors worked best for monsters. For terrain I relied on stored maps (see images).
Chess Engine
- Java
Threaded implementation of negamax with alpha-beta pruning and UCI support.
Everyone has their first serious project; this was mine. 1,800 lines.
Links: GitHub
Clinical Assessment Grader
- Java
A tool to process spreadsheets of raw clinical scores and automatically write back scaled scores.
One of my Mom's friends spent many hours per week hand-grading clinical assessments. I wrote this tool for her and saved her a lot of time.
Most entertaining: apparently I needed to look a value up in a table but had not yet encountered HashMaps. I therefore wrote GenerateScript.java, which read the data from stdin and generated a block of several hundred if/else statements, which I then pasted into the main program. It would be many years before I returned to metaprogramming.
Links: GitHub