diff --git a/.example.client.env b/.example.client.env
new file mode 100644
index 0000000000..78d76e7999
--- /dev/null
+++ b/.example.client.env
@@ -0,0 +1,3 @@
+SERVER_URL=http://localhost:3000
+CLIENT_HOST=0.0.0.0
+CLIENT_PORT=3001
\ No newline at end of file
diff --git a/.example.docker.env b/.example.docker.env
new file mode 100644
index 0000000000..e9c1aa35c9
--- /dev/null
+++ b/.example.docker.env
@@ -0,0 +1,23 @@
+DEVELOPMENT_DB_HOST=db-dev
+DEVELOPMENT_DB_PORT=5432
+DEVELOPMENT_DB_USER=dev_user
+DEVELOPMENT_DB_PASSWORD=dev_password
+DEVELOPMENT_DB_DATABASE=gh_db_dev
+
+TEST_DB_HOST=db-test
+TEST_DB_PORT=5432
+TEST_DB_USER=test_user
+TEST_DB_PASSWORD=test_password
+TEST_DB_DATABASE=gh_db_test
+
+PRODUCTION_DB_HOST=db-prod
+PRODUCTION_DB_PORT=5432
+PRODUCTION_DB_USER=prod_user
+PRODUCTION_DB_PASSWORD=prod_password
+PRODUCTION_DB_DATABASE=gh_db_prod
+
+E2E_DB_HOST=db-e2e
+E2E_DB_PORT=5432
+E2E_DB_USER=e2e_user
+E2E_DB_PASSWORD=e2e_password
+E2E_DB_DATABASE=gh_db_e2e
\ No newline at end of file
diff --git a/.example.server.env b/.example.server.env
new file mode 100644
index 0000000000..f7da4b2947
--- /dev/null
+++ b/.example.server.env
@@ -0,0 +1,26 @@
+SERVER_HOST=http://localhost
+SERVER_PORT=3000
+
+DEVELOPMENT_DB_HOST=db-dev
+DEVELOPMENT_DB_PORT=5432
+DEVELOPMENT_DB_USER=dev_user
+DEVELOPMENT_DB_PASSWORD=dev_password
+DEVELOPMENT_DB_DATABASE=gh_db_dev
+
+TEST_DB_HOST=db-test
+TEST_DB_PORT=5432
+TEST_DB_USER=test_user
+TEST_DB_PASSWORD=test_password
+TEST_DB_DATABASE=gh_db_test
+
+PRODUCTION_DB_HOST=db-prod
+PRODUCTION_DB_PORT=5432
+PRODUCTION_DB_USER=prod_user
+PRODUCTION_DB_PASSWORD=prod_password
+PRODUCTION_DB_DATABASE=gh_db_prod
+
+E2E_DB_HOST=db-e2e
+E2E_DB_PORT=5432
+E2E_DB_USER=e2e_user
+E2E_DB_PASSWORD=e2e_password
+E2E_DB_DATABASE=gh_db_e2e
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..97aca2ea1c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.env
+node_modules
\ No newline at end of file
diff --git a/README.md b/README.md
index 3f1e493650..ba4bb5fb9d 100644
--- a/README.md
+++ b/README.md
@@ -20,3 +20,69 @@ Alguns requisitos:
Quando terminar, faça um Pull Request neste repo e avise-nos por email.
**IMPORTANTE:** se você não conseguir finalizar o teste, por favor nos diga o motivo e descreva quais foram as suas dificuldades. Você pode também sugerir uma outra abordagem para avaliarmos seus skills técnicos, vender seu peixe, mostrar-nos do que é capaz.
+
+# Livesite
+
+https://gmtc.com.br
+
+# Stack utilizada
+
+* Client: Nuxt.js
+* Server: Express.js
+* Database: PostgreSQL
+* Testes: Mocha + Chai + Cypress
+
+# Inicializar projeto localmente
+
+**Requisitos:** docker e docker-compose instalados
+
+- Carregar as envs de exemplo
+
+```sh
+sh load-envs.sh
+```
+
+## Modo dev
+
+```sh
+docker-compose -f docker-compose-dev.yml up
+```
+
+## Modo test
+
+```sh
+docker-compose -f docker-compose-test.yml up
+```
+
+## Modo production
+
+```sh
+docker-compose -f docker-compose-build.yml up
+docker-compose -f docker-compose-prod.yml up
+```
+
+## Testes e2e com cypress
+
+- Instalar cypress na pasta raiz do projeto
+
+```sh
+npm i
+```
+
+- Ligar projeto com:
+
+```sh
+docker-compose -f docker-compose-e2e.yml up -d && npx cypress open
+```
+
+ou
+
+```sh
+docker-compose -f docker-compose-e2e.yml up
+```
+
+e em outro terminal
+
+```sh
+npx cypress open
+```
\ No newline at end of file
diff --git a/client/.editorconfig b/client/.editorconfig
new file mode 100644
index 0000000000..5d12634847
--- /dev/null
+++ b/client/.editorconfig
@@ -0,0 +1,13 @@
+# editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/client/.gitignore b/client/.gitignore
new file mode 100644
index 0000000000..e8f682bafe
--- /dev/null
+++ b/client/.gitignore
@@ -0,0 +1,90 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Node template
+# Logs
+/logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# Nuxt generate
+dist
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+# IDE / Editor
+.idea
+
+# Service worker
+sw.*
+
+# macOS
+.DS_Store
+
+# Vim swap files
+*.swp
diff --git a/client/README.md b/client/README.md
new file mode 100644
index 0000000000..5b8b8b49cd
--- /dev/null
+++ b/client/README.md
@@ -0,0 +1,69 @@
+# dev-hiring-challenge-client
+
+## Build Setup
+
+```bash
+# install dependencies
+$ npm install
+
+# serve with hot reload at localhost:3000
+$ npm run dev
+
+# build for production and launch server
+$ npm run build
+$ npm run start
+
+# generate static project
+$ npm run generate
+```
+
+For detailed explanation on how things work, check out the [documentation](https://nuxtjs.org).
+
+## Special Directories
+
+You can create the following extra directories, some of which have special behaviors. Only `pages` is required; you can delete them if you don't want to use their functionality.
+
+### `assets`
+
+The assets directory contains your uncompiled assets such as Stylus or Sass files, images, or fonts.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/assets).
+
+### `components`
+
+The components directory contains your Vue.js components. Components make up the different parts of your page and can be reused and imported into your pages, layouts and even other components.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/components).
+
+### `layouts`
+
+Layouts are a great help when you want to change the look and feel of your Nuxt app, whether you want to include a sidebar or have distinct layouts for mobile and desktop.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/layouts).
+
+
+### `pages`
+
+This directory contains your application views and routes. Nuxt will read all the `*.vue` files inside this directory and setup Vue Router automatically.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/get-started/routing).
+
+### `plugins`
+
+The plugins directory contains JavaScript plugins that you want to run before instantiating the root Vue.js Application. This is the place to add Vue plugins and to inject functions or constants. Every time you need to use `Vue.use()`, you should create a file in `plugins/` and add its path to plugins in `nuxt.config.js`.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/plugins).
+
+### `static`
+
+This directory contains your static files. Each file inside this directory is mapped to `/`.
+
+Example: `/static/robots.txt` is mapped as `/robots.txt`.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/static).
+
+### `store`
+
+This directory contains your Vuex store files. Creating a file in this directory automatically activates Vuex.
+
+More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/store).
diff --git a/client/assets/scss/colors.scss b/client/assets/scss/colors.scss
new file mode 100644
index 0000000000..ecb7cb6791
--- /dev/null
+++ b/client/assets/scss/colors.scss
@@ -0,0 +1,5 @@
+$blue: #3B65FC;
+$light-gray: #f8faff;
+$gray: #e5eaf8;
+$dark-gray: #aaaaaa;
+$darker-gray: #636363;
\ No newline at end of file
diff --git a/client/assets/scss/fonts.scss b/client/assets/scss/fonts.scss
new file mode 100644
index 0000000000..191dd0489f
--- /dev/null
+++ b/client/assets/scss/fonts.scss
@@ -0,0 +1 @@
+@import url('https://fonts.googleapis.com/css2?family=Sora');
\ No newline at end of file
diff --git a/client/assets/scss/index.scss b/client/assets/scss/index.scss
new file mode 100644
index 0000000000..e72a50f1fc
--- /dev/null
+++ b/client/assets/scss/index.scss
@@ -0,0 +1,17 @@
+@import 'mixins.scss';
+@import 'colors.scss';
+@import 'fonts.scss';
+
+body {
+ margin: 0px;
+}
+
+a {
+ color: black;
+ text-decoration: none;
+ font-size: 1rem;
+}
+
+.loading {
+ @include loading-component;
+}
\ No newline at end of file
diff --git a/client/assets/scss/mixins.scss b/client/assets/scss/mixins.scss
new file mode 100644
index 0000000000..85563127fa
--- /dev/null
+++ b/client/assets/scss/mixins.scss
@@ -0,0 +1,34 @@
+@mixin loading-component {
+ display: flex;
+ .loading-text {
+ margin-right: 1rem;
+ }
+ .loader {
+ width: 1rem;
+ height: 1rem;
+ border: 2px solid black;
+ border-top-color: lightgray;
+ border-radius: 50%;
+ animation: rotate ease 1s infinite;
+ }
+ @keyframes rotate {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+}
+
+@mixin button-component {
+ background-color: $blue;
+ height: 3rem;
+ border: 1px solid $gray;
+ border-radius: .3rem;
+ color: white;
+ transition: .1s;
+ font-size: 1rem;
+ &:hover {
+ cursor: pointer;
+ background-color: lighten($blue, 10%);
+ font-size: 1.02rem;
+ }
+}
\ No newline at end of file
diff --git a/client/components/RepositoryCard.vue b/client/components/RepositoryCard.vue
new file mode 100644
index 0000000000..22ed8560f8
--- /dev/null
+++ b/client/components/RepositoryCard.vue
@@ -0,0 +1,184 @@
+
+