...]` is/are additional teams that the user wants to add/remove a person to/from. For example, user can input `remove_from_team 1 1 2 3`, and this will remove the person at index 1 from the teams at index 1, 2, and 3. The additional team(s) are optional.
+
+
+### Long Fields support
+
+#### Person fields and team fields
+Fields that are too long and are cut off by the Ui are to be truncated and indicated with ellipses.
+
+- _E.g._ if a person name is "Salvador Felipe Jacinto Dalí y Domenech" and cannot be displayed fully, the Ui should replace it with "Salvador Felipe Jac...", with the ellipses ending at the cut-off.
+- Users should also be able to view the full length of the field by hovering their mouse over that particular field.
+- Same goes for tags, if the tags of a contact/team takes up more than two rows, the remained will be hidden, and an indicator will appear to show how many tags are hidden
+- _E.g._ A contact with 230 tags may only have 14 tags shown on the Ui, and at the end of the displayed tag a text `"... +216"` will indicate that they have 216 more tags that are hidden.
+
+#### Tags (Skill tags, team tags, person tags)
+Tags that are longer than 20 characters to be truncated on the Ui. Users can then hover their mouse over it to see the full tag.
+
+- _E.g._ The Tag "Grandmaster in Witchcraft and Wizardry" will appear as "Grandmaster in Witch..." on the Ui.
+
+
+## _Appendix:_ Effort
+
+TeamBuilder is a brownfield project which builds upon the existing features of AB3. Our vision for TeamBuilder, although simple conceptually, proved to be challenging to implement due to AB3's pre-existing architecture.
+
+### Challenges with dependencies between Teams and Persons
+The ability to create teams and add persons into TeamBuilder is the highlight of our project. It proved to be monstrous task, requiring thorough changes in every component of the AB3 Architecture.
+
+- While AB3 only has Contacts, we wanted TeamBuilder to also have Teams, which is another entity. Teams and Persons are both dependent on each other, as a person cannot be part of a non-existent team, and a Team cannot have a non-existent person.
+- Deleting person and teams proved to be a huge challenge for TeamBuilder, as when a team is deleted, any person that is part of the team has to be updated such that they no longer have that team tag. Similarly, when a person is deleted, Teams have to be updated such that that person is also removed from the team.
+- Additionally, this same issue caused problems for the Storage component. Should the storage contain a person that is part of a Team that does not exist, or a Team contain a person that does not exist, TeamBuilder has to be able to catch these errors and act appropriately.
+
+The large degree of inter-dependencies made implementing a relatively 'simple' feature such as adding a person or deleting a team to require much time and effort in understanding AB3's implementation, as well as coming up with solutions to achieve our goal.
+
+### High effort required for test cases.
+TeamBuilder differs greatly from AB3 as all persons' fields are optional except for their name, and TeamBuilder has Teams as well as persons. As a result, sizeable chunks of tests from AB3 are not relevant, and the Team had to reformat most of the tests, as well as generate and create new Sample data to test.
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
index 72767f00fd9..6c05accd779 100644
--- a/docs/Gemfile.lock
+++ b/docs/Gemfile.lock
@@ -242,6 +242,7 @@ GEM
tzinfo (1.2.10)
thread_safe (~> 0.1)
unicode-display_width (1.8.0)
+ wdm (0.1.1)
zeitwerk (2.6.1)
PLATFORMS
@@ -251,6 +252,7 @@ PLATFORMS
DEPENDENCIES
github-pages
jekyll
+ wdm (~> 0.1.0)
BUNDLED WITH
2.1.4
diff --git a/docs/SettingUp.md b/docs/SettingUp.md
index 275445bd551..fbdc062cd61 100644
--- a/docs/SettingUp.md
+++ b/docs/SettingUp.md
@@ -23,8 +23,8 @@ If you plan to use Intellij IDEA (highly recommended):
1. **Import the project as a Gradle project**: Follow the guide [_[se-edu/guides] IDEA: Importing a Gradle project_](https://se-education.org/guides/tutorials/intellijImportGradleProject.html) to import the project into IDEA.
:exclamation: Note: Importing a Gradle project is slightly different from importing a normal Java project.
1. **Verify the setup**:
- 1. Run the `seedu.address.Main` and try a few commands.
- 1. [Run the tests](Testing.md) to ensure they all pass.
+ 1. Run the `teambuilder.Main` and try a few commands.
+ 2. [Run the tests](Testing.md) to ensure they all pass.
--------------------------------------------------------------------------------------------------------------------
diff --git a/docs/Testing.md b/docs/Testing.md
index 8a99e82438a..7cfa89c1067 100644
--- a/docs/Testing.md
+++ b/docs/Testing.md
@@ -29,8 +29,8 @@ There are two ways to run tests.
This project has three types of tests:
1. *Unit tests* targeting the lowest level methods/classes.
- e.g. `seedu.address.commons.StringUtilTest`
+ e.g. `teambuilder.commons.StringUtilTest`
1. *Integration tests* that are checking the integration of multiple code units (those code units are assumed to be working).
- e.g. `seedu.address.storage.StorageManagerTest`
+ e.g. `teambuilder.storage.StorageManagerTest`
1. Hybrids of unit and integration tests. These test are checking multiple code units as well as how the are connected together.
- e.g. `seedu.address.logic.LogicManagerTest`
+ e.g. `teambuilder.logic.LogicManagerTest`
diff --git a/docs/UserGuide.md b/docs/UserGuide.md
index e7df68b01ea..d041ad26c9a 100644
--- a/docs/UserGuide.md
+++ b/docs/UserGuide.md
@@ -3,119 +3,385 @@ layout: page
title: User Guide
---
-AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.
+
-* Table of Contents
-{:toc}
---------------------------------------------------------------------------------------------------------------------
+
+:information_source: **Preface:**
-## Quick start
+* This guide is on the **usage** of Team Builder.
+* For a guide on **developing** Team Builder with us, see our [developer guide](DeveloperGuide.html).
+* We are **still working** on making our user guide as user friendly as possible. You can help us by providing feedback [here](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/new)
+
-1. Ensure you have Java `11` or above installed in your Computer.
+**Team Builder (TB)** is a desktop app primarily for cross-faculty students to manage their contacts and build a multidisciplinary team based on soft skills and technical skills.
-1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).
+It is optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, TB can help you build your team through your contacts much faster than traditional GUI apps.
-1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.
+# About this guide
-1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar addressbook.jar` command to run the application.
- A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.
- 
+
-1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.
- Some example commands you can try:
+Welcome to Team Builder, we hope that this product will allow you
+to manage your contacts to build fantastic teams for your events/competitions.
- * `list` : Lists all contacts.
+This guide is designed for users with and without technical experience and is to be followed narratively from top to bottom. However, if you are an experienced user, feel free to skip the Example context. If you are looking for a specific command, you can view the [table of commands here](#full-table-of-commands).
- * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` : Adds a contact named `John Doe` to the Address Book.
+
+:information_source: **What do the symbols and formatting mean?:**
- * `delete 3` : Deletes the 3rd contact shown in the current list.
+* :information_source: - are important specific information to note
- * `clear` : Deletes all contacts.
+* :bulb: - are usage tips/shortcuts
- * `exit` : Exits the app.
+* :exclamation: - are some warnings about certain actions
+
+* [links](#about-this-guide) - these blue words are links and can be clicked on
+
+
+## This guide is split into 6 sections:
-1. Refer to the [Features](#features) below for details of each command.
+1. [Full Table of Commands](#full-table-of-commands)
+2. [Quick Start](#quick-start)
+3. [Managing Contacts](#managing-contacts)
+4. [Making a Team](#making-a-team)
+5. [Extra Team Builder Features](#extra-team-builder-features)
+6. [FAQ](#faq)
+
+Sections 3,4,5 contain descriptions and instructions for the main features of Team Builder.
+
+Below is the full table of contents, in case you are looking for something very specific.
+
+
+:information_source: **Full Table of Content:**
+
+- [Full Table of Commands](#full-table-of-commands)
+- [Quick start](#quick-start)
+- [Managing Contacts](#managing-contacts)
+ - [Adding a new contact : `add`](#adding-a-new-contact--add)
+ - [Updating a contact : `edit`](#updating-a-contact--edit)
+ - [Deleting a contact : `delete`](#deleting-a-contact--delete)
+- [Making a Team](#making-a-team)
+ - [Creating a team: `create`](#creating-a-team-create)
+ - [Finding the right teammate I : `find`](#finding-the-right-teammate-i--find)
+ - [Finding the right teammate II : `list`](#finding-the-right-teammate-ii--list)
+ - [Finding the right teammate III : `sort`](#finding-the-right-teammate-iii--sort)
+ - [Add a person to a team : `edit`](#add-a-person-to-a-team--edit)
+ - [Listing all teammates in a team : `show`](#listing-all-teammates-in-a-team--show)
+ - [Removing a teammate from a team : `edit`](#removing-a-teammate-from-a-team--edit)
+ - [Removing a team : `remove`](#removing-a-team--remove)
+- [Extra Team Builder Features](#extra-team-builder-features)
+ - [Clearing all entries : `clear`](#clearing-all-entries--clear)
+ - [Undoing a command : `undo`](#undoing-a-command--undo)
+ - [Redoing an undo command : `redo`](#redoing-an-undo-command--redo)
+ - [Exiting the program : `exit`](#exiting-the-program--exit)
+ - [Saving the data](#saving-the-data)
+ - [Editing the data file](#editing-the-data-file)
+- [FAQ](#faq)
+- [Future features](#future-features)
+ - [Support for long tags](#support-for-long-tags)
+ - [Phone number limit](#phone-number-limit)
+
+
+
+
+:bulb:
**Tip:**
+Access this guide quickly through the `help` command or by clicking the **help** menu icon.
+
+

+
--------------------------------------------------------------------------------------------------------------------
-## Features
+# Full Table of Commands
+:information_source: **Notes about the command format:**
+
+* `command` - are the command words. **They are case-sensitive!**
-**:information_source: Notes about the command format:**
+* `UPPER_CASE` - are the input data fields to be supplied by the user.
+ e.g. in `add n/NAME`, `NAME` is an input data field which can be used as `add n/John Doe`.
-* Words in `UPPER_CASE` are the parameters to be supplied by the user.
- e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`.
+* `[]` - are optional input data fields.
+ e.g. `[e/EMAIL]` can be used like ` ` (i.e. not used) or `e/lmao@lmao.com`
-* Items in square brackets are optional.
- e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`.
+* `[]...` - are input data fields that can be supplied any number of times including zero times.
+ e.g. `[t/TAG]...` can be used like ` ` (i.e. 0 times), `t/React`, `t/React t/AWS` etc.
-* Items with `…` after them can be used multiple times including zero times.
- e.g. `[t/TAG]…` can be used as ` ` (i.e. 0 times), `t/friend`, `t/friend t/family` etc.
+
-* Parameters can be in any order.
+Command | Type |Format, Examples
+:--------:|:----------------------:|:--------:
+[**add**](#adding-a-new-contact--add) | Modifying |`add n/NAME [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [m/MAJOR] [t/TAG]... [T/TEAM_NAME]...`
+[**clear**](#clearing-all-entries--clear) | Modifying |`clear`
+[**delete**](#deleting-a-contact--delete) | Modifying |`delete INDEX`
e.g., `delete 3`
+[**edit**](#updating-a-contact--edit) | Modifying |`edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]... [T/TEAM_NAME]... `
+[**find**](#finding-the-right-teammate-i--find) | Listing | `find NAME/MAJOR/TAG [MORE_KEYWORDS]`
e.g., `find James Jake`
+[**sort**](#finding-the-right-teammate-iii--sort) | Listing |`sort ORDER SORT_BY`
e.g., `sort desc tcount`
+[**create**](#creating-a-team-create) | Modifying |`create tn/TEAM_NAME td/TEAM_DESC [t/TAG]`
e.g., `create tn/TeamA td/2103T_tP t/Java`
+[**show**](#listing-all-teammates-in-a-team--show) | Listing |`show TEAM_NAME [OTHER_TEAM_NAME]...`
+[**list**](#finding-the-right-teammate-ii--list) | Listing |`list`
+[**remove**](#removing-a-team--remove) | Modifying |`remove TEAM_NAME`
+[**undo**](#undoing-a-command--undo) | Special
Modifying | `undo`
+[**redo**](#redoing-an-undo-command--redo) | Modifying |`redo`
+[**help**](#help-command) | Window |`help`
+
+
+:bulb: **Tips on command behaviour:**
+
+* You can place input data fields in any order.
e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable.
-* If a parameter is expected only once in the command but you specified it multiple times, only the last occurrence of the parameter will be taken.
+* If a input data is expected only once in the command but you specified it multiple times, only the last occurrence of the input data will be taken.
e.g. if you specify `p/12341234 p/56785678`, only `p/56785678` will be taken.
-* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.
+* If you enter extraneous input fields for commands with no input data fields (such as `help`, `list`, `exit` and `clear`), the command will execute as per normal while ignoring the fields.
e.g. if the command specifies `help 123`, it will be interpreted as `help`.
-### Viewing help : `help`
+--------------------------------------------------------------------------------------------------------------------
+
+# Quick start
+
+Prerequisite:
+
+1. Downloaded [Java JDK 11](https://www.oracle.com/sg/java/technologies/javase/jdk11-archive-downloads.html) for your operating system.
+
+Team Builder Installation:
+
+1. Open a command terminal
+
+2. Ensure you have **Java 11** or above installed in your Computer by typing `java --version` in the command terminal.
+Information on the Java version installed should appear in the command terminal. Otherwise, [click here to troubleshoot](https://www.java.com/download/help/troubleshoot_java.html#:~:text=Temporarily%20turn%20off%20firewall%20or,successfully%20completed%20the%20Java%20install.).
+
+3. Download the latest **teambuilder.jar** from [here](https://github.com/AY2223S2-CS2103T-T17-1/tp/releases).
+
+4. Copy the file to the folder you want to use as the _home folder_ for your Team Builder.
+
+5. In the command terminal, `cd` into the folder you put the jar file in, and use the `java -jar teambuilder.jar` command to run the application.
+ A window (seen below without the labels) should appear in a few seconds. Note how the app contains some sample data.
+
+ As you can see there are two main panels. The left panels shows your contacts, and the right panel shows the teams that you have in Team Builder.
+
+ - The _blue_ tags are the **skill tags** of a person, to denote the skills or specialisation of the person.
+ - The _red_ tags are the **team tags**, which tell you which team a person is in
+ - The _yellow-orange_ tags are the **members** of a team, which tells you the names of the team members in a team
+ - The _green_ tags are the **skill tags** of a team, which are the skills that you think this team needs.
+
+ You will find more details below the tags of the respective person/team, such as the team description or the contact's phone number.
+
+
+
+1. Type the command in the command box and press Enter to execute it. e.g. typing `help` and pressing Enter will open the help window.
+ Some example commands you can try:
+
+ * `list` : Lists all contacts.
+
+ * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 m/computer science` : Adds a contact named `John Doe` to the Team Builder.
+
+ * `delete 3` : Deletes the 3rd contact shown in the current list.
+
+ * `clear` : Deletes all contacts.
+
+ * `exit` : Exits the app.
+
+2. Refer to the [Full Table of Commands](UserGuide.html#full-table-of-commands) above for details of each command.
+
+
+
+--------------------------------------------------------------------------------------------------------------------
+
+# Managing Contacts
+
+Team Builder allows you to easily manage contacts of individuals that you would want to be teammates with.
+
+Your contacts can be managed in these ways:
+1. Adding new potential teammates as a contact.
+2. Updating any existing contact's information and tags.
+3. Deleting contacts that you no longer want to be teammates with or have lost contact.
+
+## Adding a new contact : `add`
+
+Format: `add n/NAME [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [m/MAJOR] [t/TAG]... [T/TEAM_NAME]...`
+
+
+**Example context**:
-Shows a message explaning how to access the help page.
+
-
+You have exchanged contacts with a person named **John** at a Computer Science Event.
+He seems like a nice guy that you might want to do projects with. You note that he is a business major with **great presentations skills**.
-Format: `help`
+Let's add his contacts to Team Builder as a new potential teammate for future events and projects!
+**What to type**:
-### Adding a person: `add`
+`add n/John p/98765432 m/Business t/Good Presentor`
-Adds a person to the address book.
+**Result**:
-Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…`
+
+
+
+:information_source: **Note:**
+The order of persons added in the list may not be in chronological order.
+
+
+:exclamation: **Caution:**
+You can only add a team tag to a person if the team has been created beforehand!
+
:bulb: **Tip:**
-A person can have any number of tags (including 0)
+A contact can have any number of tags (including 0). Tags are especially useful for keeping track of skills and traits!
+A contact must have a name, other features are optional.
-Examples:
-* `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01`
-* `add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal`
+## Updating a contact : `edit`
-### Listing all persons : `list`
+Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [m/MAJOR] [t/TAG]… [T/TEAM_NAME]`
-Shows a list of all persons in the address book.
+**Example context**:
-Format: `list`
+
+
+It seems that we forgot to add some information about **John**.
+We missed out the back of his card that has his **email**.
+Let's use the `edit` command to update his information.
-### Editing a person : `edit`
+
+ We see John is index 1 in our display.
-Edits an existing person in the address book.
+**What to type**:
-Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…`
+`edit 1 e/john@example.com`
+
+**Result**:
+
+ John's email is now reflected on our contact list.
+
+
+
+**:information_source: Notes about the edit command:**
* Edits the person at the specified `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …
* At least one of the optional fields must be provided.
* Existing values will be updated to the input values.
-* When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.
-* You can remove all the person’s tags by typing `t/` without
- specifying any tags after it.
+* When editing tags and teams, the existing tags and teams of the person will be removed i.e adding of tags and teams is not cumulative.
+* You can remove all the person’s tags or teams by respectively typing `t/` or `T/` without
+ specifying any after it.
+
+
+## Deleting a contact : `delete`
+
+Format: `delete INDEX`
+
+**Example context**:
+
+You hear from your friends that **John** is actually a **snake*** :snake: and we do not want a snake as a teammate.
+
+Let's delete him from our Team Builder.
+
+Again, we see **John** is index 1 in our display.
+
+**What to type**:
+
+`delete 1 `
+
+**Result**:
+
+
+
+ John is no longer in your Team Builder contact list!
+ * snake refers to a backstabber.
+
+
+
+# Making a Team
+
+Team Builder helps you to make a team easily and keep in mind any skills that are required.
+
+Our current team management features include:
+1. Creating a team
+2. Finding the right teammate using `find`, `list` and `sort`
+3. Adding a person to a team
+4. Listing all teammates in a team
+5. Removing a person from a team
+6. Removing a team entirely
-Examples:
-* `edit 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st person to be `91234567` and `johndoe@example.com` respectively.
-* `edit 2 n/Betsy Crower t/` Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags.
+## Creating a team: `create`
-### Locating persons by name: `find`
+Format: `create tn/TEAM_NAME td/TEAM_DESC [t/TAG]...`
-Finds persons whose names contain any of the given keywords.
+**Example context**:
-Format: `find KEYWORD [MORE_KEYWORDS]`
+You have decided to participate in NUS Hack&Roll hackathon. Let's create a team called "NUSMeets"! Since your idea involves creating
+a web application, you will need someone with technical experience in React and AWS. You would also prefer to have a UI
+person to make your web app presentable. As this hackathon involves a tight timeline, proper project management skills
+are required too.
+
+**What to type**:
+
+`create tn/NUSMeets td/A multidisciplinary team for upcoming HacknRoll in mid Jan. t/JavaScript t/React t/AWS t/Project Management t/UI Design`
+
+**Result**:
+
+
+
+## Finding the right teammate I : `find`
+
+ Format: `find NAME/MAJOR/TAG [MORE_KEYWORDS]...`
+
+**Example context 1**:
+
+You recall that two of your tutorial classmate named Alex and David are good at UI Design and you want to invite them
+to your team, but you have forgotten their full name and contact numbers.
+
+**What to type**:
+
+`find alex david`
+
+**Result**:
+
+
+
+**Example context 2**:
+
+You still feel your team needs more people, and you decide to find someone who majored in computer science.
+
+**What to type**:
+
+`find computer science`
+
+**Result**:
+
+
+
+**Example context 3**:
+
+Now your team is almost formed, but you still need a person who mastered JavaScript.
+
+**What to type**:
+
+`find javascript`
+
+**Result**:
+
+
+
+
+:information_source: **Specificity of `find`**:
* The search is case-insensitive. e.g `hans` will match `Hans`
* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`
@@ -124,70 +390,273 @@ Format: `find KEYWORD [MORE_KEYWORDS]`
* Persons matching at least one keyword will be returned (i.e. `OR` search).
e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`
-Examples:
-* `find John` returns `john` and `John Doe`
-* `find alex david` returns `Alex Yeoh`, `David Li`
- 
-### Deleting a person : `delete`
+
-Deletes the specified person from the address book.
-Format: `delete INDEX`
+## Finding the right teammate II : `list`
-* Deletes the person at the specified `INDEX`.
-* The index refers to the index number shown in the displayed person list.
-* The index **must be a positive integer** 1, 2, 3, …
+Format: `list`
+
+**Example context**:
+
+You feel that you have narrowed down to too little people. Let's display our whole contact list again.
+
+**What to type**:
+
+`list`
+
+If you have accidentally added extra input fields after `list`, the command would be accepted as anything after `list` is discarded.
+
+
+## Finding the right teammate III : `sort`
+
+ Format: `sort ORDER SORT_BY`
+
+**Example context**:
+
+Perhaps you are not too sure which skills are required in your team, so you want to list persons who know a wide range
+of skills first.
+
+**What to type**:
+
+`sort desc tcount`
+
+**Result**:
+
+
+
+
+
+:information_source: **Specificity of `sort`**:
+
+* The ORDER and SORT_BY are case-insensitive. e.g `tcount` will match `tCount`
+* The ORDER can only be either ascending (`asc`) or descending (`desc`)
+* The following SORT_BY are available:
+* `tcount` Sorts by person's tag count (this applies to the **blue skill tags** only, not including team tags)
+
+
+
+:information_source: **Note:**
+Sort would be performed on the current list of persons displayed on the UI. If you are looking to sort all persons after
+performing a `find` command etc., remember to use `list` command before using `sort`.
+
+
+## Add a person to a team : `edit`
+
+Format: `edit INDEX [T/TEAM_NAME]...`
+
+**Example context**:
+
+You recall participating in a Hackathon previously with Alex Yeoh and knows he is familiar with React. You decide to
+reach out to him to form your team for Hack&Roll.
+
+**What to type**:
+
+`edit 1 T/NUSMeets`
+
+**Result**:
+
+
+
+
+
+
+:information_source: **Note:**
+`edit` command is used here as adding a person to a team is equivalent to editing the team tags of a person.
+
+
+:exclamation: **Caution:**
+
+* You can only add a person to the team if the team has been created beforehand!
+
+* If you are adding a team to a person with existing teams, you need to type out their other team names as well. e.g. `edit 1 T/Old Team T/New Team`
+
+
+## Listing all teammates in a team : `show`
+
+Format: `show TEAM_NAME [OTHER_TEAM_NAME]...`
+
+**Example context**:
+
+The Hack&Roll announced that there is a limit on team size. You want to list all people who are currently added to your
+NUSMeets team.
+
+**What to type**:
+
+`show NUSMeets`
+
+**Result**:
+
+
+
+## Removing a teammate from a team : `edit`
+
+Format: `edit INDEX [T/TEAM_NAME]`
+
+**Example context**:
+
+Alex reached out to you later that he is now unable to attend Hack&Roll due to some personal circumstances.
+We have no choice but to remove Alex from our team.
+
+
+**What to type**:
+
+`edit 1 T/`
+
+**Result**:
+
+
+ We see that Alex's team tag is removed and the team no longer has Alex as a member
-Examples:
-* `list` followed by `delete 2` deletes the 2nd person in the address book.
-* `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command.
+
+:information_source: **Note:**
+`edit` command is used here as removing a person to a team is equivalent to editing the team tags of a person.
+
+
+:exclamation: **Caution:**
+If you are removing just one team from a person with multiple teams, you need to type out their other team names to keep them on their other teams.
+(e.g. John is in Team1 and Team2 but he will be removed from Team2, `edit 1 T/Team1`)
+
+
+## Removing a team : `remove`
+
+Format: `remove TEAM_NAME`
+
+**Example context**:
-### Clearing all entries : `clear`
+Oh no, you realised that you have a number of deadlines during the period of time Hack&Roll would run.
+Taking into account Alex's absence as well, You decide to not participate in it anymore.
+
+**What to type**:
+
+`remove NUSMeets`
+
+**Result**:
+
+NUSMeets will be removed from the team list panel.
+
+
+:information_source: **Note:**
+The `remove` command will also remove the team tags for people who were in the team.
+
-Clears all entries from the address book.
+
+# Extra Team Builder Features
+
+Team Builder has some quality of life features that may help you in many different ways.
+
+This includes:
+1. Clearing all entries
+2. Undoing a command
+3. Redoing an undo command
+4. Exiting the program
+5. Saving data
+6. Editing the data file
+
+## Clearing all entries : `clear`
Format: `clear`
-### Exiting the program : `exit`
+Clears all entries from the Team Builder, instead of manually removing teams and persons.
-Exits the program.
+**What to type**:
-Format: `exit`
+`clear`
+
+## Undoing a command : `undo`
-### Saving the data
+Format: `undo`
-AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
+**Example context**:
-### Editing the data file
+Oops! It looks like we accidentally used the `clear` command to remove all our contacts.
-AddressBook data are saved as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.
+Let's use the `undo` command to revert our Team Builder back to before we typed the `clear` command.
+
+**What to type**:
+
+`undo`
+
+
+:exclamation: **Caution:**
+
+* You can only `undo` up to 10 times in a row! After the 10th `undo`, no more `undo` is possible.
+
+* You can only `undo` [modifying commands](#full-table-of-commands).
+
+* You may also undo into a state where `find` was called and so your contact list is not shown fully.
+Simply use `list` to view the full contact list again.
+
+
+
+## Redoing an undo command : `redo`
+
+Format: `redo`
+
+**Example context**:
+
+Perhaps we want to `clear` the example contacts after all.
+
+Let's use the `redo` command to revert our Team Builder back to before we typed the `undo` command.
+
+**What you can type**:
+
+`redo`, `redo 123`, `redo ada adw v zklw`, etc.
+
+These are all acceptable as anything after `redo` is discarded.
:exclamation: **Caution:**
-If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run.
+Typing any [modifying command](#full-table-of-commands) (other than an undo) after an `undo` makes it impossible to `redo` that `undo` command!
-### Archiving data files `[coming in v2.0]`
+## Exiting the program : `exit`
+
+Format: `exit`
+
+Exits the program.
+
-_Details coming soon ..._
+## Saving the data
+
+Team Builder data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
+
+## Editing the data file
+
+Team Builder data are saved as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.
+
+
+:exclamation: **Caution:**
+If your changes to the data file makes its format invalid, Team Builder will discard all data and start with an empty data file at the next run.
+
--------------------------------------------------------------------------------------------------------------------
-## FAQ
+# FAQ
**Q**: How do I transfer my data to another Computer?
-**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.
+**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous Team Builder home folder.
+
+**Q**: Why is my command text in red and not working?
+**A**: You might have input an invalid command. Either the command word doesn't exist or the parameters entered are invalid.
--------------------------------------------------------------------------------------------------------------------
-## Command summary
-
-Action | Format, Examples
---------|------------------
-**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague`
-**Clear** | `clear`
-**Delete** | `delete INDEX`
e.g., `delete 3`
-**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…`
e.g.,`edit 2 n/James Lee e/jameslee@example.com`
-**Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake`
-**List** | `list`
-**Help** | `help`
+# Future features
+
+These are features that will improve your experience using Team Builder, to be added in the future. Look forward to them!
+
+## Support for long tags
+
+Currently, whether it is a skill tag or a team tag, Team Builder will try to display the whole tag regardless of how long it is, causing it to overflow out of the window and be un-readable.
+Future changes:
+- Tags that exceed a character count of 20 characters will be truncated and have a "..." after it.
+- Users will be able to view the full tag by hovering their cursor over the tag.
+- This will not change the behaviour of the `add`, `edit`, or `find` commands.
+
+## Phone number limit
+
+Currently, there is no limit to the length of a contacts phone number.
+Future changes:
+- Phone number will have a maximum length of 15 digits, as that is the longest viable phone number.
+
diff --git a/docs/_config.yml b/docs/_config.yml
index 6bd245d8f4e..75e6d7ebd08 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,4 +1,4 @@
-title: "AB-3"
+title: "Team Builder"
theme: minima
header_pages:
@@ -8,7 +8,7 @@ header_pages:
markdown: kramdown
-repository: "se-edu/addressbook-level3"
+repository: "AY2223S2-CS2103T-T17-1/tp"
github_icon: "images/github-icon.png"
plugins:
diff --git a/docs/_sass/minima/_base.scss b/docs/_sass/minima/_base.scss
index 0d3f6e80ced..7a8039d9db4 100644
--- a/docs/_sass/minima/_base.scss
+++ b/docs/_sass/minima/_base.scss
@@ -288,7 +288,7 @@ table {
text-align: center;
}
.site-header:before {
- content: "AB-3";
+ content: "Team Builder";
font-size: 32px;
}
}
diff --git a/docs/diagrams/ActivityDiagram_AddCommandParser-Activity b/docs/diagrams/ActivityDiagram_AddCommandParser-Activity
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/docs/diagrams/ActivityDiagram_AddCommandParser.puml b/docs/diagrams/ActivityDiagram_AddCommandParser.puml
new file mode 100644
index 00000000000..58f85b63e70
--- /dev/null
+++ b/docs/diagrams/ActivityDiagram_AddCommandParser.puml
@@ -0,0 +1,21 @@
+@startuml
+start
+title Activity: AddCommandParser parses input
+:Tokenize prefixes in input;
+:Map prefix token to input;
+repeat
+:Check next prefix-input pair;
+ if () then ([Valid prefix-input pair])
+ :Create respective class instance of input;
+ :Save instance
+ as argument for person creation;
+ else ([Invalid Input | Missing input])
+ : Throw error with
+ appropriate error message;
+ stop
+endif
+repeat while () is ([Has unchecked prefix]) not ([All inputs are valid])
+:Pass all arguments into Person constructor;
+:Return person created;
+stop
+@enduml
diff --git a/docs/diagrams/ActivityDiagram_AddPerson.puml b/docs/diagrams/ActivityDiagram_AddPerson.puml
new file mode 100644
index 00000000000..bda1bbd10ca
--- /dev/null
+++ b/docs/diagrams/ActivityDiagram_AddPerson.puml
@@ -0,0 +1,25 @@
+@startuml
+sprite $rake [16x16/8] {
+0000000000000000
+0000000jj0000000
+0000000jj0000000
+0005555jj5555000
+000jjeejjeejj000
+000jj00jj00jj000
+000jj00jj00jj000
+0000000000000000
+}
+start
+:User enters add command input;
+:AddCommandParser parses input <$rake>;
+
+if () then ([Parser returns AddCommand])
+ :Execute add command;
+ :Add person to TeamBuilder;
+ :Person stored in storage;
+ :PersonCard of newly added person displayed in Ui;
+else ([Parser throws exception])
+ :Display error message;
+endif
+stop
+@enduml
diff --git a/docs/diagrams/ActivityDiagram_ShowCommand.puml b/docs/diagrams/ActivityDiagram_ShowCommand.puml
new file mode 100644
index 00000000000..bb1ee2b0f21
--- /dev/null
+++ b/docs/diagrams/ActivityDiagram_ShowCommand.puml
@@ -0,0 +1,25 @@
+@startuml
+sprite $rake [16x16/8] {
+0000000000000000
+0000000jj0000000
+0000000jj0000000
+0005555jj5555000
+000jjeejjeejj000
+000jj00jj00jj000
+000jj00jj00jj000
+0000000000000000
+}
+start
+title Activity: User input ShowCommand
+:User enters show command input;
+:ShowCommandParser parses input <$rake>;
+if () then ([Parser returns ShowCommand])
+ :Execute show command;
+ :Set predicate for filteredPersons;
+ :update filteredPersons in ModelManager;
+ :PersonCard of all filtered people displayed in Ui;
+else ([Parser throws exception])
+ :Display error message;
+endif
+stop
+@enduml
diff --git a/docs/diagrams/ActivityDiagram_ShowCommandParser.puml b/docs/diagrams/ActivityDiagram_ShowCommandParser.puml
new file mode 100644
index 00000000000..9e5dd0af8cd
--- /dev/null
+++ b/docs/diagrams/ActivityDiagram_ShowCommandParser.puml
@@ -0,0 +1,14 @@
+@startuml
+start
+title Activity: ShowCommandParser parses input
+:Trim argument;
+if () then ([Argument is empty])
+ :Display error message;
+else ([else])
+ :Split the argument with spaces;
+ :Create a list using the split argument;
+ :Create a TeamContainsKeywordsPredicate with the list as parameter;
+ :Return a ShowCommand object with the predicate as parameter;
+endif
+stop
+@enduml
diff --git a/docs/diagrams/ActivityDiagram_TeamContainsKeywordsPredicate.puml b/docs/diagrams/ActivityDiagram_TeamContainsKeywordsPredicate.puml
new file mode 100644
index 00000000000..48c3ce077e1
--- /dev/null
+++ b/docs/diagrams/ActivityDiagram_TeamContainsKeywordsPredicate.puml
@@ -0,0 +1,14 @@
+@startuml
+start
+title Activity: Filter filteredPersons with TeamContainsKeywordsPredicate
+:TeamContainsKeywordsPredicate takes in a Keyword list;
+:Create a stream with the Keyword list;
+:filteredPersons set TeamContainsKeywordsPredicate as its predicate;
+:Apply the predicate test function to each person stored;
+repeat
+:Create a stream with the Team set from the person;
+:Compare each element in the keyword stream with the name of that of the team stream;
+repeat while () is ([Has untested person]) not ([All person tested])
+:Update filteredPersons;
+stop
+@enduml
diff --git a/docs/diagrams/AddCommandClassDiagram.puml b/docs/diagrams/AddCommandClassDiagram.puml
new file mode 100644
index 00000000000..4924cb7f10a
--- /dev/null
+++ b/docs/diagrams/AddCommandClassDiagram.puml
@@ -0,0 +1,13 @@
+@startuml
+!include style.puml
+
+'!include style.puml
+'
+'class State1 as "__:ArgMultiMap__"
+'class State2 as "__:AddCommandParser__"
+'class State3 as "__ab2:AddressBook__"
+actor User as Foo1
+participant Ui as Foo2 UI_COLOR
+participant as Foo3 LOGIC_COLOR
+participant
+@endum
diff --git a/docs/diagrams/CommandModelHistoryDiagram.puml b/docs/diagrams/CommandModelHistoryDiagram.puml
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/docs/diagrams/CommitActivityDiagram.puml b/docs/diagrams/CommitActivityDiagram.puml
index 6a6b23a006f..db247c0eebc 100644
--- a/docs/diagrams/CommitActivityDiagram.puml
+++ b/docs/diagrams/CommitActivityDiagram.puml
@@ -5,10 +5,10 @@ start
'Since the beta syntax does not support placing the condition outside the
'diamond we place it as the true branch instead.
-if () then ([command commits AddressBook])
- :Purge redundant states;
- :Save AddressBook to
- addressBookStateList;
+if () then ([command commits TeamBuilder])
+ :New Memento produced by Model;
+ :Memento stored with context in HistoryUtil;
+ :HistoryUtil purges redundant Mementos;
else ([else])
endif
stop
diff --git a/docs/diagrams/ImplementedMementoDesignDiagram.puml b/docs/diagrams/ImplementedMementoDesignDiagram.puml
new file mode 100644
index 00000000000..9e97d952a80
--- /dev/null
+++ b/docs/diagrams/ImplementedMementoDesignDiagram.puml
@@ -0,0 +1,58 @@
+@startuml ImplementedMementoDesignDiagram
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+skinparam classAttributeIconSize 0
+
+class "<>\nMemento" as Memento
+show Memento method
+Memento : +restore()
+Memento : +getUpdatedMemo()
+
+class "HistoryUtil" as Caretaker
+show Caretaker members
+Caretaker : -undoHistory: Memento[]
+Caretaker : -redoFuture: Memento[]
+Caretaker : +storePast(Memento, String)
+Caretaker : +undo()
+Caretaker : +redo()
+
+note bottom : calls Memento#restore()
+Caretaker -left-o Memento
+
+class "<>\nOriginator" as Originator
+show Originator method
+Originator : +save()
+
+Memento <.left. Originator
+
+class "<>\nModel" as Model
+Model -up-|> Originator
+
+class "ModelManager" as CO
+show CO method
+CO : +save()
+CO : +setState()
+
+CO -up.|> Model
+
+Class "TeamBuilderMemento" as CM
+show CM members
+CM : -state
+CM : -originator
+CM : +restore()
+CM : +getUpdatedMemo()
+note bottom : Restore calls Originator#setState(state) \ngetUpdatedMemo calls Originator#save()
+
+
+CM -up.|> Memento
+CO <-> CM
+
+Class "AddCommand" as ADC
+show ADC members
+ADC : {static} COMMAND_WORD
+ADC : execute(model)
+note bottom : calls HistoryUtil#storePast with \nModel#save() and COMMAND_WORD
+
+ADC .left.> Model
+ADC -up--> Caretaker
diff --git a/docs/diagrams/MementoDesignPatternDiagram.puml b/docs/diagrams/MementoDesignPatternDiagram.puml
new file mode 100644
index 00000000000..800f86090b2
--- /dev/null
+++ b/docs/diagrams/MementoDesignPatternDiagram.puml
@@ -0,0 +1,39 @@
+@startuml MementoDesignPatternDiagram
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+skinparam classAttributeIconSize 0
+
+class "<>\nMemento" as Memento
+show Memento method
+Memento : +restore()
+
+class "Caretaker" as Caretaker
+show Caretaker members
+Caretaker : -undoHistory: Memento[]
+Caretaker : +undo()
+note bottom : calls Memento#restore()
+Caretaker -left-o Memento
+
+class "<>\nOriginator" as Originator
+show Originator method
+Originator : +save()
+
+Memento <.left. Originator
+
+class "ConcreteOriginator" as CO
+show CO method
+CO : +save()
+CO : +setState()
+
+CO -up.|> Originator
+
+Class "ConcreteMemento" as CM
+show CM members
+CM : -state
+CM : -originator
+CM : +restore()
+note bottom : calls Originator#setState(state)
+
+CM -up.|> Memento
+CO <-> CM
diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml
index 4439108973a..0f74bbdb379 100644
--- a/docs/diagrams/ModelClassDiagram.puml
+++ b/docs/diagrams/ModelClassDiagram.puml
@@ -7,44 +7,38 @@ skinparam classBackgroundColor MODEL_COLOR
Package Model <>{
Class "<>\nReadOnlyAddressBook" as ReadOnlyAddressBook
Class "<>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs
-Class "<>\nModel" as Model
+Class "<>\nModel" as ModelI
Class AddressBook
Class ModelManager
Class UserPrefs
Class UniquePersonList
+Class UniqueTeamList
Class Person
-Class Address
-Class Email
-Class Name
-Class Phone
-Class Tag
+Class Team
+
}
Class HiddenOutside #FFFFFF
-HiddenOutside ..> Model
+HiddenOutside ..> ModelI
AddressBook .up.|> ReadOnlyAddressBook
-ModelManager .up.|> Model
-Model .right.> ReadOnlyUserPrefs
-Model .left.> ReadOnlyAddressBook
+ModelManager .up.|> ModelI
+ModelI .right.> ReadOnlyUserPrefs
+ModelI .left.> ReadOnlyAddressBook
ModelManager -left-> "1" AddressBook
ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs
AddressBook *--> "1" UniquePersonList
-UniquePersonList --> "~* all" Person
-Person *--> Name
-Person *--> Phone
-Person *--> Email
-Person *--> Address
-Person *--> "*" Tag
-
-Name -[hidden]right-> Phone
-Phone -[hidden]right-> Address
-Address -[hidden]right-> Email
+AddressBook *-left-> "1" UniqueTeamList
+UniquePersonList -left-> "~* all" Person
+
+UniqueTeamList --> "~* all" Team
+
+
ModelManager -->"~* filtered" Person
@enduml
diff --git a/docs/diagrams/NewUndoRedoState1.puml b/docs/diagrams/NewUndoRedoState1.puml
new file mode 100644
index 00000000000..58d3566aed6
--- /dev/null
+++ b/docs/diagrams/NewUndoRedoState1.puml
@@ -0,0 +1,26 @@
+@startuml
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+
+title After command "delete 5"
+
+package undoHistory {
+ class State1 as "__m0:Memento__"
+ class State2 as "__null:Memento__"
+ class State3 as "__null:Memento__"
+}
+State1 -[hidden]right-> State2
+State2 -[hidden]right-> State3
+
+package redoFuture {
+ class State5 as "__null:Memento__"
+ class State6 as "__null:Memento__"
+ class State7 as "__null:Memento__"
+}
+State5 -[hidden]right-> State6
+State6 -[hidden]right-> State7
+
+class Pointer as "currentNum"
+Pointer -up-> State1
+Pointer -[hidden]down->State5
diff --git a/docs/diagrams/NewUndoRedoState2.puml b/docs/diagrams/NewUndoRedoState2.puml
new file mode 100644
index 00000000000..13acb404b1c
--- /dev/null
+++ b/docs/diagrams/NewUndoRedoState2.puml
@@ -0,0 +1,26 @@
+@startuml
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+
+title After command "add n/David"
+
+package undoHistory {
+ class State1 as "__m0:Memento__"
+ class State2 as "__m1:Memento__"
+ class State3 as "__null:Memento__"
+}
+State1 -[hidden]right-> State2
+State2 -[hidden]right-> State3
+
+package redoFuture {
+ class State5 as "__null:Memento__"
+ class State6 as "__null:Memento__"
+ class State7 as "__null:Memento__"
+}
+State5 -[hidden]right-> State6
+State6 -[hidden]right-> State7
+
+class Pointer as "currentNum"
+Pointer -up-> State2
+Pointer -[hidden]down->State6
diff --git a/docs/diagrams/NewUndoRedoState3.puml b/docs/diagrams/NewUndoRedoState3.puml
new file mode 100644
index 00000000000..16a4e48bc89
--- /dev/null
+++ b/docs/diagrams/NewUndoRedoState3.puml
@@ -0,0 +1,27 @@
+@startuml
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+
+title After command "undo"
+
+package undoHistory {
+ class State1 as "__m0:Memento__"
+ class State2 as "__null:Memento__"
+ class State3 as "__null:Memento__"
+}
+
+State1 -[hidden]right-> State2
+State2 -[hidden]right-> State3
+
+package redoFuture {
+ class State5 as "__null:Memento__"
+ class State6 as "__m2:Memento__"
+ class State7 as "__null:Memento__"
+}
+State5 -[hidden]right-> State6
+State6 -[hidden]right-> State7
+
+class Pointer as "currentNum"
+Pointer -up-> State1
+Pointer -[hidden]down->State5
diff --git a/docs/diagrams/NewUndoRedoState4.puml b/docs/diagrams/NewUndoRedoState4.puml
new file mode 100644
index 00000000000..383b7d65599
--- /dev/null
+++ b/docs/diagrams/NewUndoRedoState4.puml
@@ -0,0 +1,27 @@
+@startuml
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+
+title After command "list"
+
+package undoHistory {
+ class State1 as "__m0:Memento__"
+ class State2 as "__null:Memento__"
+ class State3 as "__null:Memento__"
+}
+
+State1 -[hidden]right-> State2
+State2 -[hidden]right-> State3
+
+package redoFuture {
+ class State5 as "__null:Memento__"
+ class State6 as "__m2:Memento__"
+ class State7 as "__null:Memento__"
+}
+State5 -[hidden]right-> State6
+State6 -[hidden]right-> State7
+
+class Pointer as "currentNum"
+Pointer -up-> State1
+Pointer -[hidden]down->State5
diff --git a/docs/diagrams/NewUndoRedoState5.puml b/docs/diagrams/NewUndoRedoState5.puml
new file mode 100644
index 00000000000..83e313ea2bd
--- /dev/null
+++ b/docs/diagrams/NewUndoRedoState5.puml
@@ -0,0 +1,27 @@
+@startuml
+!include style.puml
+skinparam ClassFontColor #000000
+skinparam ClassBorderColor #000000
+
+title title After command "clear"
+
+package undoHistory {
+ class State1 as "__m0:Memento__"
+ class State2 as "__m3:Memento__"
+ class State3 as "__null:Memento__"
+}
+
+State1 -[hidden]right-> State2
+State2 -[hidden]right-> State3
+
+package redoFuture {
+ class State5 as "__null:Memento__"
+ class State6 as "__null:Memento__"
+ class State7 as "__null:Memento__"
+}
+State5 -[hidden]right-> State6
+State6 -[hidden]right-> State7
+
+class Pointer as "currentNum"
+Pointer -up-> State2
+Pointer -[hidden]down->State6
diff --git a/docs/diagrams/UndoRedoState0.puml b/docs/diagrams/UndoRedoState0.puml
index 96e30744d24..fff0bd01ae4 100644
--- a/docs/diagrams/UndoRedoState0.puml
+++ b/docs/diagrams/UndoRedoState0.puml
@@ -3,18 +3,29 @@
skinparam ClassFontColor #000000
skinparam ClassBorderColor #000000
-title Initial state
+title Initial State of HistoryUtil
-package States {
- class State1 as "__ab0:AddressBook__"
- class State2 as "__ab1:AddressBook__"
- class State3 as "__ab2:AddressBook__"
+class State0 as "Out of bounds"
+package undoHistory {
+ class State1 as "__null:Memento__"
+ class State2 as "__null:Memento__"
+ class State3 as "__null:Memento__"
}
+State0 -[hidden]right-> State1
State1 -[hidden]right-> State2
State2 -[hidden]right-> State3
-hide State2
-hide State3
-class Pointer as "Current State" #FFFFF
-Pointer -up-> State1
-@end
+class State4 as "Out of bounds"
+hide State4
+package redoFuture {
+ class State5 as "__null:Memento__"
+ class State6 as "__null:Memento__"
+ class State7 as "__null:Memento__"
+}
+State4 -[hidden]right-> State5
+State5 -[hidden]right-> State6
+State6 -[hidden]right-> State7
+
+class Pointer as "currentNum"
+Pointer -up-> State0
+Pointer -[hidden]down-> State4
diff --git a/docs/diagrams/UndoRedoState2.puml b/docs/diagrams/UndoRedoState2.puml
index bccc230a5d1..4a1a16b1813 100644
--- a/docs/diagrams/UndoRedoState2.puml
+++ b/docs/diagrams/UndoRedoState2.puml
@@ -14,7 +14,7 @@ package States <> {
State1 -[hidden]right-> State2
State2 -[hidden]right-> State3
-class Pointer as "Current State" #FFFFF
+class Pointer as "Current State" #FFF
Pointer -up-> State3
@end
diff --git a/docs/diagrams/UndoRedoState4.puml b/docs/diagrams/UndoRedoState4.puml
index 1b784cece80..6edbdd692d4 100644
--- a/docs/diagrams/UndoRedoState4.puml
+++ b/docs/diagrams/UndoRedoState4.puml
@@ -14,7 +14,7 @@ package States <> {
State1 -[hidden]right-> State2
State2 -[hidden]right-> State3
-class Pointer as "Current State" #FFFFF
+class Pointer as "Current State" #FFF
Pointer -up-> State2
@end
diff --git a/docs/diagrams/UndoSequenceDiagram copy.puml b/docs/diagrams/UndoSequenceDiagram copy.puml
new file mode 100644
index 00000000000..b8e68560c52
--- /dev/null
+++ b/docs/diagrams/UndoSequenceDiagram copy.puml
@@ -0,0 +1,73 @@
+@startuml NewUndoSequenceDiagram
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TeamBuilderParser" as TeamBuilderParser LOGIC_COLOR
+participant "u:UndoCommand" as UndoCommand LOGIC_COLOR
+end box
+
+box Common.Util
+skinparam ParticipantFontColor black
+participant ":HistroyUtil" as HistoryUtil
+end box
+
+box Model MODEL_COLOR_T1
+skinparam ParticipantFontColor white
+participant "current:Memento" as Memento MODEL_COLOR
+participant ":Originator" as Originator MODEL_COLOR
+end box
+[-> LogicManager : execute(undo)
+activate LogicManager
+
+LogicManager -> TeamBuilderParser : parseCommand(undo)
+activate TeamBuilderParser
+
+create UndoCommand
+TeamBuilderParser -> UndoCommand
+activate UndoCommand
+
+UndoCommand --> TeamBuilderParser
+deactivate UndoCommand
+
+TeamBuilderParser --> LogicManager : u
+deactivate TeamBuilderParser
+
+LogicManager -> UndoCommand : execute()
+activate UndoCommand
+
+UndoCommand -> HistoryUtil : undo()
+activate HistoryUtil
+
+HistoryUtil -> Memento : getUpdatedMemo()
+activate Memento
+
+Memento -> Originator : save()
+activate Originator
+
+Originator --> Memento
+
+Memento --> HistoryUtil
+
+HistoryUtil -> Memento : restore()
+
+
+Memento -> Originator : setState(state)
+
+Originator --> Memento
+deactivate Originator
+
+Memento --> HistoryUtil
+deactivate Memento
+
+HistoryUtil --> UndoCommand
+deactivate HistoryUtil
+
+UndoCommand --> LogicManager : result
+deactivate UndoCommand
+UndoCommand -[hidden]-> LogicManager : result
+destroy UndoCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/plantuml/AbeforeC.png b/docs/diagrams/plantuml/AbeforeC.png
new file mode 100644
index 00000000000..a52cd2cc281
Binary files /dev/null and b/docs/diagrams/plantuml/AbeforeC.png differ
diff --git a/docs/diagrams/plantuml/AllDown.png b/docs/diagrams/plantuml/AllDown.png
new file mode 100644
index 00000000000..edc380b60b1
Binary files /dev/null and b/docs/diagrams/plantuml/AllDown.png differ
diff --git a/docs/diagrams/plantuml/ArrowLength.png b/docs/diagrams/plantuml/ArrowLength.png
new file mode 100644
index 00000000000..8929ceb3ee8
Binary files /dev/null and b/docs/diagrams/plantuml/ArrowLength.png differ
diff --git a/docs/diagrams/plantuml/CbeforeA.png b/docs/diagrams/plantuml/CbeforeA.png
new file mode 100644
index 00000000000..820c7fe9e81
Binary files /dev/null and b/docs/diagrams/plantuml/CbeforeA.png differ
diff --git a/docs/diagrams/plantuml/HiddenArrows.png b/docs/diagrams/plantuml/HiddenArrows.png
new file mode 100644
index 00000000000..e9d03eb0231
Binary files /dev/null and b/docs/diagrams/plantuml/HiddenArrows.png differ
diff --git a/docs/diagrams/plantuml/PackagesAndConsistency.png b/docs/diagrams/plantuml/PackagesAndConsistency.png
new file mode 100644
index 00000000000..3f857513f4e
Binary files /dev/null and b/docs/diagrams/plantuml/PackagesAndConsistency.png differ
diff --git a/docs/diagrams/plantuml/UpAndDown.png b/docs/diagrams/plantuml/UpAndDown.png
new file mode 100644
index 00000000000..d69cc603399
Binary files /dev/null and b/docs/diagrams/plantuml/UpAndDown.png differ
diff --git a/docs/images/ActivityDiagram_AddCommandParser.png b/docs/images/ActivityDiagram_AddCommandParser.png
new file mode 100644
index 00000000000..f8010263008
Binary files /dev/null and b/docs/images/ActivityDiagram_AddCommandParser.png differ
diff --git a/docs/images/ActivityDiagram_AddPerson.png b/docs/images/ActivityDiagram_AddPerson.png
new file mode 100644
index 00000000000..d73230b14f9
Binary files /dev/null and b/docs/images/ActivityDiagram_AddPerson.png differ
diff --git a/docs/images/ActivityDiagram_ShowCommand.png b/docs/images/ActivityDiagram_ShowCommand.png
new file mode 100644
index 00000000000..e57d967462c
Binary files /dev/null and b/docs/images/ActivityDiagram_ShowCommand.png differ
diff --git a/docs/images/ActivityDiagram_ShowCommandParser.png b/docs/images/ActivityDiagram_ShowCommandParser.png
new file mode 100644
index 00000000000..920dff4d7c8
Binary files /dev/null and b/docs/images/ActivityDiagram_ShowCommandParser.png differ
diff --git a/docs/images/ActivityDiagram_TeamContainsKeywordsPredicate.png b/docs/images/ActivityDiagram_TeamContainsKeywordsPredicate.png
new file mode 100644
index 00000000000..16894b183e5
Binary files /dev/null and b/docs/images/ActivityDiagram_TeamContainsKeywordsPredicate.png differ
diff --git a/docs/images/AddCommandClassDiagram.png b/docs/images/AddCommandClassDiagram.png
new file mode 100644
index 00000000000..7e897cd1bbc
Binary files /dev/null and b/docs/images/AddCommandClassDiagram.png differ
diff --git a/docs/images/AddResult.png b/docs/images/AddResult.png
new file mode 100644
index 00000000000..915120af05d
Binary files /dev/null and b/docs/images/AddResult.png differ
diff --git a/docs/images/AlexRemoveFromTeam.png b/docs/images/AlexRemoveFromTeam.png
new file mode 100644
index 00000000000..834808a3599
Binary files /dev/null and b/docs/images/AlexRemoveFromTeam.png differ
diff --git a/docs/images/Alex_NUSMeets.png b/docs/images/Alex_NUSMeets.png
new file mode 100644
index 00000000000..410767c197d
Binary files /dev/null and b/docs/images/Alex_NUSMeets.png differ
diff --git a/docs/images/CommitActivityDiagram.png b/docs/images/CommitActivityDiagram.png
index c08c13f5c8b..737851c2f77 100644
Binary files a/docs/images/CommitActivityDiagram.png and b/docs/images/CommitActivityDiagram.png differ
diff --git a/docs/images/CreateTeam.png b/docs/images/CreateTeam.png
new file mode 100644
index 00000000000..cdfdca52894
Binary files /dev/null and b/docs/images/CreateTeam.png differ
diff --git a/docs/images/FindComputerScience.png b/docs/images/FindComputerScience.png
new file mode 100644
index 00000000000..b4287fb6d11
Binary files /dev/null and b/docs/images/FindComputerScience.png differ
diff --git a/docs/images/FindJavascript.png b/docs/images/FindJavascript.png
new file mode 100644
index 00000000000..8cbe404beee
Binary files /dev/null and b/docs/images/FindJavascript.png differ
diff --git a/docs/images/FindReact.png b/docs/images/FindReact.png
new file mode 100644
index 00000000000..01fd365ffb7
Binary files /dev/null and b/docs/images/FindReact.png differ
diff --git a/docs/images/ImplementedMementoDesignDiagram.png b/docs/images/ImplementedMementoDesignDiagram.png
new file mode 100644
index 00000000000..2a1b495910b
Binary files /dev/null and b/docs/images/ImplementedMementoDesignDiagram.png differ
diff --git a/docs/images/JohnAdded.png b/docs/images/JohnAdded.png
new file mode 100644
index 00000000000..b6de643f78f
Binary files /dev/null and b/docs/images/JohnAdded.png differ
diff --git a/docs/images/JohnContactCardBack.jpg b/docs/images/JohnContactCardBack.jpg
new file mode 100644
index 00000000000..5e55eda3a5b
Binary files /dev/null and b/docs/images/JohnContactCardBack.jpg differ
diff --git a/docs/images/JohnContactCardFront.png b/docs/images/JohnContactCardFront.png
new file mode 100644
index 00000000000..6c944533bd1
Binary files /dev/null and b/docs/images/JohnContactCardFront.png differ
diff --git a/docs/images/JohnDeleted.png b/docs/images/JohnDeleted.png
new file mode 100644
index 00000000000..0df47ad1cb2
Binary files /dev/null and b/docs/images/JohnDeleted.png differ
diff --git a/docs/images/JohnFullContact.png b/docs/images/JohnFullContact.png
new file mode 100644
index 00000000000..c7eae4d2ac7
Binary files /dev/null and b/docs/images/JohnFullContact.png differ
diff --git a/docs/images/JohnIndex.png b/docs/images/JohnIndex.png
new file mode 100644
index 00000000000..5afa34db059
Binary files /dev/null and b/docs/images/JohnIndex.png differ
diff --git a/docs/images/LabelledAppWindow.png b/docs/images/LabelledAppWindow.png
new file mode 100644
index 00000000000..d48a6f1b302
Binary files /dev/null and b/docs/images/LabelledAppWindow.png differ
diff --git a/docs/images/MementoDesignPatternDiagram.png b/docs/images/MementoDesignPatternDiagram.png
new file mode 100644
index 00000000000..f3c44f5256f
Binary files /dev/null and b/docs/images/MementoDesignPatternDiagram.png differ
diff --git a/docs/images/ModelClassDiagram2.png b/docs/images/ModelClassDiagram2.png
new file mode 100644
index 00000000000..eb0e7b4918d
Binary files /dev/null and b/docs/images/ModelClassDiagram2.png differ
diff --git a/docs/images/NewUndoRedoState0.png b/docs/images/NewUndoRedoState0.png
new file mode 100644
index 00000000000..e004ee350b1
Binary files /dev/null and b/docs/images/NewUndoRedoState0.png differ
diff --git a/docs/images/NewUndoRedoState1.png b/docs/images/NewUndoRedoState1.png
new file mode 100644
index 00000000000..551889128bb
Binary files /dev/null and b/docs/images/NewUndoRedoState1.png differ
diff --git a/docs/images/NewUndoRedoState2.png b/docs/images/NewUndoRedoState2.png
new file mode 100644
index 00000000000..07c25891bfb
Binary files /dev/null and b/docs/images/NewUndoRedoState2.png differ
diff --git a/docs/images/NewUndoRedoState3.png b/docs/images/NewUndoRedoState3.png
new file mode 100644
index 00000000000..ae6ef193bca
Binary files /dev/null and b/docs/images/NewUndoRedoState3.png differ
diff --git a/docs/images/NewUndoRedoState4.png b/docs/images/NewUndoRedoState4.png
new file mode 100644
index 00000000000..ae20a42bb56
Binary files /dev/null and b/docs/images/NewUndoRedoState4.png differ
diff --git a/docs/images/NewUndoRedoState5.png b/docs/images/NewUndoRedoState5.png
new file mode 100644
index 00000000000..b8e09f5752d
Binary files /dev/null and b/docs/images/NewUndoRedoState5.png differ
diff --git a/docs/images/NewUndoSequenceDiagram.png b/docs/images/NewUndoSequenceDiagram.png
new file mode 100644
index 00000000000..232b09600af
Binary files /dev/null and b/docs/images/NewUndoSequenceDiagram.png differ
diff --git a/docs/images/ShowNUSMeets.png b/docs/images/ShowNUSMeets.png
new file mode 100644
index 00000000000..e58514d7f77
Binary files /dev/null and b/docs/images/ShowNUSMeets.png differ
diff --git a/docs/images/TeamBuilderUi.png b/docs/images/TeamBuilderUi.png
new file mode 100644
index 00000000000..5f2d7056dce
Binary files /dev/null and b/docs/images/TeamBuilderUi.png differ
diff --git a/docs/images/Ui.png b/docs/images/Ui.png
index 5bd77847aa2..f27a5d0da6d 100644
Binary files a/docs/images/Ui.png and b/docs/images/Ui.png differ
diff --git a/docs/images/UpdateModelClassDiagram.png b/docs/images/UpdateModelClassDiagram.png
new file mode 100644
index 00000000000..b3f45923f19
Binary files /dev/null and b/docs/images/UpdateModelClassDiagram.png differ
diff --git a/docs/images/chen-jerry-junior.png b/docs/images/chen-jerry-junior.png
new file mode 100644
index 00000000000..6340bddbefc
Binary files /dev/null and b/docs/images/chen-jerry-junior.png differ
diff --git a/docs/images/chickenchiang.png b/docs/images/chickenchiang.png
new file mode 100644
index 00000000000..8d4e7e5cf17
Binary files /dev/null and b/docs/images/chickenchiang.png differ
diff --git a/docs/images/findAlexDavid.png b/docs/images/findAlexDavid.png
new file mode 100644
index 00000000000..62845a763ea
Binary files /dev/null and b/docs/images/findAlexDavid.png differ
diff --git a/docs/images/helpMessage.png b/docs/images/helpMessage.png
index b1f70470137..9377822079e 100644
Binary files a/docs/images/helpMessage.png and b/docs/images/helpMessage.png differ
diff --git a/docs/images/newsortcommandparser.png b/docs/images/newsortcommandparser.png
new file mode 100644
index 00000000000..8541204b1c2
Binary files /dev/null and b/docs/images/newsortcommandparser.png differ
diff --git a/docs/images/sortDesc.png b/docs/images/sortDesc.png
new file mode 100644
index 00000000000..a40f01b90dc
Binary files /dev/null and b/docs/images/sortDesc.png differ
diff --git a/docs/images/sortcommand-activity.png b/docs/images/sortcommand-activity.png
new file mode 100644
index 00000000000..023b34a274e
Binary files /dev/null and b/docs/images/sortcommand-activity.png differ
diff --git a/docs/images/swx0.png b/docs/images/swx0.png
new file mode 100644
index 00000000000..847cb8befbb
Binary files /dev/null and b/docs/images/swx0.png differ
diff --git a/docs/images/ui_startup.png b/docs/images/ui_startup.png
new file mode 100644
index 00000000000..55876ff2e9d
Binary files /dev/null and b/docs/images/ui_startup.png differ
diff --git a/docs/images/willcwx.png b/docs/images/willcwx.png
new file mode 100644
index 00000000000..fd0164c348a
Binary files /dev/null and b/docs/images/willcwx.png differ
diff --git a/docs/index.md b/docs/index.md
index 7601dbaad0d..9ab9d1a2189 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,19 +1,20 @@
---
layout: page
-title: AddressBook Level-3
+title: Team Builder
---
[](https://github.com/se-edu/addressbook-level3/actions)
[](https://codecov.io/gh/se-edu/addressbook-level3)
-
+
-**AddressBook is a desktop application for managing your contact details.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).
+**TeamBuilder is a desktop application for managing your contact details.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).
-* If you are interested in using AddressBook, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).
-* If you are interested about developing AddressBook, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.
+* If you are interested in using TeamBuilder, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).
+* If you are interested about developing TeamBuilder, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.
**Acknowledgements**
* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)
+* Icons used: [Fluent UI](https://github.com/microsoft/fluentui-system-icons)
diff --git a/docs/team/chen-jerry-junior.md b/docs/team/chen-jerry-junior.md
new file mode 100644
index 00000000000..ac8f6a40868
--- /dev/null
+++ b/docs/team/chen-jerry-junior.md
@@ -0,0 +1,59 @@
+---
+layout: page
+title: Chen Jiarui's Project Portfolio Page
+---
+
+### Project: Team Builder
+
+Team Builder is a desktop personal contacts book application used by the user to form a team for any event. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java.
+
+Given below are my contributions to the project.
+
+* **New Feature**: Show
+ * What it does: allows the user to list all people under certain specified teams.
+ * Justification: Users might want to list all people under a certain team they created. Rather than checking everyone's person card, they can just use `show` followed by the target team name. This is especially useful when users want to compare a team's skill requirements with skills possessed by the members.
+ * Highlights: Able to show all members who belong to multiple teams, use `show` followed by names of multiple teams that are separated by spaces.
+
+* **New Feature**: Major
+ * What it does: allows the user to add a person with a given major.
+ * Justification: This is useful when a user want to create a team of students with specified major. A major field also help the user to create cross-disciplinary teams.
+ * Highlights: This enhancement affects existing commands such as `find` `add` and `edit`.
+
+* **New Feature**: GUI for Team List
+ * What it does: adds a TeamListPanel and a TeamCard to allow the user to navigate through the existing teams.
+ * Justification: This feature improves the product significantly because it is necessary for a user to see the existing teams to use our product.
+ * Highlights: This feature allows the team list to automatically update regarding the command `create` and `remove` for teams and `edit` for adding people into teams.
+
+* **Enhancements to existing features**:
+ * Update `find` command so that the user can use `find` to search for people by their names, skills (tags), and major.
+
+* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2223s2.github.io/tp-dashboard/?search=chen-jerry-junior&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17)
+
+* **Testing**:
+ * Add TeamBuilder to facilitate testing of Team
+ * Update PersonUtil, EditPersonDescriptorBuilder, TypicalPersons, PersonBuilder to facilitate testing for Major and TeamTag
+ * Add unit tests for ShowCommandTest, ShowCommandParserTest
+ * Add unit tests for RemoveCommandTest, RemoveCommandParserTest
+ * Add unit tests for TeamTest, TeamContainKeywordsPredicateTest
+ * Add new unit tests for FindCommandTest, FindCommandParserTest
+ * Add new unit tests for AddCommandTest, AddCommandParserTest
+
+* **Bug Fixing**:
+ * Modified the error message of command `add` `edit` `remove` `show` `sort` to consist with the description in the UserGuide.
+ * Import prefix of TeamTag in add command parser and added comparison of TeamTag in edit command to enable `add` and `edit` on TeamTags.
+
+* **Project management**:
+ * Managed TeamBuilder releases for [v1.3.1](https://github.com/AY2223S2-CS2103T-T17-1/tp/releases/tag/v1.3.1) on GitHub.
+
+* **Documentation**:
+ * User Guide:
+ * Added documentation for the feature `show`
+ * Updated documentation for the feature `find`
+ * Replaced all "address book" with "TeamBuilder"
+ * Developer Guide:
+ * Added implementation details of the `show` feature.
+ * Added activity diagram for show command and show command parser
+ * Added manual testing of `show` and `find`
+
+* **Community**:
+ * Reported bugs and suggestions for other teams in the class (for PE-D: [17 issues](https://github.com/chen-jerry-junior/ped/issues))
diff --git a/docs/team/chickenchiang.md b/docs/team/chickenchiang.md
new file mode 100644
index 00000000000..bd19d41047a
--- /dev/null
+++ b/docs/team/chickenchiang.md
@@ -0,0 +1,59 @@
+---
+layout: page
+title: Joshua Chiang's Project Portfolio Page
+---
+
+### Project: Team Builder
+
+Team Builder is a desktop personal contacts book application used by the user to form a team for any event. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.
+
+Given below are my contributions to the project.
+
+* **New Feature**: TeamTags
+ * What it does: TeamTags allow for users to add a person to a team. It also allows you to see the teams a contact is in at a glance.
+ * Justification: This is directly in line with our product description.
+ * Highlights: This feature is not implemented optimally for user experience. Currently, in order to add a person to the team, the user has to edit a contact and type in full team names manually. Additionally, adding a person to a team requires the user to enter all the teams the person already belong to, on top of the new team we wish to add them in.
+ * Credits: TeamTags takes inspiration for the Tags class from AB3 and heavily mirrors the methods it uses there.
+
+* **New Feature**: JsonAdaptedTeams and JsonAdaptedNames
+ * What it does: For TeamBuilder to both read and store Teams and their respective members from/into the data file in JsonFormat.
+ * Justification: This feature is necessary for TeamBuilder to reach a minimum viable product stage, as teams will not be lost after users exit the program.
+ * Credits: This feature heavily references the JsonAdaptedPerson class provided by AB3.
+
+* **New Feature**: UniqueTeamList
+ * What it does: Allows for TeamBuilder's model component to hold a list of Teams.
+ * Justification: This feature is necessary for TeamBuilder to function and store teams created by the user.
+ * Credits: This feature heavily reference the UniquePersonsList from AB3.
+
+* **New Feature**: Allow contacts to have optional fields
+ * What it does: Allows for users to add or edit a contact such that certain fields are empty, e.g. address, phone number.
+ * Justification: TeamBuilder is meant for students primarily. Outside a corporate context, it is unlikely that our users will have/require all details regarding a contact.
+
+* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2223s2.github.io/tp-dashboard/?search=T17-1&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17)
+
+* **Project management**:
+ * Managed TeamBuilder releases for [v1.2](https://github.com/AY2223S2-CS2103T-T17-1/tp/releases/tag/v1.2), [v1.2.1](https://github.com/AY2223S2-CS2103T-T17-1/tp/releases/tag/v1.2.1), and [v1.3](https://github.com/AY2223S2-CS2103T-T17-1/tp/releases/tag/v1.3) on Github.
+ * Creation of milestones for workflow control.
+
+* **Enhancements to existing features**:
+ * Updated GUI for tags, team tags, skill tags, and member tags.
+ * Changed GUI such that person empty person fields are hidden and take up no space.
+
+* **Documentation**:
+ * User Guide:
+ * Added future features section.
+ * Added sample screen shot of Ui as well as description for users to understand what they are looking at.
+ * Developer Guide:
+ * Documented AddCommand implementation and created an activity diagram to aid understanding.
+ * Added Future Enhancement section.
+ * Added documentation for how optional fields are achieved for person class.
+
+* **Bug fixes**:
+ * Fixed Ui issue where the TeamList Ui is cutoff when the TeamBuilder window is resized too small.
+ * Fixed bug where the wrong error is displayed when an invalid index is passed as an argument.
+
+* **Community**:
+ * Contributed to forum discussions (examples: [#232](https://github.com/nus-cs2103-AY2223S2/forum/issues/232), [#239](https://github.com/nus-cs2103-AY2223S2/forum/issues/239), [#286](https://github.com/nus-cs2103-AY2223S2/forum/issues/286))
+ * Reported bugs and suggestions for other teams in the class (examples: To be added)
+
+
diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md
deleted file mode 100644
index 773a07794e2..00000000000
--- a/docs/team/johndoe.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-layout: page
-title: John Doe's Project Portfolio Page
----
-
-### Project: AddressBook Level 3
-
-AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.
-
-Given below are my contributions to the project.
-
-* **New Feature**: Added the ability to undo/redo previous commands.
- * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
- * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
- * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
- * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*
-
-* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.
-
-* **Code contributed**: [RepoSense link]()
-
-* **Project management**:
- * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub
-
-* **Enhancements to existing features**:
- * Updated the GUI color scheme (Pull requests [\#33](), [\#34]())
- * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\#36](), [\#38]())
-
-* **Documentation**:
- * User Guide:
- * Added documentation for the features `delete` and `find` [\#72]()
- * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\#74]()
- * Developer Guide:
- * Added implementation details of the `delete` feature.
-
-* **Community**:
- * PRs reviewed (with non-trivial review comments): [\#12](), [\#32](), [\#19](), [\#42]()
- * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())
- * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())
- * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())
-
-* **Tools**:
- * Integrated a third party library (Natty) to the project ([\#42]())
- * Integrated a new Github plugin (CircleCI) to the team repo
-
-* _{you can add/remove categories in the list above}_
diff --git a/docs/team/swx0.md b/docs/team/swx0.md
new file mode 100644
index 00000000000..595589bdf95
--- /dev/null
+++ b/docs/team/swx0.md
@@ -0,0 +1,77 @@
+---
+layout: page
+title: See Wei Xun's Project Portfolio Page
+---
+
+### Project: Team Builder
+
+Team Builder is a desktop app primarily for cross-faculty students to manage their contacts and build a multidisciplinary team based on soft skills and technical skills. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.
+
+Given below are my contributions to the project.
+
+* **New Feature**: Sort Person's list
+ * Justification:
+ * Useful for users to organize their unordered contact list, makes selecting team members easier
+ * Allows users to find who has the most or least number of skill tags easily
+
+ * Highlights:
+ * Able to sort Person's list using `sort` command
+ * Implemented sorting by Person's number of tags using `tcount` as the parameter to `sort` command
+ * Able to sort in both orders, descending (`desc` as parameter) or ascending (`asc` as parameter)
+
+* **New Feature**: Create/Remove Team and TeamList
+ * Justification:
+ * For users to create/remove team and assign team members.
+ * TeamList for users to track the status/description of all teams created
+
+ * Highlights:
+ * Allows users to specify Team's name, description and skill requirements (as tags)
+ * Able to create teams using `create` command and remove teams using `remove` command
+ * After a new team is added in TeamList, users are able to add members to team (by attach corresponding team tag to the Person)
+ * Credits:
+ * The implementation for Team and TeamList is adapted from the implementation for Person and PersonList respectively
+
+* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2223s2.github.io/tp-dashboard/?search=swx0&breakdown=true)
+
+* **Testing**:
+ * Add unit tests for CreateCommandTest, CreateCommandParserTest
+ * Add new unit tests for ParserUtilTest, TeamBuilderParserTest
+ * Add unit tests for SortCommandTest, UniqueTeamListTest
+
+* **Bug Fixing**:
+ * Added exception handling for sort command parameters
+ * Added a note in User Guide under the sort command section to specify the need to execute `list` before `sort` if a `find` command was performed before
+ * Add clarifying note in User Guide to specify which SORT_BY could be used
+ * Add clarifying note in User Guide to specify that the Add Command may not add persons in chronological order.
+
+* **Project management**:
+ * Generate PE-D bugs report
+ * Added labels to Pull Requests and Issues and create v1.4 milestone
+
+* **Team based tasks**:
+ * Brainstorming of target users, user stories, features to implement
+ * Update post-mortem v1.2
+
+* **Enhancements to existing features**:
+ * Existing `edit` and `delete` commands
+ * Edit person's team tags / Delete person would cascade changes to TeamList
+ * Existing `add` and `edit` commands
+ * Add / Edit person with Team tags only if teams created beforehand
+
+* **Documentation**:
+ * User Guide:
+ * Add sort command section (command format, examples)
+ * Add 'Create team', 'Remove a team' and 'Add a person to a team' sections (command format, examples)
+ * Add screenshots for Find, Show and Create commands
+ * Developer Guide:
+ * Update target user profile, value proposition, user stories, use cases
+ * Add implementation and design considerations for sort function
+ * Add activity diagram for sort command and sort command parser
+ * Update Model component diagram to add Team and TeamList, update attributes of Person
+ * Add description for create team feature
+ * Remove data archiving section
+ * Add 'Sorting Persons' and 'Creating a team' in Instructions for manual testing
+
+* **Community**:
+ * Contributed to forum discussions ([\#303](https://github.com/nus-cs2103-AY2223S2/forum/issues/303))
+ * Reported bugs and suggestions for other teams in the class (for PE-D: [\#1](https://github.com/swx0/ped/issues/1) [\#2](https://github.com/swx0/ped/issues/2) [\#3](https://github.com/swx0/ped/issues/3) [\#4](https://github.com/swx0/ped/issues/4) [\#5](https://github.com/swx0/ped/issues/5) [\#6](https://github.com/swx0/ped/issues/6))
diff --git a/docs/team/willcwx.md b/docs/team/willcwx.md
new file mode 100644
index 00000000000..d95e837c24e
--- /dev/null
+++ b/docs/team/willcwx.md
@@ -0,0 +1,98 @@
+---
+layout: page
+title: William's Project Portfolio Page
+---
+
+### Project: Team Builder
+
+Team Builder is a desktop personal contacts book application used by the user to form a team for any event. The user interacts with it using a CLI, and it has a GUI created with JavaFX.
+
+Given below are my contributions to the project.
+
+* **Undo functionality**:
+ * Justification:
+ * Careless Users might want to undo their last command.
+ * Rather than finding the reversing action, they can just use `undo`.
+ * This is especially useful for users that accidentally use the `clear` command and would like to recover their contact list.
+
+ * Highlights:
+ * Able to undo up to 10 last commands.
+ * Able to undo: `add, edit, delete, clear`
+
+ * Credits:
+ * Momento Design Pattern
+
+* **Redo functionality**:
+ * Justification:
+ * Careless Users might want to redo their last undo.
+ * Rather than finding the reversing action, they can just use `redo`.
+ * This is especially useful for users that accidentally use the `undo` command after adding someone important and would like to recover their last contact.
+
+ * Highlights:
+ * Able to redo up to 10 last commands.
+
+ * Credits:
+ * Momento Design Pattern
+
+* **Testing**:
+ * Created tests for all new features implemented above.
+
+{::comment}
+
+* **New Feature**: `to be added soon`
+ * Justification: `to be added soon`
+ * Highlights: `to be added soon`
+ * Credits: `to be added soon` *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*
+
+{:/comment}
+
+* **Code contributed**:
+ * [RepoSense link](https://nus-cs2103-ay2223s2.github.io/tp-dashboard/?search=WillCWX&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByNone&breakdown=true&since=2023-02-17&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&tabAuthor=WillCWX&tabRepo=AY2223S2-CS2103T-T17-1%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code~other&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false)
+ * ~2697 lines
+
+* **Project management**:
+ * Created issues: [\#26](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/26), [\#51](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/51), [\#54](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/54), [\#55](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/55), [\#56](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/56), [\#103](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/103), [\#104](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/104), [\#105](https://github.com/AY2223S2-CS2103T-T17-1/tp/issues/105)
+ * Created Demo v1.3 and v1.2
+
+* **Documentation**:
+ * README:
+ * Added Badges and new UI.png
+ * Removed all references to AB-3 for TeamBuilder
+ * Added Acknowledgements for NUS AB-3 source code and
+ for the SE-EDU initiative.
+ * Added Installation guide
+ * Linked User guide
+ * Linked Developer guide and added contribution guidelines
+ * Added Authors and linked to their github
+ * Added futher acknowledgements for Microsoft Fluent-UI freeuse.
+
+ * User Guide:
+ * Removed all references to AB-3 for TeamBuilder
+ * Added the sections `Undoing a command` and `Redoing an undo command`
+ * Created and implemented a narrative style from `About this guide` to `Deleting a contact` and also in `Undoing a command` and `Redoing an undo command`.
+ * Added multiple photos, some css stylings
+ * Added multiple `information`,`caution` and `tip` divisions for better style
+
+ * Developer Guide:
+ * Created the entire implementation detail for `Undo/Redo feature`
+ * Mutiple UML models used, including class diagrams, sequence diagrams and an activity diagram.
+ * Added to the manual testing appendix
+ * Fixed links that were previously pointing to seedu
+
+* **Tools**:
+ * Integrated an existing plugin fully (CodeCov) on team fork
+
+{::comment}
+
+* **Community**:
+ * PRs reviewed (with non-trivial review comments): `to be added soon` *{[\#12](), [\#32](), [\#19](), [\#42]()}*
+ * Contributed to forum discussions (examples: `to be added soon`)
+ * Reported bugs and suggestions for other teams in the class (examples: `to be added soon`)
+ * Some parts of the history feature I added was adopted by several other class mates `to be added soon`
+
+ * Integrated a third party library (Natty) to the project `to be added soon`
+ * Integrated a new Github plugin (CircleCI) to the team repo `to be added soon`
+
+_{you can add/remove categories in the list above}_
+
+{:/comment}
diff --git a/docs/tutorials/AboutUs.md b/docs/tutorials/AboutUs.md
new file mode 100644
index 00000000000..7ba21dc3535
--- /dev/null
+++ b/docs/tutorials/AboutUs.md
@@ -0,0 +1,68 @@
+---
+layout: page
+title: About Us
+---
+
+We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).
+
+You can reach us at the email `seer[at]comp.nus.edu.sg`
+
+## Project team
+
+### John Doe
+
+
+
+[[homepage](http://www.comp.nus.edu.sg/~damithch)]
+[[github](https://github.com/johndoe)]
+[[portfolio](team/johndoe.md)]
+
+* Role: Project Advisor
+
+### Joshua Chiang
+
+
+
+[[github](http://github.com/ChickenChiang)]
+[[portfolio](team/ChickenChiang.md)]
+
+* Role: Team Lead, Developer
+* Responsibilities: UI
+
+### See Wei Xun
+
+
+
+[[github](http://github.com/swx0)] [[portfolio](team/swx0.md)]
+
+* Role: Developer
+* Responsibilities: Data
+
+### Chen Jiarui
+
+
+
+[[github](http://github.com/chen-jerry-junior)] [[portfolio](team/chen-jerry-junior.md)]
+
+* Role: Developer
+* Responsibilities: Data
+
+### Jean Doe
+
+
+
+[[github](http://github.com/johndoe)]
+[[portfolio](team/johndoe.md)]
+
+* Role: Developer
+* Responsibilities: Dev Ops + Threading
+
+### William Chau Wei Xuan
+
+
+
+[[github](http://github.com/willcwx)]
+[[portfolio](team/willcwx.md)]
+
+* Role: Developer
+* Responsibilities: Testing, Integration
diff --git a/docs/tutorials/AddRemark.md b/docs/tutorials/AddRemark.md
index 880c701042f..d1060f6ab04 100644
--- a/docs/tutorials/AddRemark.md
+++ b/docs/tutorials/AddRemark.md
@@ -5,7 +5,7 @@ title: "Tutorial: Adding a command"
Let's walk you through the implementation of a new command — `remark`.
-This command allows users of the AddressBook application to add optional remarks to people in their address book and edit it if required. The command should have the following format:
+This command allows users of the AddressBook application to add optional remarks to people in their TeamBuilder and edit it if required. The command should have the following format:
`remark INDEX r/REMARK` (e.g., `remark 2 r/Likes baseball`)
@@ -28,7 +28,7 @@ package seedu.address.logic.commands;
import seedu.address.model.Model;
/**
- * Changes the remark of an existing person in the address book.
+ * Changes the remark of an existing person in the TeamBuilder.
*/
public class RemarkCommand extends Command {
@@ -295,7 +295,7 @@ While the changes to code may be minimal, the test data will have to be updated
-:exclamation: You must delete AddressBook’s storage file located at `/data/addressbook.json` before running it! Not doing so will cause AddressBook to default to an empty address book!
+:exclamation: You must delete AddressBook’s storage file located at `/data/addressbook.json` before running it! Not doing so will cause TeamBuilder to default to an empty TeamBuilder!
diff --git a/docs/tutorials/TracingCode.md b/docs/tutorials/TracingCode.md
index 4fb62a83ef6..767cdf46b6e 100644
--- a/docs/tutorials/TracingCode.md
+++ b/docs/tutorials/TracingCode.md
@@ -39,7 +39,7 @@ In our case, we would want to begin the tracing at the very point where the App
-According to the sequence diagram you saw earlier (and repeated above for reference), the `UI` component yields control to the `Logic` component through a method named `execute`. Searching through the code base for an `execute()` method that belongs to the `Logic` component yields a promising candidate in `seedu.address.logic.Logic`.
+According to the sequence diagram you saw earlier (and repeated above for reference), the `UI` component yields control to the `Logic` component through a method named `execute`. Searching through the code base for an `execute()` method that belongs to the `Logic` component yields a promising candidate in `teambuilder.logic.Logic`.
@@ -48,7 +48,7 @@ According to the sequence diagram you saw earlier (and repeated above for refere
:bulb: **Intellij Tip:** The ['**Search Everywhere**' feature](https://www.jetbrains.com/help/idea/searching-everywhere.html) can be used here. In particular, the '**Find Symbol**' ('Symbol' here refers to methods, variables, classes etc.) variant of that feature is quite useful here as we are looking for a _method_ named `execute`, not simply the text `execute`.