Cover art.

willWilliam Victor/AI engineer/Madison, WI
15 builds

Rough tools,made to work.

15 builds in the log. Every one of them runs. Most started as something I didn’t know how to do yet. That’s why I keep the list.

I’m looking for an AI engineering role. I like agents, developer tools, and software that has to work outside a demo. Remote or Madison.

Riftbound Self-Play

I trained a model that plays Riftbound.

The first version spent more time running games than learning from them, so I rebuilt the game loop in Rust. That change made far better use of the CPU and let me train and test new versions much faster.

Read the build →
  1. The model sees the board, weighs the moves it can make, and picks one.

  2. It takes each seat in turn, so every match becomes another chance to learn.

  3. Running games was the bottleneck. Rebuilding that loop in Rust made training much faster.

  4. Each finished match goes back into training, then the next version plays again.

Riftbound card art © Riot Games.

GitHub, live

The last year on GitHub.

The same daily history GitHub shows on my profile. It refreshes here every day.

Open GitHub →
4,404contributions in the last year
877in the last 30 days
201active days
to to Full yearLatest 26 weeks

The log

15 of 15 · newest first
Rust / Python01

Riftbound Self-Play

I trained a model that plays Riftbound against itself. The first version spent more time running games than learning from them, so I rebuilt the game loop in Rust. That made far better use of the CPU and let me train and test new versions much faster. When something goes wrong, I can replay the match move by move and see exactly what happened.

The Bento Sprint Kanban boardNext.jsPrismaPostgresNextAuth
Next.js11

Bento Sprint

My first full product. I built the club setup, teams, Kanban boards, announcements, and Slack, Discord, and Notion integrations in Next.js 16. Prisma and Postgres store the data, NextAuth handles sign-in, and an outbox worker sends the integrations. It took a year of teaching myself, and the demo is live.

LUNACLIPSAMFlorenceTrOCR
Rust13

LUNA

I wrote LUNA in Rust because I wanted to understand how computer-use agents actually work. CLIP, SAM, Florence, and TrOCR read the screen. LUNA then moves the mouse, clicks, and types, with a safety check in front of every action.