- Nodejs >= 8.0v
- npm
- Clone the repository and navigate to the project root directory using your command prompt or terminal (bash shell).
- Run
npm install
to install the node modules. - Run
npm start
to run the app in the development mode. - Open http://localhost:3000 to view it in the browser.
- From command prompt, run
npm test
in the project root directory. This launches the test runner in the interactive watch mode
You can click here to visit the site
-
- Choice : I separated the components into presentational components (how things look) and container components (how things work).
- Reason : This is to enhance unit testing since concerns are separated.
-
- Choice : I used debounce in the search field to handle text change
- Reason : This is to ensure that the web api doesn't get called too frequently.
-
- Choice : I implemented search suggestion functionality.
- Reason : This is to enhance user experience (UX).
-
- Choice : Mobile first design. The applicaiton is responsive.
- Reason : The percentage of mobile users is always higher.
-
- Choice : Centralization of the configuration.
- Reason : This is to ensure one source of truth for the applicatio configuration.
-
- Choice : Always grouped the css, container, component, test of a particular component in one folder.
- Reason : This is for easy module referencing and confusion reduction especially when it comes to identifying what asset belongs to which component.
-
- Choice : I used only frontend framework
- Reason : There is no API Key to warrant using backend technology for security reasons since the web API is open.
-
- Choice : I used reactjs
- Reason : It is open source and simplifies creating of reusable components.
-
- Choice : I did not use redux or any other state managment library.
- Reason : This is a small application and sharing of state between components that are far apart in the component tree is not experienced. Again I wanted to keep things simple.