In general, this open-ended project will involve working on an app that has a concept of "boards" and "board items". It could be a to-do list, or it could be something else; you may decide the purpose/function of this application. We are excited to see what you think of. Some examples of things in similar categories are:
- To-do list (you are not allowed to do this one)
- Brainstorm board
- Kanban board
- Notetaking apps
- Connecting to a backend with Firebase
- Modeling your data
- Using React
- Only use function components (they were not taught on learn.co but they are what are used normally in practice). They are very similar to normal classes
- You will want to look into how hooks are used
In the requirements below, the terms are quite general, since they depend on exactly what you planned out for your app.
- A user should be able to create a board/list. Conceptually, a board/list would contain many items that a user can add.
- For each board, a user should be able to add board items/tasks.
- Board items should have:
- A due date
- A title
- A boolean flag for completd or not completed
- An assignee (someone it is assigned to). It can be any random string that the user wants.
- Anything else that you decide
- Theme and framework: Use one of
React-Bootstrap, Ant
Design, Material Bootstrap, Material UI (not recommended).
Install the package using
npm
oryarn
. - Routing: Use react-router to navigate to different pages.
- Sorting within a given board. A user should be able to sort by title and due date, both ascending and descending.
- Completed tasks. Completed tasks should not be shown on the main boards. When a task is marked completed, you may decide how it will be shown, but it should be separated. For example, you could have a special board for completed tasks, or you could make a completely separate page that loads all the completed tasks.
- Navbar: There should be a navbar that has at least: "home page" (board overview), "about", and (optionally, see previous point) "completed."
- Editing an existing task: A user should be able to edit and save any properties of a task, such as title and due dates.
- Deletion of board and board item: A user should be able to delete any board or board item.
- Toggle display type: There should be a button that allows users to toggle between "list" and "board" views of all the boards. Hint: keep a state variable on the container that contains two possible values. Here is an example of what we mean by board and list. List-view only has to be read-only
Two minute demo of:
- Creation and reading of a board in Firebase
- Creation and reading of a board item in Firebase
The user should be able to fill out forms to create a board and board item and have it show up in the UI, no matter how it looks. No styling is required (I encourage you to worry about styling later).
Two minute demo of:
- A working navbar with React routing
- Editing an existing board item in Firebase.
Completion of rest of the features.
Below, you'll find additional resources not directly related to the requirements of the project.
I highly recommend that you write out your "schema" before starting. A schema means a list of keys (fields) that are present on each type of object. What keys can a board have? What keys can a board item have? Any other objects that you need to keep track of?
There are tons of examples of such apps, even just a click away from here. You may want to look into any of the following products or terms for inspiration.
- GitHub Boards
- Kanban boards
- Wunderlist
- Trello
- Asana
I'm intentionally not including any pictures as examples, I want you to use your imagination and look around for inspiration.
- Please read this documentation
- Please read the React documentation for function components
- Please read the Firebase documentation
- Look at lots of example code when writing your app
- Work together with your partner, no one should be asymmetrically writing all of the code.
- Add users and registration using Firebase. See Firebase Auth. A user should be able to login, logout, access their own board, etc.
- Allow users to upload at least one image associated with an item.
- Allow users to rearrange the board via drag and drop (and persist the order in the backend!). Take a look at the react-dnd library.