COMP1531 Major Project
## 0. Aims:
1. Demonstrate effective use of software development tools to build full-stack end-user applications.
2. Demonstrate effective use of static testing, dynamic testing, and user testing to validate and verify software systems.
3. Understand key characteristics of a functioning team in terms of understanding professional expectations, maintaining healthy relationships, and managing conflict.
4. Demonstrate an ability to analyse complex software systems in terms of their data model, state model, and more.
5. Understand the software engineering life cycle in the context of modern and iterative software development practices in order to elicit requirements, design systems thoughtfully, and implement software correctly.
6. Demonstrate an understanding of how to use version control and continuous integration to sustainably integrate code from multiple parties.
UNSW's revenue has been going down, despite the absolutely perfect MyExperience feedback.
Realising the bright potential of its students to recreate existing products they pay for, UNSW has tasked me (Hayden), and my army of COMP1531 students with recreating **Microsoft Teams**.
The 22T3 cohort of COMP1531 students will build the **backend Javascript server** for a new communication platform, **UNSW Memes** (or just **Memes** for short). We plan to task future COMP6080 students to build the frontend for Memes, something you won't have to worry about.
**UNSW Memes** is the questionably-named communication tool that allows you to share, communicate, and collaborate virtually on a meme-like budget.
We have already specified a **common interface** for the frontend and backend to operate on. This allows both courses to go off and do their own development and testing under the assumption that both parties will comply with the common interface. This is the interface **you are required to use**.
The specific capabilities that need to be built for this project are described in the interface at the bottom. This is clearly a lot of features, but not all of them are to be implemented at once.
UNSW thanks you for doing your part in saving them approximately $100 per student, per year, despite making you pay for this course.
(For legal reasons, this is a joke).
## 2. Iteration 0: Getting Started
Now complete!
## 3. Iteration 1: Basic Functionality and Tests
Now complete!
## 4. Iteration 2: Building a Web Server
## 6. Iteration 4: Extending Functionality
In iteration 4, you'll be working alone to implement:
* 2 additional functionalities (in the same format as iteration 3)
* Bonus features of your choice!
Your tutor is not required to provide any assistance with the bonus features section, as it's intended for high-achieving students.
You should create any new features using TypeScript, but you do not need to ensure the code produces no typechecking errors.
If you wish to implement new bonus features that extend upon previous iteration’s functionality that is currently broken in your groups repo, please contact your tutor as assistance and advice will be handled on a case-by-case basis.
As a rough guide, if you would like high marks in this section you should expect to spend at least 20 hours on your bonus functionality (not including the 2 additional functionalities).
**NOTE:** A brief explanation of your additions must be written in a file extra.md
, please fill out the given template to ensure your tutor can mark your bonus features correctly.
Here are some suggestions for extra features. Depending on the complexity of your features chosen, you may choose to do multiple. If you come up with a new idea which is not one of the suggestions, you **MUST** get approval from your tutor before **Friday 10pm** of week 10.
1. **New Features** - Implement one or more of the features you have elicited in your Requirements & Design document from iteration
2. Frontend - **Hangman on Frontend**
* After a game of Hangman has been started, any user in the channel can type "/guess X" where X is an individual letter. If that letter is contained in the word or phrase they're trying to guess, the app should indicate where it occurs. If it does not occur, more of the hangman is drawn.
* There is a lot of flexibility in how you achieve this. It can be done only by modifying the backend and relying on messages to communicate the state of the game (e.g.after making a guess, the "Hangman" posts a message with a drawing of the hangman in ASCII/emoji art). Alternatively, you can modify the frontend, if you want to experiment with fancier graphics.
* The app should use words and phrases from an external source, not just a small handful hardcoded into the app. One suitable source is `/usr/share/dict/words` available on Unix-based systems
* Note that this part of the specification is deliberately open-ended. You're free to make your own creative choices in exactly how the game should work, as long as the end result is something that could be fairly described as Hangman.
3. Frontend - **Dark Mode** - Modify the frontend code so that on the flip of a switch in the navbar, the website can change to "dark mode" with a colour scheme of your choosing.
4. Frontend - **LaTEX / Markdown Support** - Modify the frontend code so that messages in channels and DMs can be rendered in LaTEX and/or Markdown.
5. **Databases** - Implementing persistence using a form of database via `typeorm` or other.
6. **Docker** - Dockerise this repo (backend) and the frontend repo, ensuring data is persistent. There is no need to deploy your project if this is successful.
7. **New Idea!** - Something you've thought of that doesn't fit into any of the suggestions above. Please email/talk to your tutor for approval on this first.
### 6.1 Your New Repo - What Has Changed?
At the start of iteration 4, you will be given a personal repository, which is a direct copy of your group's `master` branch. You will still be able to access your group repository, e.g. to view code on other branches, however you should NOT make any changes here (nor should you need to).
Since this iteration is individual, you will be completing iteration 4 in this newly created, personal repo. Click [here](https://cgi.cse.unsw.edu.au/~cs1531/redirect/?path=COMP1531/23T1/students/_/iter4-project-backend) to access it.
In this iteration, you may approve your own merge requests after a self-review and a passing pipeline, since you are unable to share code with your peers for review. You can push directly to the `master` branch, however we recommend you continue to use merge requests as they are considered in the manual marking of iteration 4 (see [Git & Project Management](#-5.8.-Marking-Criteria)).
Any backend bonus features added do not need to work with the supplied frontend, i.e. editing the supplied frontend to integrate your new backend features is not necessary.
In addition, no specific marks will be awarded for linting or meet a minimum coverage checking requirement, however it is recommended you continue to use these tools as they will be considered in the manual style marking of iteration 4 (see [Code Quality](#-5.8.-Marking-Criteria)).
New code added in iteration 4 will be style marked, and any old code (from iteration 3 or earlier) will not impact this marking.
### 6.2 Video presentation
As part of the bonus features section of this iteration, you are required to film a 2 minute video demonstrating what you have created.
In this video, you should:
* Explain what you have implemented and how it works
* Why you chose that feature
* Include a demonstration of it working/running successfully
We recommend submitting a screen-recording - it's a bonus if your face is in it! E.g. using Canva's Present and record mode.
You should upload your video to the COMP1531 Flipgrid. Please login using Microsoft, with your zID email.
When submitting a response to the 'Bonus Features' topic in Flipgrid, use the 'Upload Clip' button in the top right-hand corner of the recording screen to submit your own video.
**NOTE:** Please add your zID in the caption section of the video upload process for marking purposes.
You should have received an email invite to join this Flipgrid group - you should select login with Microsoft and use your zID. If you have access troubles, please post on the forum.