Rules

Overview

To qualify for this year's Web Programming Competition and compete for cash prizes, you must put together a team that is eligible to participate. Your team must build a Web application that matches the competition themes, and meets our technical requirements. Your development schedule must align with our milestones. Your team may wish to enter the casual division.

Anyone is permitted to listen in on our lectures and workshops (although priority will be given to those enrolled in our course), and any team with 1-3 students that completes our milestones and submits a website that meets the technical requirements will get academic credit for the course (but may not be eligible for cash prizes; see below).

Eligibility Guidelines

The following rules regard eligibility to compete for cash prizes.

Undergraduate students: All undergraduate students enrolled at MIT or another college which has an official cross-registration program with MIT (Harvard, Wellesley, etc.) are considered to be eligible.

Graduate students: MIT graduate students are considered to be eligible. Graduate students of another university are ineligible.

Other students: A full-time undergraduate student who does not satisfy the above requirements may participate in the competition only as part of a 3 student team in which the other two students are eligible as described above.

Team size: Teams competing may have 1-3 students.

Outside help: Non-team members may not contribute to a site's implementation or design (including graphic design). However, team members may use publicly available components (see Technical Requirements)

Past winners: Past competitors who have won more than $2000 total in their 6.148 (formerly 6.470) career are not eligible to compete. As an example, if a team of 3 wins $6148, each team member is considered to have won $6148/3 and is not eligible to compete again. However, members of a team of 3 that won $5000 can compete again. Special prizes do not count towards this restriction. If in doubt, please contact the staff.

Staff: Current staff members and their immediate family members cannot compete.

You do not have to officially register for the course (6.148) to compete, as long as you are eligible. Therefore, you may compete in 6.148 even if you are taking another 12 unit class during IAP by not registering officially for 6.148. However, we strongly encourage that you register for the course so we have a count on the number of competitors for logistics.

Technical Requirements

All teams' sites must satisfy the following technical requirements to qualify for competition and gain academic credit. The requirements are intended to ensure entries entail a significant programming effort, and aim to expose students to users' expectations for modern web sites.

You may not begin development on your site until Monday, January 8, 2018 at 11AM. Failure to do so will result in disqualification.

Your site must meet all the following basic requirements.

Basic Requirements

Dynamically-generated, database-backed pages. Your site must contain pages that are produced dynamically by some server-side application (e.g. Node.js, Ruby on Rails, PHP or Python scripts) using the results of queries to some database or other data service.

Personalized experience based on user accounts. Your site must have a sign-in feature. You may implement your own username/password login system or use an existing system (e.g. Facebook or Google login). The content and/or UI of the website should reflect whether a user is logged in. You are not required to implement account management (e.g. password recovery). Note: If your site uses MIT certificates, you must implement an alternative form of authentication for our non-MIT judges.

Original design and implementation. Your site's high-level design and the implementation of key features must be original. You may use Web application frameworks like Express.js or Ruby on Rails and frontend frameworks like Bootstrap and Backbone. You may use open-source components as long as the top-level design is original and your site's main functionality is not simply a wrapper around the component. You may not customize a CMS system such as Wordpress for your site.

Content

Your site must help users access a nontrivial amount of content. You may achieve this goal by one of the following methods.

Pre-generated dataset. Your database contains a processed version of a publicly accessible dataset, or you can bootstrap your site with fake data. If you choose to bootstrap your site by generating data, be creative! Judges will be bored by a site where the same three names show up everywhere!

3rd party data access. Your system uses another application's publicly accessible API to access and return data on the fly. You must declare all 3rd-party APIs that you use. If you go this route, you should use a database as a cache and fallback mechanism for the API requests. You will be disqualified if your application malfunctions after the submission deadline as a result of a broken 3rd party API.

Frontend

Your site must contain some nontrivial frontend feature. At a high level, this means that your site cannot simply consist of pages returned by the server, but rather must support some sort of dynamic user interaction. For example, site that consists mostly of Ruby on Rails scaffolds will not satisfy this requirement. CSS alone does not satisfy this requirement.

Here are some suggestions on how to satisfy the frontend requirement. Feel free to deviate from this list and be creative -- remmeber that there is a special prize for the most innovative, well-executed frontend feature!

Data visualization. Your application presents data in a visual manner that enhances the users' understanding of the data. The visualization should highlight some feature of the data that isn't obvious or trivial. The user must be able to influence which data gets displayed in the visualizations. You are allowed to use a pre-existing implementation for your visualization, like a jQueryUI widget, provided that it fits with your application. Remember that all widgets and libraries must be cited.

Dynamic filtering. Your application shows a small (< 10%) subset of data which is most relevant to the user at the moment, or ranks the data such that the most relevant items are shown first. The subset and/or the ordering of the data must change in response to the user's actions. Three examples that would fulfill this requirement are full-text search, criteria-based search, and a "recommended for you" section. For the latter, you will have to convince us that the contents changes based on user actions.

Asynchronous viewing/modification of data. After your application is loaded, future additions, modifications, or deletions are done asynchronously (without a new page load). A "single-page app" that contains significant functionality implemented via asynchronous calls to your server would satisfy this requirement.

Milestones and Version Control

Your must use version control with Git to develop your site. When submitting the second milestone and the final product, you must include a Git commit hash that is accessible by the staff.

We require that you use Github to host your source code. The staff will create repositories for your use after Milestone 0. We will have a tutorial on how to use Git during the first week of class; if you need help, you can also email the staff or attend office hours

Legality and Academic Integrity

Your site must comply with U.S. law and MIT academic policy.

Plagiarism. We will ask you to name all your team members and list all the 3rd party data, code, and media that you have used. Please keep careful track of your sources, just like you would for any other course, and include a citation of ALL sources used. This includes, but is not limited to, the use of: 3rd party libraries, code distributed by the staff, code snippets shared on Piazza, and code snippets found on StackOverflow or other forums. For all components of your application that are not your own, include a citation in the README of your repository. Additionally, for code snippets pasted (with or without modification) into your source code, include a brief citation or link to the origin of the code as a comment in the code itself. Plagiarism may result in disqualification, a failing grade, and referral to MIT's Committee of Discipline.

Third-party code/data/media. Any code or content that is not your own must be public available at no cost through legal means. This includes content such as images, fonts, and stylesheets. All such code and content must be cited in your repository's README (see Plagiarism section above). You may not use any code that you wrote before January 9, 2018, unless it was publicly released.

Straight-forward evil. Do not spam or host malware. Do not encourage or assist users in breaking non-disclosure agreements or infringing copyright. Your site must not provide a haven for discussion or sharing of topics violating relevant local, state, and Federal laws, including copyright law. Do not abuse MIT's infrastructure or databases. Do not interfere with other contestants' development process.

Miscellaneous

Your site must work in one of the following browsers (you will specify which one in the milestones). We will use the browser you specify to view your website for judging and grading purposes. The latest release of each of these browsers will be used.