Skip to content

jpsaiago/challenge-charlie

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forecasty

☁️ Previsão do tempo dinâmica e com um visual agradável ☁️

Captura de tela do aplicativo funcionando

React Typescript Zustand TailwindCSS Docker Babel
Headless UI ESLint Immer Webpack Jest Nginx

Esse é um microsite de previsão do tempo construído com React, que automaticamente pega a localização do usuário e exibe a condição atual do tempo e a previsão para os próximos dois dias na localidade através da API da OpenWeather. Além disso, é possível verificar a previsão de outros lugares do mundo usando a barra de pesquisa.


📖 Índice

  1. Funcionalidades
  2. Escolhas no desenvolvimento
    1. Typescript
    2. Layout
    3. Zustand
    4. Immer
    5. TailwindCSS
    6. Observações
  3. Instalação
  4. Execução
  5. Testes
  6. To-Do

🌟 Funcionalidades

  • 🧭 Geolocalização automática
  • 🌎 Pesquisa global de localidades
  • 🌡️ Temperaturas em Celsius ou Fahrenheit
  • 🎨 Tema dinâmico que muda de acordo com a temperatura do local
  • 🖼️ Fundo dinâmico que muda todos os dias

🧠 Escolhas no desenvolvimento

Typescript

Para ser avisado sobre problemas de tipagem no compile time, foi escolhido o Typescript como linguagem, transpilado com Babel.

Layout

O layout foi modificado para criar uma hierarquia visual entre as informações mais relevantes e para criar um fluxo de leitura mais confortável na aplicação. No ambiente mobile, foi omitido a imagem de fundo do Bing para evitar clutter ou possíveis perdas de leitura se as informações fossem colocadas contra um fundo transparente para que a imagem de fundo ainda aparecesse.

Zustand

Para evitar prop drilling e ter acesso global aos estados da aplicação, foi preciso escolher um gerenciador de estados, nesse processo o Zustand foi escolhido pela sua simplicidade de sintaxe e facilidade de uso.

Immer

Em conjunto com o Zustand, foi usado o Immer, que permite uma manipulação mais fácil de estados aninhados sem quebrar o príncipio da imutabilidade do estado e o uso repetitivo do operador spread (...).

TailwindCSS

O Tailwind foi o método escolhido para estilização da aplicação devido a velocidade de iteração e por facilitar a estilização dependendo do estado da aplicação, já que usa diretamente classNames.

Headless UI

Biblioteca de componentes criada pelo Tailwind Labs, facilita o uso de componentes dinâmicos e acessíveis

Observações

  • Se tratando das chaves de API armazenadas como variáveis de ambiente, o arquivo .env faz parte do repositório apenas por questão de praticidade de uso da aplicação clonada. Se esse fosse um aplicativo em produção, as chaves precisariam ser manualmente preenchidas para executar a aplicação

📦 Instalação

Para clonar o projeto, execute o comando:

git clone https://github.com/jpsaiago/challenge-charlie.git

Depois mude seu terminal para o diretório que foi criado do projeto e execute:

yarn -OU- npm install

Para instalar as dependências do projeto.

⚙️ Execução

Para iniciar o ambiente de desenvolvimento através do Node, basta usar o comando:

npm start -OU- yarn run start

A aplicação será levantada na porta 4000 com hot reload e source maps ativados.

Para executar a aplicação em produção, não é preciso instalar as dependências, mas é preciso ter o Docker instalado. O comando para verificar se ele existe na máquina é:

docker -v

Feito isso, basta executar:

npm compose:prod-up -OU- yarn run compose:prod-up

A aplicação será levantada na porta 4000 minificada no modo de produção.

Existem também códigos para buildar o container sem iniciar o servidor

npm compose:prod -OU- yarn run compose:prod

Para criar o pacote do webpack

npm build -OU- yarn run build

E para levantar o container no modo de desenvolvimento

npm compose:dev -OU- yarn run compose:dev

🧪 Testes

Captura de tela dos resultados dos testes


Para rodar os testes da aplicação, use o comando

npm test -OU- yarn run test

🔭 To-Do

  • Testes unitários usando MSW para emular um servidor e verificar o comportamento dos métodos de aquisição de dados.
  • Testes de integração e end-to-end.
  • Criar mensagens de erro mais detalhadas, tratando os erros retornados e apresentando-os ao usuário.
  • Customizar as tags ARIA para a utilização do site com leitores de tela.
  • Implementar transições na UI usando Headless UI.

About

Frontend code challenge

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 94.8%
  • JavaScript 4.2%
  • Other 1.0%