A real-time drone telemetry monitor written in Rust. Simulated drones send JSON telemetry over TCP to a multi-threaded processing pipeline that detects anomalies (altitude drops, speed spikes, battery warnings, signal loss) and displays everything live in a terminal dashboard.
Implemented Proximal Policy Optimization (PPO) from scratch in PyTorch to train a MuJoCo Walker agent to walk. The policy network maps a 24-dimensional state vector (14 joint orientations, center-of-mass height, 9 joint velocities) to a Gaussian distribution over 6 continuous joint torques; a separate critic estimates state values for Generalized Advantage Estimation (GAE, γ=0.99, λ=0.97). Training used a three-phase curriculum: standing (1M steps) to learn balance, walking (5M steps) warm-started from the stand checkpoint, then fine-tuning at lower learning rates to consolidate the gait. I included clipped surrogate objective (ε=0.2) with KL-divergence early stopping, advantage normalization, gradient clipping (max norm 0.5), and linear LR annealing.
An empirical study of Social Disorganization Theory (Shaw & McKay, 1940s) using real-world NYC data. Built a full-stack web app featuring a Data Explore page to identify census tracts with extreme trends, side-by-side comparison of two measures, an interactive Data Dashboard with maps and visualizations, and documentation pages covering methodology and API docs. Done with Kylie Chang, Dhruv Gupta, and Brandon Tsai.
Investigated whether Spotify audio features and descriptive metadata can reliably predict a song's popularity. Framed as a supervised regression problem using a dataset pulled from the Spotify Web API, we evaluated Linear Regression, Random Forest, and XGBoost on both raw popularity scores and a novel engineered target. Our key contribution is a time-scaled popularity metric — popularity / (1 + log(song_age_days)) — that corrects for recency bias, down-weighting newly released songs whose streams are inflated by algorithmic promotion. XGBoost achieved the strongest results (R² = 0.73, MAE = 7.45 on raw popularity), with energy, valence, loudness, danceability, and tempo emerging as the most predictive features. Done for CIS 5200 with Meha Gaba and Sauman Das.
view on github →Winner of the FemmeHacks '25 UI/UX Design Category. A Tinder-style restaurant discovery app built at a hackathon to solve the classic "where should we eat?" problem. Users swipe through curated local restaurants — right to like, left to pass — and match with friends to find a spot everyone agrees on. Supports filters for cuisine, price range, and distance. Built with React Native for cross-platform support, TypeScript for the matching and preference logic, and the Google Places API for live restaurant data.
A GUI paint application and widget toolkit built from scratch in OCaml. I implemented a graphics context module (Gctx), a composable widget library (buttons, checkboxes, sliders, layout primitives), and an event loop on top of OCaml's native Graphics module.
A minimal personal website built with HTML, CSS, and JavaScript. Features typewriter animations and a live blog feed from Substack.