This document contains LWS's technical exam. 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 Answer the questions, complete or not.
- Fork this repository on your own personal GitHub account.
- Download your fork, build this app, and begin making changes.
- When finished, send an email containing your forked github repository to @aindong to let him know you're ready for review.
- We will close the fork after review.
You may also submit your commits using =git format-patch=, should you prefer it over GitHub PRs.
If you are applying for Backend, Disregard typescript and use pure Laravel.
If you are applying for a Frontend, Disregard the API Task and proceed with frontend only.
If you are applying for Full-Stack, You need to work on both API and Frontend in TypeScript.
- 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 and make sure we can run both frontend and backend easily.
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.
- Explain Hoisting to a 5 year old kid.
- Explain Memoization to a 5 year old kid.
- 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/PHP application that can be built using the standard tooling