---
# System prepended metadata

title: Challenge Front-end - Juntos Somos Mais

---


# Challenge Front-end - Juntos Somos Mais

## Luiz Ortega

- [Link do teste](https://juntos-somos-mais-2022.vercel.app/)
- [LinkedIn](https://www.linkedin.com/in/luiz-ortega-b23b04194/) 
- [Github](https://github.com/luiz-ortega)

## Aplicação - 4/5 _(2)_

A aplicação está funcionando idealmente, com combinação de filtros por estado, excelente ideia incluir o filtro por ordenação.

Pontos positivos:

- Página 404 funcionando;
- A página interna foi criada seguindo a ideia do header azul do card do user. Ponto positivo para o mapa que acompanha o dark mode do site!
- Paginação funcionando;
- O desenvolvedor se preocupou em inserir um tema em dark mode, que está bem bonito e fluído;
- Existem feedbacks de interação em grande parte dos componentes, o que é bom para a UX.

Oportunidades:

- A regra da busca está buscando por ocorrências no meio do nome e sobrenome para o que foi digitado. Ex: se o usuário buscar por `ar` será retornado **Ar**mando da Cruz, Alda B**ar**bosa;
- Paginação funciona corretamente, porém os intervalos de página não são dinâmicos e são travados de 5 em 5 páginas, ou seja, caso o usuário chegue na página 5, é preciso clicar na seta para renderizar as páginas de 6 a 10;
- Filtros de estado funcionam como deveriam, mas existe um delay após o clique na opção, que causa uma sensação de quebra.


## Arquitetura/Stack - 5/5 (2)

- Typescript
- NextJs
- Jest(testing-library)
- Mock Service Worker (MSW)
- Storybook
- Styled-componentes
- SWR
- Leaflet
- Axios
- Prettier
- Eslint
- react-hot-toast

Pontos positivos:

- Criou a documentação no Storybook que funcionou ao rodar localmente;
- Arquitetura de pastas intuitiva e bem separada;
- Usou bibliotecas que prezam pela qualidade de código;
- Excelente uso do generic types.

Oportunidades:

- Algumas funções estavam espalhadas pelo código. Neste caso, há a oportunidade de criar uma pasta helpers no src para centralizar essas funções;
- Houve arquivo que ficou um pouco extenso porque as tipagens estavam no mesmo arquivo. Talvez seria interessante criar um `component.type.ts` para exportar toda tipagem daquele contexto;
- Criou arquivos de index para exportar componentes, mas não parece ter utilizado muito bem.


## Documentação - 3/5

Pontos positivos:

- Doc do README funcional, tanto para rodar o Storybook quanto para a aplicação;

Oportunidades:

- Seria interessante subir a aplicação do Storybook online e disponibilizar um link para não haver a necessidade de ter que rodar o comando localmente;
- Apesar de ter documentado os passos para rodar as aplicações e informar as stacks que utilizou, talvez pudesse citar as decisões pessoais de cada stack e o quê o desafio proporcionou de experiências;
- Faltou mencionar o nome de algumas bibliotecas bem interessantes usadas no projeto.


## UI/UX - 4/5 _(2)_


Pontos positivos:

- O candidato não se focou em seguir o Figma do projeto, apesar disso, o layout e a interface ficaram bons tendo como resultado final um site bonito e agradável de utilizar;
- A página interna ficou muito bonita também;
- Usou a opção de tema escuro para o projeto, inclusive o efeito é aplicado ao mapa da página interna;
- Possui feedbacks de interação em grande parte da aplicação;
- Inseriu um loader no topo da tela, trazendo feedback adequado durante as transições de tela;
- Inseriu placeloader em ambas as telas;
- Criou um tema com variáveis de cor, tipografia e espaçamentos.

Oportunidades:

- Seria legal adicionar a opção de escolher a quantidade de usuários exibidos por página;
- Criação de feedback para o cenário onde não há nenhum card de usuário;
- Um ponto interessante seria dar um feedback para o usuário para casos onde o mesmo tenta fazer uma busca sem escrever nada; 
- Uma melhoria de UX interessante seria ter um feedback de quais filtros estão aplicados e uma opção de remover os filtros. Essa oportunidade foi evidenciada ao observar a seguinte situação: Ao filtrar por um dos últimos estados da lista, o qual fica fora da visão, o usuário volta para o topo da página, logo ele pode acabar esquecendo o que foi selecionado previamente.


## Responsividade - 3/5

Pontos positivos:

- A aplicação é responsiva e possui quebras coerentes.

Oportunidades:

- Não fez uso do PWA e nem dos service workers;
- Ao usar o site na versão tablet (768px) e clicar no link "Mostrar todos" (filtro de estados), é causado um deslocamento de espaço à direita afastando os cards.

## Componentização - 5/5

Foi utilizado `styled-component` para estilização dos componentes e `Storybook` como documentação dos mesmos.

Pontos positivos:

- Estilização separada da lógica do componente.

Oportunidades:

- Algumas funções/tipagens poderiam ficar em arquivos separados, dessa forma, teria componentes mais limpos e legíveis.


## CSS - 5/5 _(2)_

Pontos positivos:

- Criação de um sistema de tema com a possibilidade de adicionar outros novos, considerando cores, espaçamentos e variáveis;
- Foi feito o uso do `flexbox` e do `grid`.

Oportunidades:

- Fez o uso das tags HTML como seletor para aplicar o css, no qual não é uma boa prática.

## JavaScript - 4/5 _(2)_

Pontos positivos:

- Desmostrou domínio no JavaScript/TypeScript.

Oportunidades:

- Não foi usado o conceito de imutabilidade em alguns lugares. Poderia ter sido usado o conceito de função fábrica com a finalidade de reutilizar código.

## HTML - 4/5 _(2)_

### Métricas Lighthouse - Listagem dos usuários:
- **Desktop**:
    - Accessibility: 75
    - Best Practices: 92
    - SEO: 90
- **Mobile**:
    - Accessibility: 75
    - Best Practices: 92
    - SEO: 92

### Métricas Lighthouse - Detalhes do usuário:
- **Desktop**:
    - Accessibility: 86
    - Best Practices: 92
    - SEO: 90
- **Mobile**:
    - Accessibility: 86
    - Best Practices: 75
    - SEO: 92

Pontos positivos:

- Se preocupou em usar as tags semânticas do HTML5;
- Fez o uso do `alt` nas imagens.

Oportunidades:

- Faltou a definição de alguns atributos semânticos;
- Talvez tenha invertido a ordem semântica dos componentents ao fazer um wrapper. Por exemplo, um wrapper com a tag `footer` e o componente de `Footer` é uma `div`.

## Performance - 4/5

### Métricas Lighthouse - Listagem dos usuários:
- **Desktop**:
    - Performance: 69
- **Mobile**:
    - Performance: 53

### Métricas Lighthouse - Detalhes do usuário:
- **Desktop**:
    - Performance: 68
- **Mobile**:
    - Performance: 51

Pontos positivos:

- O uso de funcionalidades visando a performance da aplicação.

## Testes - 5/5 _(2)_

Pontos positivos:

- Foi usado o Jest (testing-lirabry);
- Adicionado vários cenários de testes.

Oportunidades:

- Faltou definir a pasta do `coverage` no arquivo do `.gitignore`.

## Git - x/5

Pontos positivos:

- ...

Oportunidades:

- Adição do `.next` no `.gitignore`.

## BFF - x/5

Pontos positivos:

- As informações foram tratadas usando a técnica BFF aproveitando bem a arquitetura do NextJS.

---

### Média - x/5

Resumo final e média do teste.

- _Soma de todos os itens_
- _Items com (2) possuem peso em dobro_
- _Dividir tudo por 20_