I build webcam gaze tools for cognitive screening research, and I run them in clinics to find out where they break.
Education
Research
Carried the EyeCI pipeline into field research in clinics and community events, evaluating 2,095 session-level runs. Built and ran the whole deployment loop: session protocol, data capture on clinic laptops, quality control, and analysis of where the model failed under real conditions.
Adapted the same browser-based system for ASD-focused research, funded by Xunfen Biotech. Built the collection platform full stack: the console research staff use to run standardised sessions, with authentication and roles, session records, capture quality tracking, and JSON or CSV export. It reports screening references only. It does not output diagnostic conclusions.
An exploratory machine learning pipeline producing cognitive screening scores from gaze traces over a fixed image set. Field sessions revealed head movement leaking into the predictions, an artifact absent from my solo testing. That pushed the work back to measurement: a newer gaze method designed to be less sensitive to head pose is described in a recent preprint.
Open source
Gaze tracking built on MediaPipe landmarks: camera access, multi-point calibration, smoothing, filtering, and a live gaze overlay. Ships as a Python library and a browser toolkit, and runs on an ordinary laptop. MIT licensed, 40+ forks.
A TUI Reddit client written in Rust, built for my own setup and now maintained for a much wider user base, with ongoing work on async fetching and caching.
Mistake.nvim, a Neovim autocorrect plugin carrying over 20,000 entries; obfuscate.nvim, which visually scrambles code so you can work in public; ObsidianLinker, a note linker for Obsidian; px, an immutable Python package and environment manager; and gnav, a GNOME workspace navigator.
Made static exchange evaluation neutral in Misère variants, fixing a forced-selfmate blind spot where the engine played on instead of finding a mate in two. Roughly 45 Elo on tactical test positions.