This is our programming exercise. Our goal is to evaluate your programming skills level and then make an interview with better information about you. After you open a pull request to the master
branch in your private repository, we will:
- Do your code review
- Share our evaluation based on the list below
- Invite you to an interview
We want to evaluate your ability to deliver clean code with sufficient documentation for other developers to understand what you did and actively contribute to the project.
README.md
is well written, with the instructions needed to run the application, etc.- The code is well written, clean and cohesive.
- Implementation of the solution is working as expected.
- There are well written automated tests (i.e., the unit and integration tests cover the expected behavior).
- There is linter/static code analysis.
For back-end exercises, we will also evaluate important aspects for this area.
- RESTful API design is implemented, correctly using the
HTTP
verbs and the properStatus Code
. - An API documentation is available by an expressive and maintainable format, for its clients, e.g., Postman.
For front-end exercises, we will also evaluate important aspects for this area.
- There is good usage of Javascript, HTML5 and CSS3.
- The screens were implemented exactly as it is in the wireframes provided, e.g., the position of the elements on the screen.
You may choose the programming language of your preference.
We want you to experience how we work on a daily basis. That's why we ask you to use a standard gitflow as follows below.
- Create a
README.md
file describing how to configure your project, containing the commands that must be executed to run the software and the tests. - If you have made use of any Linter (esling, rubycop, creed, etc.), send the file together with the project.
- Open a single pull request to the
master
branch of the private repository that we have invited you to contribute with all the code of the exercise.
GitHub is a social network of programmers that has an interesting functionality that allows you to "star" other users repositories. The users activate that just by pressing a button. But it has some limitations when we consider GitHub heavy users.
You are an active GitHub user, who is always looking for new projects and enjoying those who are interesting. You would like to be able to add a label or tag to a repository so that it can be found later. For example, you've found a repository called react
and you would like to add javascript
and frontend
tags to it. Because GitHub does not have this functionality, you want to build a simple system that can help with this task.
- Retrieve starred repositories of a user's GitHub profile.
- Manage retrieved repositories tags (i.e., add, edit, delete).
- Filter repositories by tags.
- Suggestion of tags for repositories.
Story 1: Obtain starred repositories
As a GitHub user
I want to provide my username
So that I can see all repositories that I've starred
Requirements
- You should get starred repositories using the GitHub Public API.
- The information that must be retrieved is: repository ID, repository name, description, HTTP URL, and language.
Story 2: Add tags to repositories
As a GitHub user
I want to be able to add tags to repositories that I've starred
So that I can easily find them later by tags
Requirements
- A repository can not have duplicated tags.
Story 3: Search repositories by tags
As a GitHub user
I want to be able to search by a specific tag
So that I can see my starred repositories that I've added this tag
Requirements
- The search field should work for queries with strings in half (e.g., by typing "doc", the "docker" and "ex_doc" repositories must be returned).
In order to implement the user stories listed above, please, choose one of the following instructions: back-end, or front-end. If you want to make both, we will consider this an extra point and effort, but it is not mandatory.
- Your REST API must be implemented using JSON.
- Each action must have its specific route respecting the convention of
http verb
andstatus code
. - Repositories and their tags must be persisted at a local database.
- Using Docker to configure the environment is recommended, but not mandatory.
- The user interfaces (UI) must follow the design provided below:
- Repositories and their tags must be persisted in the user's local storage.