Python JavaScript HTML CSS
Latest commit ba55512 Feb 1, 2017 @DavidCain Resolve 500 on GET delete, update drop logic
Deleting database objects on a GET is a solidly bad idea. Thankfully,
Django just wants to render a template with the default DeleteView.
These templates are not implemented, so we should instead redirect to
the appropriate pages where POST-generating buttons are present instead.

Also fix some uses of to instead use


This is a Django-based trip management system for the MIT Outing Club.

MITOC's volunteer leaders craft trips to take participants climbing, hiking, biking, skiing, mountaineering, rafting, canoeing, and surfing. All trips are open to MITOC members - a community of thousands.

Since its creation, the site has had over 4,000 users and 170,000 page views.


It takes a single command and a few minutes to deploy this software. Clone the mitoc-ansible repository and follow the instructions there to easily launch an instance.


This site was created in 2014 to improve MITOC's Winter School program. It has since evolved into the central portal for all MITOC trips.

Once upon a time, Winter School trips operated on a first-come, first-serve basis. Signups opened at noon, and filled up extremely quickly. Many participants found themselves unable to attend any trips in a given weekend, and others struggled to gain exposure to new activities.

We introduced a lottery system to combat the "fastest gun in the West" problem. Instead of rewarding trip slots to whomever could sign up the fastest, we used an equitable algorithm to distribute trip slots. As a result of this new algorithm, we saw unprecedented levels of participation. Everyone who expressed interest in attending weekend trips was placed on a trip, and popular activities like ice climbing were more accessible.

Today, all MITOC trips are organized through this portal. Many trips are first-come, first-serve, but we use lottery-based signups for other popular trip formats once subject to same problems as Winter School.