projects

stuff i
actually shipped.

a few things I built end to end — problem, code, and the part where it has to work for someone else.

Route Optimizer

Miniature Harvest · internship

live

A delivery team was planning twelve-stop runs by hand, about thirty minutes every morning. I modelled the route as a traffic-aware Traveling Salesman Problem with fixed start and end points, put it behind a REST API, and gave them a phone-first interface with address autocomplete, drag-and-drop overrides, and one-click navigation. Planning now takes under two minutes, and one existing route came back about an hour and a half shorter.

  • Python
  • OR-Tools
  • FastAPI
  • Pydantic
  • Google Maps API

Gesture-Controlled Football

personal project

source

A football game you play with your hands instead of a keyboard. A webcam feed goes through MediaPipe into a PyTorch LSTM that reads thirty-frame hand-landmark sequences as five different actions. The model is exported to ONNX and runs inside a native C++17 game built on raylib, so live gestures turn into player movement in real time. Normalizing landmarks against the wrist was what stopped it from guessing based on where your hand sat on screen.

  • C++17
  • raylib
  • PyTorch
  • ONNX Runtime
  • OpenCV
  • MediaPipe

Reimbursement Automation

nonprofit education department

on request

Staff were reimbursing expenses by hand — retyping receipt totals into a form, printing, scanning, attaching each receipt separately. This does it in one screen: drop in the receipts, let OCR read them, correct what it got wrong, get back a finished PDF packet. About fifteen days of processing down to two. Everything runs in the browser, because receipts are financial records belonging to real people and there was no good reason to put them on a server.

  • React
  • TypeScript
  • Tesseract.js
  • PDF-lib

The deployed site carries information specific to one community, so it isn't linked here. Happy to show it on request.

Parent Update Generator

school mentorship program

on request

Around thirty mentors were writing the same weekly progress update by hand, in three different formats. They now fill one form and watch the message compose itself as they type, then take it out as a print-ready PDF, a Word-compatible file, or a WhatsApp message. Photos and form data never leave the browser — no database, no upload.

  • React 19
  • Next.js
  • TypeScript
  • Tailwind

The deployed site carries information specific to one community, so it isn't linked here. Happy to show it on request.

Open House Information Hub

school mentorship program

on request

A responsive page that replaced a stack of printed handouts that went out of date the moment they were printed. Calendar, expectations, reading plans and registration all live in one data file, so a coordinator can update next year without touching a component. QR codes are generated at build time rather than pasted in, so a link can change without anyone regenerating an image.

  • React
  • TypeScript
  • Vite
  • Vitest

Built for one community and not deployed publicly. Happy to walk through the code and the running site on request.

Spectral Peak Detection

SMU · research fellow

in revision

Finding peaks in rotational spectroscopy data with a multi-kernel 1D CNN, rebuilt for an ACS Omega revision. The pipeline turns 70,673 Parquet spectra into 68 sharded TFRecord datasets and trains on A100 GPUs through Slurm. The part I learned most from was an AUC collapse: I derived the loss function's degenerate minimum on paper, then traced it to single-point labels sitting on features that span several points.

  • Python
  • TensorFlow
  • Slurm
  • Linux

coursework

Data structures and algorithms written from scratch for SMU classes — no standard-library shortcuts.