Fall 2017 CS418/518 Project - Milestone 2

The course project will have students build a corporate collaboration website similar to Slack. The project will be broken down into four milestones, where a milestone will consist of requirements to be met by each student's implementation.

Each milestone will have a set of "Base Requirements" and possibly "Get Ahead" requirements. Students only need to be concerned with meeting the Base Requirements for the milestone's deliverables. The Get Ahead requirements must be met for the milestone after the milestone in which they are defined (e.g., Milestone 1's Get Ahead requirements will be due as part of Milestone 2), so students can opt to begin working on these if time permits.

About half way through the milestone (see the CS518 Course Homepage for due dates), a midway status report will be presented in class by each student. This report will consist of a 2-3 minute presentation (slides optional) describing the planning done by the student to meet the milestone's requirements, preliminary design strategies, the status of development, and any further information to signify that progress is being made. A demo is not necessary but screenshots are encouraged. This presentation will be worth 2 of the 25 points for the milestone. You will get 0 of 2 points if you are not present, fail to show progress, or do not attend your peers' presentations. Even beginning to think about the problem or develop design is considered progress, so long as you show it in the midway status report.

The four milestones' and midway presentation dates and deadlines will be defined on the course website.

Project Milestone 2 - Basic Operations

This milestone extends on the first milestone for building a fully-operational collaboration site.

Requirements (Base)

All Base Requirements from milestone 1 must be met to obtain full credit on milestone 2.

Message Reactions
  1. Users should be able to add "reactions" to posts
  2. At a minimum, users should be able to provide :+1: and :-1: reactions
  3. Users should not be able to add duplicate reactions
Thread Management
  1. Posters should be able to reply directly to posts (creating a sub-thread) instead of simply posting to the open forum of a channel
  2. Replies to posts should be grouped -- in some intuitive way (e.g., indented) -- with their root post and other replies
  3. Users can create channels
  4. Users can invite members to channels
  5. Users can make private channels (i.e., invitation by owner, only)
User profiles
  1. An interface must be provided to allow a user to upload a profile picture (avatar).
  2. A user's avatar should be displayed alongside all posts by the user.
  3. Create a PROFILE PAGE that uses PHP query parameters to build the page's contents. This query parameter must indicate a value that can be used to uniquely query the user from your database. On this profile page, display the user's username, avatar, and channel membership (except private channels).
  4. Provide an HTML form for new users to register for your website by providing a username, email, and password. When a username or email is provided for registration that already exists in your database, reject the rejections and ask the user to select another.


At 3:00pm on the demo day, a script will clone the GitHub repository you specified in assignment 1.


Your project repository can contain any number of PHP, HTML, and JavaScript files to support your in-development site. Follow the instructions in Milestone 1 regarding MySQL connections.
The home page for your web site must be located in a file named "index.php". In addition to the files for the web site, you should also provide a backup of your MySQL database for importing for your project demo. This can be accomplished in the phpMyAdmin Export tab. The resulting file should be a .sql file. This file will be loaded into a MySQL instance on demo day, so verification of the integrity of the dump (i.e., try to import it using phpMyAdmin) is encouraged. Include this file in the root of your project repository as milestone2dump.sql. At least 10 questions and 5 users should be included in the dump.

We will use a Docker-based deployment scheme on demo day. This system will be equipped with the latest PHP, mySQL, and Apache versions. The instance will also expect the milestone2dump.sql and index.php files to be in the root of your project repository and will assume you used the above credentials for interaction with your database.

Per the syllabus, a brief writeup detailing how each requirement was met, design decisions, programming tricks, and helpful resources consulted is required to be submitted as a hard copy on demo day.