Projects
A list of some things I've built.
Robot learning & RL
Offline RL with flow policies write-up
- SAC+BC, IQL, and flow Q-learning on OGBench and navigation task.

DQN and soft actor-critic write-up
- DQN on CartPole, LunarLander, and MsPacman, SAC with auto-tuned temperature and clipped double-Q on HalfCheetah and Hopper

Imitation learning write-up
- MSE and flow-matching action-chunking policies trained on expert demos

Policy gradients write-up
- REINFORCE with reward-to-go, learned baseline, and GAE on CartPole, HalfCheetah, and LunarLander

LLM RL with GRPO
- GRPO and REINFORCE for LLM post-training on MATH with verifiable rewards; ablations over PPO epochs, KL coefficient, and clipping
ENPIRE SO-101 write-up · code
- Ported the ENPIRE robot harness from YAM station to my SO-101, MuJoCo with
minkIK for the 5-DoF arm, Feetech drivers, leader-arm teleop, RPC server
Lace & Place: autonomous shoe sorting
- A UR7e arm that takes a pile of shoes and sorts them on a rack.
- Implemented and compared 2 approaches using ROS 2 and LeRobot
- Classical perception, grasp estimation, motion planning, and grasping: align depth sensor map with scene camera using projective geometry, GroundingDINO & SAM, compute graspable points from filtered point clouds, IK with MoveIt, PD controller.
- Robot foundation models: fine-tuned SmolVLA on 250 trajectories for each class.

Generative models & vision
Ideal flow machines write-up
- Built a UNet backbone, then trained one-step denoisers, time-conditioned flow matching, and class-conditioned flow matching with CFG on MNIST
- Reimplemented the IS, LS, ELS, and bbELS analytic score machines from Kamb & Ganguli and ran them against the trained UNet

Diffusion and flow matching write-up
- Sampling loops, classifier-free guidance, SDEdit, visual anagrams, and hybrid images with DeepFloyd IF. Trained a class-conditional flow-matching UNet on MNIST

NeRF from scratch write-up
- Calibrated my camera with ArUco markers, solved for poses, and trained a NeRF on 40 photos of an object: ray sampling, positional encoding, volume rendering, and novel views visualized in
viser
Facial keypoint detection write-up
- 68 landmarks predicted 3 ways: CNN coordinate regression, ResNet-18 / DINOv2 transfer, and U-Net Gaussian heatmaps

Classical vision: mosaics, filters, Prokudin-Gorskii mosaics · filters · colorizing
- Automatic panorama stitching (Harris corners, ANMS, RANSAC homographies, Laplacian blending), hybrid images and multiresolution blending, and pyramid alignment of glass-plate color exposures

Language models
Llama 3 from scratch
- BPE tokenizer trained on TinyStories and transformer architecture: RMSNorm, SwiGLU, RoPE, masked MHA, with FLOPs and memory accounting
- Training utilities (stable cross-entropy, gradient clipping, warmup + LR schedule), pretraining on TinyStories, then a classification head for QA compared against few-shot prompting
Berkeley EECS RAG write-up
- Crawled ~15K eecs.berkeley.edu pages and wrote a 138-question QA set (91% IAA), implemented dense retrieval, cross-encoder rerank, full-document context to Llama-3.1-8B on CPU with 4 GB RAM constraint
Chatbot Arena
- Explored the LMArena battle data with
plotlyandgradio, identified stylistic confounders, and rebuilt the leaderboard with a Bradley–Terry model
Building things
Viso code · manim-voiceover-plus
- Turns math questions into animated explanations with multi-agent pipeline:
smolagentsRAG research agent, planning agents, and a Manim rendering agent with tool calling - Won Most Technical Project at AdventureX and placed in the top 20 at the amber.ac hackathon
- Published
manim-voiceover-pluson PyPI for multilingual, parallelized voiceover generation
