Code Challenge

A tarefa consiste em clonar o frontend (ReactJS) "Dados Básicos" e "Localização" de preparovc.com/perfil; O candidato deve desenvolver um backend (NodeJS) capaz de intermediar as requisições entre frontend e MongoDB; Vale notar que para o processo de frontend apenas o próprio deve ser desenvolvido.

Páginas a serem clonadas

  • login/cadastro (não precisa ser visualmente fiel ao login/cadastro da Preparo);
  • Início (no caso de haver instruções específicas que o candidato considere importantes);
  • Dados básicos;
  • Localização;

O que é esperado

  • Pelo menos 1 projeto frontend utilizando ReactJS com as páginas a serem clonadas;
  • O layout das páginas de login e cadastro não precisam ser fiéis ao original;
  • O layout das páginas de perfil precisam ser fiéis ao original (considerando cores, posição dos elementos, imagens, funcionalidades e desconsiderando ícones e tipografia);
  • O projeto frontend pode acessar Firebase Auth diretamente (sem necessidade de um backend) sem quaisquer penalidades diretas;
  • O projeto frontend pode enviar e receber dados do Firebase Firestore e Firebase Storage diretamente (mas pode ser intermediado por um backend se o candidato assim preferir);
  • O projeto frontend não pode enviar ou receber dados do MongoDB diretamente (é necessária a construção de um backend para isso);
  • Se o candidato preferir, pode ser feito um projeto frontend para a versão Firestore/Storage e outro para a versão MongoDB/Storage, mas ambos precisam ser indistintos visualmente ao serem acessados pelo navegador (sem inspecionar o código, o usuário não deve ser capaz de saber qual banco de dados está sendo utilizado);
  • Pelo menos 1 projeto backend para intermediar o frontend e o MongoDB;

O que será avaliado

- Clareza do código;
- Boas práticas de programação (indentação, acoplamento, nomes de variáveis etc.);
- Bom senso ao seguir instruções;

Cadastro

  • O usuário deve ser capaz de criar uma conta (utilizando Firebase Auth);
  • Caso o usuário já possua uma conta, ele pode facilmente navegar para a página de login;

Login

  • O usuário deve ser capaz de fazer login na plataforma utilizando sua conta criada anteriormente;
  • O usuário deve ser capaz de facilmente navegar para a página de cadastro caso ainda não possua uma conta;

Dados Básicos

  • O usuário precisa ser capaz de salvar/atualizar suas informações (inclusive email e foto de perfil);
  • O layout da página deve ser fiel, na medida do possível, ao da página original. A tipografia e os ícones podem ser arbitrários desde que sejam adequados ao contexto;

Localização

  • O usuário precisa ser capaz de atualizar suas informações de localização;

Algumas considerações sobre a conexão com os bancos de dados

  • Fica a critério do candidato escolher como organizar a estrutura do banco de dados (Firestore e MongoDB);
  • É esperado que o banco de dados inicie vazio;
  • O candidato pode optar por utilizar MongoDB localmente ou utilizar a hospedagem MongoDB Atlas;
  • Se o banco de dados MongoDB for hospedado no MongoDB Atlas, a equipe da Preparo deve ter acesso para leitura e escrita;
  • A equipe da Preparo deve ter acesso ao projeto do Firebase;

Acesso aos projetos

Para dar acesso aos projetos, convide tech@preparovc.com para participar do projeto privado no Github, Firebase e MongoDB Atlas (se necessário). Para o Firebase, permisão de editor é suficiente. Por fim, além de dar acesso aos projetos, preencha este formulário.

FAQ

1. É necessário armazenar imagens no Firebase Storage ou pode ser armazenado localmente?
É necessário usar o Firebase Storage para armazenar imagens.

2. É necessário esconder as variáveis de ambiente no .gitignore?
Por questões de simplificação, não é necessário esconder as variáveis de ambiente no .gitignore.

3. Pode usar pacotes como express para o desenvolvimento do backend?
Sim, é permitido usar pacotes como express, mongoose, morgan e/ou outros que o candidato achar necessário para o desenvolvimento do backend.

4. Estou fazendo o processo de frontend, devo fazer todo o challenge?
Não! Caso esteja realizando o processo de frontend, apenas essa parte deve ser realizada.