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