Overview

As you recall, there are only two requirements for the team project:

  • The topic of the project has to be about Wellesley College (everything that can be tied to the life of a student at Wellesley is allowed).
  • The app should be written in the Meteor framework and make use of its real-time features.
  • The ultimate goal is to give you experience with building a Meteor app from scratch, while working together with your peers, so that you can use this knowledge to build your own Meteor app for the IP.

    Team Discussion

    I have matched teams based on the similarity of their apps, because they can benefit more from the discussion.

    • Team Chimuanya, Meridian, Sophia discusses with Team Audrey, Diana, Lee
    • Team Clare, MR, Susie discusses with Team Lucy, Jessica, Jessica
    • Team Jamie, Priscilla, Ella discusses with Team Pamela, Gracie

    Conversation Structure

    1. Each team designates a member to take notes of the discussion.
    2. Teams take turns explaining their app idea, showing the prototypes, explaining the flow of interaction.
    3. Teams take turns into discussing the data that will be stored in MongoDB and how the document features are mapped into interface elements. Would you need additional features that dont' show in the interface? [See the example of the "meetings" documents below].
    4. Discuss the real-time features of your app. What kind of operations in the database do they require? (insertions, updates, deletions) Try to map out these operations.
    5. Discuss whether users need to log-in to use your app, and what do they gain from this?

    After the meeting, each team continues the planning / implementation of their app.

    The note-taker shares the notes with the rest of the team. Each team member writes a blog post about one aspect of the discussion that immediately affects their implementation tasks.

    The Meeting App data structure

    The meeting app http://meetingsappcs249.meteor.com/, uses only a few of the document's feature in the user interface, and a few others are added to make it easier to sort the documents or delete them when necessary.

    These are the fields that are directly taken from the inputs of the form:

    var meetingObject = {
      name: event.target.meetingName.value,
      location: event.target.meetingLocation.value,
      date: event.target.meetingDate.value,
      startTime: event.target.startTime.value,
      endTime: event.target.endTime.value,
    };
    
    Meteor.call('insertMeeting', meetingObject);
    

    However, when we store a document in the "meetings" collection in the database, we'll add or modify some of these values:

    Meteor.methods({
      insertMeeting: function(meetingObj){
      
        // create two new fields for startTime and endTime, so that they are
        // Date() objects
        var startTimeObj = new Date(meetingObj.date + " " + meetingObj.startTime);
        var endTimeObj = new Date(meetingObj.date + " " + meetingObj.endTime);
        
        Meetings.insert({
            name: meetingObj.name,
            location: meetingObj.location,
            dateStr: meetingObj.date,
            // Use the moment.js library to format time in US time
            startTimeStr: moment(startTimeObj).format("hh:mm A"),
            endTimeStr: moment(endTimeObj).format("hh:mm A"),
            startTimeDate: startTimeObj,
            endTimeDate: endTimeObj,
            hasExpired: false
        })
        
        console.log("new meeting added in mongodb");
      }
    })