This challenge is designed to assess the ability of a front-end candidate to solve real-world problems using our current technology stack. While the difficulties arising during this project are real, the project itself is a mock and will not be used by us for business purposes.
- Fork this repository on github.
- Complete the project as described below within your fork.
- Keep the commit history - don't squash.
- Push all of your changes to your fork on github and submit a pull request to this repository.
Make a simplified slack clone.
Structure:
- sidebar on the left:
- list of channels
- add / remove button
- list of users - direct messages
- chat window on the right
- list of messages
- each message
- avatar
- username
- timestamp
- message
- edit / remove button
- each message
- comment box
- use placeholders (both UI elements and actions / reducers) in place of features you didn't have time to implement - overall code organization and project structure are more important than implementation details;
- simplistic design will be completely acceptable - don't waste much time on it
- mock channels and users
- mock short history of conversations in channels / direct messages
- store everything in memory only (no need to persist data), but mock ajax calls and make these calls asyncrounous
- map as many app states as possible to routes to promote sharing (e.g. have permalinks for each message)
- strive for good commit messages
- npm as package manager
- npm scripts as automation tool
- webpack as bundler (+ loaders & plugins)
- babel for ES6/7 to JS compilation
- react (+ jsx)
- redux (+ middleware)
- react-router
- lodash (lodash/fp is encouraged)
- immutable.js or seamless-immutable
- mocha + chai + enzyme for testing
Remarks:
- Use es6 or later, do not use es5. Use webpack babel loader.
- Use promises for ajax. No need to implement backend - mock response data and simulate latency (e.g. with
setTimeout
) - Do not use jquery.
- Use vanilla css or sass (complile to css via webpack sass loader).
- Use airbnb stylesguides for ES6, react, and css
- Code organization
- Code readability (including comments)
- Adherence to the tech stack described above
- Commit history - structure and quality
- Completeness
- Test coverage