Menu Expand Search
CS4530, Summer 2025

Individual Project 2 Due Mon, May 19 at 6:00pm Boston time

Generative AI tools may not be used for this assignment and must be turned off in any code editors you are using. You are expected to make a good-faith attempt to avoid reliance on “AI Overview” features in search engines, and to verify anything you see there with authoritative sources.

Changelog:

Objectives of this assignment

The objectives of this assignment are to:

Getting started

Start by accepting our GitHub Classroom invitation — this will be available after 6pm on May 13. It will create a GitHub repository for you which will include the starter code for this assignment. You will set up the assignment as before. Do not install any additional dependencies: package.json must be unchanged.

Tasks

The code you start this assignment with is a viable solution to the first individual assignment, with of changes that you can inspect by going to your copy of the repository and clicking the “rewind clock” icon that has “N commits” next to it (for some value of N).

The button that takes you to the GitHub revision history

When you click on this, you’ll be able to see the series of major changes made to the first project’s code:

Task 1: Sharing biographical details

For this task, review the feedback on your conditions of satisfaction from individual project 1, and revise these conditions of satisfaction, adding or removing conditions of satisfaction as needed. (You don’t have to write any code for this task — that will come later!) Make sure that your essential conditions of satisfaction fulfill the needs of the user story. You will be accountable for the essential conditions of satisfaction in the third individual project. Accordingly, we’ll mostly be paying attention to your essential conditions of satisfaction when evaluating this task.

Additionally, write a basic plan of work, a couple of sentences of additional detail that describe how you plan to go about satisfying the essential conditions of satisfaction on a relatively short time scale.

You will also be working on your team project plan this week, and you may notice that the team project plan has much more extensive documentation requirements. There are several reasons for this:

  1. You have control over the user stories for the group project plan, so there’s more potential for ambiguity.
  2. The group project plan is expected to be quite a bit more ambitious, so there’s more to describe.
  3. You’re expected to progress further in your group project. For this user story, you are not expected to get past the “essential” conditions of satisfaction. Group projects are expected to complete most if not all of their “desirable” conditions of satisfaction.
  4. The written plan for the group project plan is there to keep multiple people on the same page. As a general rule, projects that coordinate more people need more documentation to keep everyone on the same page.

It is highly recommended that you either review this part of the project in person with a member of the course staff or submit this part of the project early, especially if there were issues with your first conditions of satisfaction. If you submit on Gradescope by 6pm Friday, the course staff will have a chance to give you an extra round of feedback before the deadline to ensure you’re on track.

Task 2: A stateless server

Most of the models that were stored in memory for the first individual assignment have been moved to an appropriate repository layer, held in a MongoDB database.

The one part of the task left to you is the Chat and Message models. We recommend you take the following steps:

It will be extremely helpful to study the diffs where other Mongoose models were added, especially the diff that added forum models.

Task 3: A new game

Modify both the client and the server to play Tic-Tac-Toe.

You wil need to change all three parts of the project to do this.

The shared code needs to change:

The web server backend needs to change:

The React frontend needs to change:

Task 4: Real time updates

It is desirable for the game page and the home page to update when new games are started using the Sockets.io interface.

The following steps are probably the most straightforward way to achieve this objective:

(Hopefully you can imagine other features that follow a similar pattern, such as updating the games list when the state of a game changes. You may also see more efficient ways to implement this functionality, like only sending the messages to people looking at the corresponding pages. If your groups’ user stories would benefit from such improvements, that’s worth considering!)

Submission Instructions & Grading

You will submit task 1 via Gradescope, and Tasks 2-4 using GitHub Classroom.

The assignment is graded out of 120 points.

If your code fails the tests it comes with, or if it produces errors or warnings when npm run check or npm run lint is run in the server directory, you will get no credit on tasks 1-4 until you fix the error and resubmit with a 10 point penalty. Adding new eslint-disable statements, modifying package.json files, or modifying the linter configuration is not allowed.