Robert Cunningham

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.

Links: GitHub, Write-up

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

Nozzle

  • TypeScript
  • Small

A chainable TS library for manipulating streamed LLM responses and other async text streams.

Admission: I love lodash. I made this because we have lots of async iterators at work and I miss being able to use .tap() and .tee() on them...

Links: GitHub, npm

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.

Links: Website, GitHub

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.

Links: GitHub, Blog Post: Hacker's Guide to Circuit Boards

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.

  1. I wanted to learn River Flows In You, which is one of my favorite piano pieces.

  2. 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.

  3. I practiced piano for 150 hours in 30 days, starting with learning where each note is and how to read music.

  4. 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)!

  5. I decided that piano is not as fun as other things I could be doing.

  6. I have not touched a piano since January 2019.

Voice-based Programming System

  • Python
  • Hackathon
  • Team

Transpiled a dialect of English into Python. Won the grand prize at HackUMass VI before starting college.

Links: GitHub, Article

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

Contributions to QKSMS

  • Java
  • Open Source

My preferred Android texting app had annoying timestamp hiding logic; I added a setting to fix it.

Links: PR #149, PR #478

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