Overview

This course has a final, individual project (IP) that is due during the reading/exam period (see dates below). The purpose of this project is to bring together everything that you have learned in this course and demonstrate your skills and knowledge by designing and developing a project of your inspiration. On the last day of classes, you can choose to show a short demo during the class to get feedback from your peers. Then, you'll schedule a 30-minute meeting with the instructor during the reading/exam period to present your completed implementation and answer questions about your work. This project is the only one in this course in which you are bound by the Wellesley Honor Code to work entirely on your own, without consulting about its implementation with your peers/tutors. You can however come and talk to the instructor at any time if you need help.

Requirements

Since the topic of the project is of your choice, the requirements are about the kind of technologies that you are expected to use in the project, in order to allow for a fair comparison of all students' work.

  1. Your code should run on Meteor, and be uploaded to the meteor.com domain.
  2. The project should make use of at least one API that we used in the course (or an API similar to the ones we saw) to provide either data (e.g. Yelp) or services (e.g. Google Maps distance calculation) to your app.
  3. The project should store user profiles (as in AM6) in the MongoDB database and perform CRUD operations on it.
  4. The project should have at least one interactive graphic element built with D3.js, that fits the theme of your app.
  5. You may not choose as an individual project something you will do as part of the team project, hackathon, or that you have seen on the web.
  6. You are allowed to take an AM that was your individual work and expand it in such a way that it can become an IP. The fact that you'll need to use Meteor will require that you do certain rewriting to make use of the templating system as well as of the database.

Milestones

The IP will go over a few phases:

  1. Phase 1: Idea Submission. Deadline: April 14, end of day. In this phase, you will write an HTML page where you explain your idea, what you'll need to build it (in terms of external resources or data you'll collect from the users), and what kind of value your app offers (educational, entertaining, informational, a mix of all, etc.). You will post a link to your HTML page in the Tumblr blog, marked with the tag #IPidea. Please, do not post your idea days ahead of the deadline, to avoid influencing other's brainstorming process. Try to be as specific you can at this stage, so that your peers can give you informed feedback (see next phase). UPDATE: Don't post the link to the Tumblr blog, because it will reveal the identities of everyone (many students have kept their Tumblr anonymous). Once you have posted your idea on your own webpage on the CS server, send the link to Eni.
  2. Phase 2: Feedback on Ideas. Deadline: April 19, end of day. As part of your two reflection posts in the Week of April 13-19, you will review the proposal of two peers and give them feedback on Tumblr. You should keep track of who hasn't received feedback yet, so that everyone receives feedback by the end of the week. UPDATE: Eni will assign to every student two ideas to review. When you'll post your review on Tumblr, you'll not link to the CS pages, but simply title your blog posts with the IP idea you were assigned to give feedback, e.g, "IP Review 1: Geography Game", "IP Review 2: Better CS249 Aggregator". Here is a short document with guidelines for peer reviewing. Tag your blog posts with #ipidea, so that the reviews will all show on the same column in our Tumblr aggregator.
  3. Phase 3: Detailed App Description. Deadline: April 28, end of day. Based on the feedback you got from your peers and the instructor, as well as your further thinking about your app, you'll write a detailed description of how your app will work on the client and the server side. The client side description should contain mockups of how the web page should look like and how the user will interact with it. The server side description should list collections that will be created in MongoDB, description of what information will be stored in the database, what kind of updates will be made, when something will be deleted, how data will be structured to be used with D3.js and everything else that happens on the server side (talking to APIs, scraping HTML pages, sending emails, etc.). During this time you might have already started implementing your IP, so that you can have a more clear idea of what you can implement or not by the end of the semester. This document will also be an HTML page.
  4. Phase 4: Preview in class. Deadline: May 8, in class. Students who have made good progress on their app can choose to demo it in class and get feedback from their peers.
  5. Phase 5: Meeting with the instructor. Timeline: May 11 - 15.There will be many opportunities during this week to schedule an one-to-one meeting with the instructor to show your completed app and discuss your implementation process.

Honor Code

Once a student has published their IP idea and description on the Tumblr blog for everyone to see, that app idea and implementation strategy will be considered their "intellectual property" for the rest of the semester. This means that no other student or team should take that idea and turn it into an app either for the Wellesley Hackathon or other events until the end of the semester. Furthermore, if in the future you would decide to create your own implementation of that idea, always give credit to your peer by linking to their IP folder with the original description.

Ideas for the Project

Here are some ideas for how existing AMs can be converted into an individual project.

In AM3, some students wrote educational games with Google Maps and Wikipedia to get users to test their geography knowledge and learn about things they didn't know. One thing that these apps couldn't do is to keep track of everyone who plays the game and their scores, the questions they answered wrongly or correctly, how fast, etc. An IP would then take this game and turn it into an app where there is a database that keeps track of users and their game history. Then for informational purposes it converts some of the data into dashboards (either individual or for an instructor) to show different insights (dashboards can be created with D3.js). For example, if you are the instructor of the class, you get to see on which questions students had more trouble with and which were the questions that most students got right. Or you can see how much time each student spent reading the information they didn't know, or whether they clicked on a certain link (or info window). This idea was claimed by Priscilla.

Another AM3 app looked at the menu choices in the Wellesley dining halls. An extension of this app will look like this: every week, the server-side code of your app grabs the HTML pages with the weekly menu and stores that information in the database (this will replace the part of using an API, given that there is no API to access this data). Then, users create profiles with the system to keep track of their food preferences and their preferred dining hall. The app can create a personalized menu for the week and show it to the student when they log in. Also, the user can opt-in to receive email reminders about what dishes not to miss during a week. The value of this app will be to facilitate making healthy eating choices during a busy time.

A better CS249 Tumblr Aggregator. [Note: I would love if someone could build this.] The current Tumblr aggregator while useful at the class-level it is not very useful to every individual, because it doesn't show whether they have completed their goal of two weekly reflection posts and four interactions with other peers. The app will allow a user to enter their Tumblr handle as part of the registration process and then display their activity broken-down in weeks, by showing whether they accomplished their goals for the week. If desired, it can also show how the logged-in user compares to other students in the class. A useful visualization would be to show with which users there has been more interaction and whether there are users with whom one has never interacted in the past. Finally, users can choose to have the system send them email reminders to not forget to write their reflection posts. This idea was claimed by Susie.

A related project could be to create the Aggregator for the instructor, to provide useful information to her. This could entail visualizations that display whether all the students submitted their work this week. Are there any students who are behind? Which posts are generating more interest? Are there any unanswered question posts? Etc., etc.

Choose and Notify

If any of you would like to implement one of the four ideas described above send an email to the Google group to stake your claim. I will then update this page if an idea is taken.

Submission

In your cs249 folder, you should create an IP folder where you will have an index.html page that contains links to all materials you will generate during this period:

  1. A link to your Idea page
  2. Links to feedback on Tumblr you received from your peers
  3. Links to Tumblr posts you wrote to give feedback to your peers
  4. Link to your Description page
  5. Links to blog posts you wrote to describe your progress or different updates on the project
  6. Link to your completed app, deployed on meteor.com

Make sure to provide dates and short descriptions for all links that you will collect in this page.

Grading

This IP counts for 15% of the course grade. This will be converted into 15 points divided in the following way:

  • Submitting the Idea page on time. [1 point]
  • Providing feedback to your peers in time. [1 point]
  • Submitting the Description document on time. [2.5 points]
  • Showing a preview demo in class. [0.5 points]
  • Coming prepared to the meeting with the instructor. [2 points]
  • Implementing the code of the app. [8 points]