Riftbound Self-Play
I trained a model that plays Riftbound.
My first version spent most of its time running games, so I rebuilt the game loop in Rust. Now I can train and test new versions a lot faster, and I can replay any match move by move.
How I built it →I give my model the board and the moves it's allowed to make, and it picks one.
It plays both seats, so every match it finishes turns into more training data.
Running games was the slow part, so I rewrote that loop in Rust, and training got a lot faster.
I train on the finished matches, and then the new version goes and plays again.
Riftbound card art © Riot Games.
A year of on GitHub
Each square is one day. Darker squares mean more contributions. My longest streak was 55 days in a row.
Where I work now
- Handshake AII started at Handshake in January making tasks for AI training data, which is mostly writing prompts and rubrics, building tasks that test how well models handle everyday computer stuff and web research, and comparing model answers to see which one's better. After a while I got moved up to reviewing other people's tasks. Then on one of the bigger projects they needed really high quality work, so they picked a small group of people to be golden taskers, and I was proud to be one of them. A lot of the details are under NDA.Jan 2026 – Present
The log
15 of 15 · newest firstRiftbound Self-Play
It plays both sides of every match, and every game it finishes turns into training data for the next version. My first version spent most of its time just running games though, so I rebuilt the game loop in Rust. It uses the CPU way better now, and I can train and test new versions a lot faster. And when something goes wrong I can replay the match move by move and see exactly what happened.

Bento Sprint
This was my first full product, and it took a year of teaching myself to get it here. It's a task board for student clubs, with teams, Kanban boards, and announcements, and it posts updates to their Slack, Discord, or Notion so nobody has to copy stuff over. The demo is live if you want to click around.
LUNA
I wrote LUNA in Rust because I wanted to understand how computer-use agents actually work under the hood, and I wanted to see how far I could get with computer vision I wrote by hand instead of ML models. It finds buttons, text fields, and icons with edge and rectangle detection, figures out what to do from a plain English command, and runs every action through a safety layer that blocks destructive commands and rate limits everything. The vision and safety parts are real and tested. Screen capture and actually moving the mouse are still stubbed out, so that's the next thing to build.














