Distributed Application Final Project

Task: The final project is intended to have you synthesize all you have learned into a significant distributed application development project. You are to create a web application that meets the requirements of the rubric below, and demonstrates:

  • Use of Node.js.
  • Good separation of concerns (model / view / controller)
  • Using Ajax and/or WebSockets (socket.io)
  • Using cookies and/or sessions (or localStorage/sessionStorage) to manage web application state information.
  • Interacts with something else, by
    • Making use of one or more 3rd party web services
    • and/or live collaboration with other users via socket.io
    • and/or interacting with physical sensors or actuators (i.e. IoT)
  • Storing data permanently in a server-side database
  • Adapting presentation to work on both desktop and mobile browsers.
    • (As makes sense for the application)
  • Deploying the web application to the cloud.

The application should do something purposeful. It should do something that others could find useful, entertaining, informative, or of some other value.

Work alone: The projects are meant to develop and assess each student's individual mastery of distributed application development topics. Therefore the project requires that students work alone.

Three phases:

  1. Planning: Due Monday November 14 by classtime.
    • Create a plan for your application.
    • It must include: (each of these should be 1/2 page unless otherwise noted)
      • A general overview of the application
      • A storyboard of the application, for both the desktop and mobile versions (this may take multiple pages).
      • A description of what other web services will be used (if any), including an indication of what API methods will be used.
      • A description of the functional requirements of the (MVC) controller. In other words, what URL patterns will the router need to identify and what models will be called. If you are using socket.io, they you might have few routes, but include here the events that will be emitted from the client(s) and the server, and briefly describe what they are for.
      • A description of the (MVC) model(s), including a list of the names of the methods implemented. In other words, what "business logic" is necessary to make your app work. This can be doing analysis, managing data in a database, getting or putting data from a 3rd party source, or managing the state of your game play.
      • A description of what data will be persistently stored in the database beyond the life of a session.
    • You should submit a single Microsoft Word document to the Blackboard assignment FinalProjectPlan.
    • Be sure to include your name inside the document.
  2. Project: Due Tuesday December 13 @ 11:59:59PM (i.e. midnight Tuesday night).
    Submit 3 parts:
    1. Your project should:
      • be in working order, ready to demonstrate,
      • be deployed via Zeit's Now
    2. Submit your project as a zipped project directory.
      • Submit to Blackboard assignment FinalProjectCode
    3. Submit a Microsoft Word document containing the following:
      1. Name of the developer
      2. Web application URL (deployed via Now)
      3. A description of how your application meets each point of the rubric (below):
        • With screenshots and supporting snippets of code where sensible.
        • Your document should contain sections (1-13), addressing each of the elements in the rubric (and optionally 14).
      • Submit the document to Blackboard assignment FinalProjectDocument
  3. Demonstration: Thursday December 15, 1:00pm - 4:00pm (as stated on the CMU Final Schedule)
    • The order of presentation will be randomly chosen, so you will not know when you are going until the time comes.
    • You must be present for the full set of presentations. There will be a 5% final project penalty for arriving after 1:00pm or leaving early.
    • Each person gets 5 minutes to pitch (present) their application
    • Both desktop and mobile versions should be demonstrated.
    • Each presentation will be followed by a minute of Q&A.
    • You must demo the project you deployed to Now and included the URL in your document.
    • No slides or other materials are necessary, only the distributed application itself.
    • Students will assess the demonstrations. Prizes will be awarded.

Rubric: Your application should:

  1. Implement a distributed application that does something of value.
    • Include a description with screenshots of user interaction
  2. Updates the content displayed on the client based on interaction with the server.
  3. Use Ajax style interaction or WebSockets (via socket.io)
  4. The server-side application interacts with other systems by one or a combination of:
    1. Accessing one or more 3rd-party web services
    2. Coordinating live collaboration with other users
    3. Interaction with Tessel devices
  5. Demonstrate good separation of concerns with an MVC architectural style.
  6. Use cookies and/or sessions (or localStorage / sessionStorage) to manage web application state information.
  7. Store some data persistently using a server-side database.
  8. Adapt for access by desktop (function may be different than mobile)
  9. Adapt for access by mobile (function may be different than desktop)
  10. Work when deployed in the cloud (via Zeit Now)
  11. Demonstrate good separation of JavaScript, CSS, and HTML
  12. Make appropriate choices of HTTP methods
  13. Demonstrate good coding and commenting style.
  • Penalty -5: If project has not been submitted correctly (i.e. zipped code file and separate document to Blackboard as described above.)
  • Bonus +5: The application employs authentication and authorization. (Note: This must also include the ability to create a new login.)
  • Bonus +5: If the application is fully published to GitHub, including LICENSE and complete README.md files.

Prizes will be awarded in categories such as best user experience, visual design, and most likely to go viral.

Incidental Use of 3rd Party Code: You will certainly reuse code in this project (e.g. node.js, express, jQuery, foundation, bootstrap...), but you should do so keeping in mind the guidelines in the Code Reuse slides. Your application will be graded on the code that is yours only, and most of the interesting part of your work should be your own, not borrowed from others. These are tools that you can use and build your application on. If you borrow code for a shared whiteboard, and that is the gist of your application, then the interesting part is not yours. But if you borrow a shared whiteboard and it is only a small part of a complete children's game, then in this case the whiteboard is just another tool you built upon.