I got into programming in fifth grade messing around with Scratch, picked up Java through AP courses in high school, and somewhere in my CS degree at Southern Methodist University I fell down the rabbit hole of embedded systems and assembly. Haven't looked back.
These days I split my time between low-level hardware work and building whatever tools I wish existed. If it's an interesting problem, I'm probably already thinking about it.
Things I've built that actually ship.
K3lPoke OBS Tools is a desktop application built to automate the repetitive parts of Pokémon streaming. It communicates with OBS Studio directly over WebSocket, managing a queue of Twitch clips that can be triggered and played back mid-stream without manual scene intervention. The chat trigger system lets viewers interact with configurable commands that fire at weighted probabilities — useful for randomized responses, countdowns, or game events. A drag-and-drop scene arranger handles OBS layout management without needing to touch the OBS interface itself. The app ships with a full auto-update pipeline through GitHub Releases, so users always have the latest version without reinstalling.
Pokeboard.net began as a shared bingo board for a group of streamers and expanded significantly from there. The platform now includes a real-time leaderboard that updates as stream events occur, a shiny hunting tracker with per-user statistics, and a Gen 2 IV and gene breeding calculator built from research into how the original Game Boy games handle stat inheritance. The backend is Node.js with Express, the database is Supabase running on Postgres, and the React frontend is deployed globally on Vercel. The entire system is exposed through a REST API designed so stream overlays, bots, and external tools can integrate with it without touching the UI.
A from-scratch skip list implementation written during my data structures coursework at SMU. Skip lists solve the same problem as balanced binary search trees — O(log n) search, insert, and delete — but achieve it probabilistically through multiple linked layers rather than tree rotations. This implementation avoids contiguous memory allocation entirely, relying on chained node pointers across levels. The project was a good exercise in thinking carefully about memory layout and pointer arithmetic in ways that higher-level data structure work rarely demands.
Notes on things I'm building and learning.
I'm open to new opportunities, collaboration, and interesting projects. Reach out through any of the links below.
Download Resume