This document contains YOYO's technical test. This is a standard application that provides a simple organizer for the user to store notes and TODOs. You have 48 hours to send your PR and Answers to questions, complete or not.
-
Instructions
- Fork this repository on your own personal GitHub account.
- Download your fork, build this app, and begin making changes.
- When finished, create a Pull Request to merge into YOYO's version, then send an email to @aindong to let him know you're ready for review.
- We will close the pull request.
You may also submit your commits using =git format-patch=, should you prefer it over GitHub PRs.
-
Specifications
- The app consists of two major activities:
- a note-taking activity that accepts a
title
andtext
for one or more notes - a TODO tracking activity that accepts an
entry
, with acheckbox
to show whether this entry has been done or not done
- a note-taking activity that accepts a
- The app should have a user interface that allows for easy access between the note-taking and TODO tracking activities as well as to see their details at a glance.
- The note-taking activity should provide a view for its notes in a reverse-chronological order, with options for updating and deleting old notes.
- The TODO-tracking activity should provide a view for its entries with options for updating and deleting old TODOs.
- The app should make it easy to switch between the note-taking and TODO-tracking activities.
- The app should make it easy to switch a note to a TODO entry, and vice versa.
- The app should consists of both frontend and backend.
- Use
TypeScript
for the frontend and backend - Include Unit/Functional Tests and make sure both has 70% and up test coverage
- Wrap everything on a docker container and make sure we can run both frontend and backend using
docker-compose up
- The app consists of two major activities:
-
Questions
In your PR/patch email, please also answer these following questions:
- What design patterns did you use inside the application?
- How did you manage your states?
- What data protocol did you use to connect both backend and frontend?
- Is this the best way to integrate data?
- If yes, Why?
- If no, Can you suggest more better ways?
- What libraries did you use?
- Why did you use this library?
- Are there other libraries available?
- If yes, what made you choose this library over the others?
- What major challenges did you encounter when making the app?
- If you had more time, what additional features would you like to add?
In addition, you may provide more information in your PR/patch email that you would like us to know.
-
Bonus Questions
- Explain Hoisting to a 5 year old kid.
- Explain Memoization to a 5 year old kid.
-
Notes
- You may use any open source libraries that you think would be useful for completing the test and improving this app.
- You may implement the user interface in any way that you feel may improve the user experience.
- You may use any development tools you have at your disposal to complete this test, so long as the resulting app is a standard JS/NodeJS application that can be built using the standard tooling