Midterm Project - Digital Address Book
Your Midterm and Final project will be creating a “Digital Address Book” in React. For the Midterm, we will be focusing on the basics of the application, then expanding the functionality for the Final Project.
You can find an example of the midterm here: https://midterm.ci256.cloud
Grading Rubric
Your Midterm will be graded on the following categories:
Percentage | Item | Description |
---|---|---|
10% | Functionality | Does it run? |
10% | Git | Application is stored in class Git server https://git.ci256.cloud |
20% | Contact List | Display a list of all available contacts. Scrolls if needed |
20% | Search Contacts | Ability to search contact list by name |
20% | View Pane | When clicking a contact name, the view page shows all contact info, including any extra fields. |
20% | Add New Users | Ability to add additional users to the list. These users are not expected to persist across page loads. |
Webpage Styling will NOT be graded on the midterm, but will be on the final.
Application Requirements
The application requirements for the midterm:
- A functional React website (must compile/run!)
- The midterm project must be stored in the class git repo
- Git cheatsheet available here: https://docs.ci256.cloud/git
- Please ask me if you have any questions! I’m happy to help.
- I take regular backups of the git server if your repo gets into a bad state.
- Loading “Address book data” from a static JSON file in your repo
- This can be downloaded from https://files.ci256.cloud/2025/contacts.ts
- Feel free to customize the list if you want, but we’ll be switching to API data later.
- A sidebar with a list of contacts
- The sidebar should contain the ability to search the contact list
- Only the names of the contacts must be searched
- The search should be case-insensitive
- The search should be “if first or last name includes query” (ex, not “starts with”)
- The sidebar should contain the ability to search the contact list
- A viewing pane for contact details
- When a name is clicked in the sidebar, the viewing pane should be updated with that contact’s information
Data Format
A contact will have this data format:
export type Contact = {
id: number;
firstName: string;
lastName: string;
email: string;
phone: string;
extra: Record<string, string>;
};
The extra
field is an Object of key/value pairs which can be anything, allowing the user to add any additional fields that may not exist on all users. For example:
{
firstName: "Zendaya",
// ...
extra: {
address: "123 Euphoria Ave, Los Angeles, CA 90210",
birthday: "09/01/1996",
department: "Drama"
}
},
{
firstName: "Elon",
// ...
extra: {
address: "42 Innovation Way, Austin, TX 78701",
company: "SpaceX",
title: "CEO"
}
},
Zendaya and Elon both have an address field defined, but Zendaya has birthday
and department
where elon has company
and title
. You must display both the key (“company”) and the value (“SpaceX”) when displaying Elon’s entry.