A test API, a pre-configured build system, and a series of tasks to complete.
Please make a fork of this project for your work.
Each commit you make should relate to a single task. A more complex task may have many commits; this is up to you.
The app runs on Windows, macOS, and Linux under nodejs >= 8.11.3.
It can be built on the command line:
| What | How |
|---|---|
| set up | npm i |
| run api and dev server | npm start |
| run unit tests | npm t |
We'll ask you to implement features task-by-task, but here is an overview of the full test API that you'll be building against:
The API runs on http://localhost:4000, the app runs on http://localhost:8080
| Action | Endpoint |
|---|---|
| GET | /api/task |
| GET | /api/task/<task.id> |
| POST | /api/task |
| PATCH | /api/task/<task.id> |
| DELETE | /api/task/<task.id> |
The build system is webpack-based (https://webpack.js.org/concepts) and includes support for SCSS (https://sass-lang.com/documentation/file.SASS_REFERENCE.html) and Jest (https://jestjs.io/) for any tests you may wish to write, but you are free to complete these tasks however you like.
| # | Description |
|---|---|
| 1 | Install dependencies, run the app and api, and have a play around |
| 2 | GET the list of Tasks from /api/task and render task titles to the page |
| 3 | Basing your UI on this wireframe sketch wireframe sketch, add an indication of the importance of each task using the importance property (0 = high, 1 = medium, 2 = low), and a placeholder element (perhaps a checkbox or button) to change the isDone property - you do not need to implement that functionality yet. |
| 4 | Add the Google Fonts webfont Roboto Light |
| 5 | Run an accessibility test on your prototype - you can run an audit using Chrome Lighthouse in Chrome devtools (https://developers.google.com/web/tools/lighthouse/#devtools) - and make any necessary improvements. Your prototype should be AA compliant, and support keyboard input |
| 6 | There is an artificial 500ms latency on all GET and POST API requests. Improve the user experience by adding an indication of loading state to the UI |
| 7 | Implement the mechanism to mark a Task as done on the UI and PATCH /api/task/<task.id> so a change to the isDone property of a task persists on page reload |
| 8 | Add a form to create new tasks with title and importance level (values 0, 1, or 2) that POSTs to /api/task and updates the UI with the task list. Both fields are required and should be validated on the client-side |
| 9 | Add a control to allow a user to delete a Task, making a DELETE request to /api/task/<task.id> and updating the UI; give consideration to the UI in the event that all tasks are deleted |