An interview project to chat about items.
Hey Phuc 👋
Thanks for taking time to show us your work. We know interviewing is a commitment, and we're excited to see what you can do! Please feel free to reach out to if you have any questions. If you prefer Slack, we can also invite you as a guest to a private channel. Let's get to it!
Our company has been considered a "storage" company for most of its existence. As may seem obvious by now, this all changes with our marketplace features. Core marketplace features include the ability for members to share items, and rent them out to the community. This means a new revenue stream for our existing storage customers, the company, and future promoters. Sounds pretty epic, right? 💸
Ok. So what does that mean for us? Well, one problem we're quickly running into, is the lack of interactivity in our current product. Our rentals marketplace launched with a super-lightweight reputation-system (i.e. ratings) and basically little else to allow users to communicate (e.g. reviews, comments, etc.). This puts our support team in a tough place, since most of these communications will go through them.
Of course, we hope to quickly iterate here, but it's going to take some work. One obvious win is establishing lateral accountability between users, by affording the ability to talk with each other. To illustrate this concept, we think it would be a fun proof-of-concept to build a simple chat UI, based around items. Here's what we're thinking:
At a high-level, this project is broken up into two components (a) a simple API server and (b) a user interface. Each component has it's own requirements, listed below:
The API Server must be written in Python or Go, though you are free to use any web framework you like. The API must expose the following functionality to its clients:
- The ability to fetch a list of items (see Assets below)
- The ability to fetch (or create) a conversation around an item
- The ability to publish a comment to a conversation
- The ability to subscribe to a conversation, and receive new comments in real-time
The User Interface must be written in ReactJS, though you are free to use any composition framework you prefer (e.g. Redux). The User Interface needs to support the following functions for users:
- The ability to view a list of items
- The ability to view (or start) a conversation on an item
- The ability to post a comment on an item
- The ability to see new comments arrive in real-time
Completion of these requirements are sufficient for an MVP of the project.
Delivering this project can be as simple as submitting a pull-request to this repository. You may (and are encouraged to) submit your pull-request early, and leverage the conversation features of Github to ask questions and build out the MVP. Please make sure to include instructions on how to bootstrap your API and UI so that we may test it upon project end.
If you finish with time to spare, it certainly will not hurt to add your own level of polish to the project. Accounts, animations, and other aspects that might be in a release candidate are, notably, not required for this project. Feel free to balance your time and effort with a deliverable that adequetely satisfies the requirements. As always, we're here to answer questions.
Included in this repository is a pruned JSON dump of some public items you can find by visiting http://app.beomni.com. These items can serve as the static basis of your API's item list endpoint. There's far more information on these items than you need (i.e. the photo and the name), but it's there to show you how much you have to play with. Enjoy!
https://help.github.com/articles/authorizing-oauth-apps/#repositories
http://anandmanisankar.com/posts/docker-container-nginx-node-redis-example/