We are asking you to build out a sample application using the Github API. The following simulates the kind of requirements that our developers are given - minus wireframes.
- Format
- Search Box
- Input
- Functionality
- Search Box
- Debounces requests to avoid spamming User Search API
- Minimum of 3 characters
- Format
- Normal State
- Displayed below Filter - User Search
- For each Result
- Gravatar Image
- Github Username
- Detail Icon
- Empty State
- Messages
- If the search query returns no results
- Your search returned no results. Please search for another user.
- If the search query returns no results
- Messages
- Normal State
- Functionality
- Profile Icon
- Links to Detail - User view for selected user
- Profile Icon
- Format
- Normal State
- Gravatar Image
- Github Username
- Name
- Company
- Empty State
- Do not display if not returned
- Empty State
- Blog
- Empty State
- Do not display if not returned
- Empty State
- Location
- Empty State
- Do not display if not returned
- Empty State
- Email
- Empty State
- Do not display if not returned
- Email should display as a mailto link
- Empty State
- Bio
- Empty State
- Do not display if not returned
- Empty State
- Account Creation
- Display in human readable format
- Follower List
- Repo List
- Normal State
We ask that you use the same technology that we use on a daily basis. This includes
- React
- JSX
- ES6+
- Bootstrap
- Redux
To get started, you will need to globally install rwb. This is a simple global tool to run and serve this application. Keep in mind this exercise works with v0.0.19 (latest stable since our last tests).
npm install -g rwb
Run an npm install.
npm install
The application is already setup with some basic files and can be run simply with the start script.
npm run start
.
This will serve the application at localhost:3000
.
Please fork our repository and use a feature branch workflow while developing your functionality. When you are ready to submit your work make a pull request against our repository.
We use GitFlow on a daily basis - this allows us to build quality control into our development, QA and deployment process.
We are asking that you use a modified Github Flow - sometimes referred to as a feature branch workflow - methodology instead of GitFlow. Conceptually, GitFlow and Github flow are similar.
We try to follow the Airbnb style guide as much as possible. We don't expect you to strictly adhere to these standards, but they may help provide insight into how our JavaScript is generally structured.
Please feel free to create unit tests - we use Mocha.
We use a modified version of Bootstrap for our styles and have been experimenting with the alpha release of Bootstrap 4.
We rely on Node Sass to compile our stylesheets because of its speed. However, because there is not currently feature parity between Ruby Sass and LibSass not all documented features are supported. Hugo Giraudel's Sass Compatibility project is the best way to identify these differences. @acolson spends way too much time following this.
We loosely follow Hugo Giraudel's Sass Guidelines - particularly his thoughts on code clarity and avoiding nesting selectors unless absolutely necessary.
Our custom styles are written using OOCSS principles - specifically BEM methodology. This promotes a separation of content from context leading to highly reusable styles and hopefully prevents us from using !important
which is the work of the devil.
BEM naming conventions
.block {}
.block__element {}
.block__element--modifier {}
.block--modifier {}
.media {}
.media__img {}
.media__img--rev {}
.media__body {}
BEM naming conventions used in markup
div.media
img.media__img--rev(src='logo.png' alt='Foo Corp logo')
div.media__body
h3.alpha Welcome to Foo Corp
p.lede Foo Corp is the best, seriously!