I’ve worked on a number of extracurricular projects, often on my own, most of which involve web development in Python and/or JavaScript.

Recent (2014-present)

Atomic Grader

Core developer of exam grading software.

Berkeley Math Tournament

Redesigned the website using ZURB’s Foundation front-end framework. Leading development of registration, grading, and problem submission systems, written in Python using Django.

UCB Grade Distributions (Revised)

Visualization of grade distributions for each department at UC Berkeley from Summer 2007 to Summer 2015. I handled the data retrieval and munging. We built this with Python and JavaScript, using Django on the backend and D3.js for the visualization.

BRISTool (GitHub)

Single-page web app for performing batch reverse image search, or reverse image search on several images at once, using the Google Images service. Built in JavaScript, using node.js.

NCIndex (GitHub)

A better interface to UC Berkeley instructor ratings on Ninja Courses, using scraped data. Features a searchable list of instructors and filtering ratings by courses taught. Built with Python, using Flask, BeautifulSoup, and Flask-SQLAlchemy.

4! (GitHub)

A clone of the game 24: the player’s goal is to compute 24 with only four digits and basic arithmetic operations. Built primarily with JavaScript using node.js and express.

Analysis of UCB Grade Distributions (GitHub)

Scraping and analysis of averages and number of grades reported from grade distributions on UC Berkeley’s ScheduleBuilder. Built with Python, using BeautifulSoup and SQLAlchemy, and R (for some plots).

Older (2012-2013)

UCB Schedule: Scraping and Analysis (inactive) (GitHub)

Scraping, statistics, and a RESTful API for data from the UC Berkeley Schedule of Classes. Built with Python, using Flask, BeautifulSoup, and SQLAlchemy.

Facebook Status Visualization (GitHub)

Analyzes the sentiment of each of the user’s 25 most recent Facebook status updates, and plots them on a radial graph, where the radius increases with how recent the status update was and the angle is determined by the time of day that the status update was posted. Made in JavaScript using the Lymbix API, the Facebook SDK for JavaScript, D3.js, and jQuery.

Diff Checker (inactive) (GitHub)

Checks for differences in the source of a web page and sends an SMS message to the user’s mobile device when a difference is detected. Made in Python using the Twilio API for SMS messaging and Flask.

Ninja Instructors (inactive)

See NCIndex above for a revamped version of this. A simple interface for accessing students’ average ratings of UC Berkeley instructors, obtained from Ninja Courses. Made in Python using Scrapy and Flask.