Aplicação de previsão do tempo desenvolvida com Next.js, TypeScript e OpenWeatherMap API. Permite que os usuários busquem o clima de qualquer cidade, visualizem detalhes e salvem cidades favoritas.
Siga os passos abaixo para rodar o projeto localmente.
Clone o repositório:
git clone https://github.com/seu-usuario/zydon-test-weather.git
cd zydon-test-weather
Instale as dependências:
```bash npm install ou yarn install
Inicie o servidor de desenvolvimento:
npm run dev ou yarn dev
Acesse a aplicação:
```bash
Abra o navegador e acesse:
http://localhost:3000
Pesquise o clima de qualquer cidade digitando o nome no campo de busca.
Exibe informações como temperatura, umidade, velocidade do vento e condições climáticas atuais e muda o background de acordo com a condição climática.
Adicione cidades à lista de favoritos clicando no ícone de estrela.
Visualize todas as cidades favoritas na página "Favoritos".
localStorage
, garantindo que os dados sejam mantidos mesmo após recarregar a página.O teste solicitava o uso de Vite porém a melhor opção é Next.js pela sua capacidade de renderização tanto do lado do servidor (SSR) e geração estática (SSG), o que melhora o desempenho e a SEO da aplicação. O Vite pode ser configurado para SSR, mas exige mais esforço manual, enquanto o Next.js já tem suporte embutido e otimizado.
O uso de rotas dinâmicas facilita a criação de páginas para cada cidade.
Utilizei a Context API do React para gerenciar o estado global da aplicação, como o clima atual e a lista de cidades favoritas.
Dois contextos foram criados:
WeatherContext
: Gerencia os dados do clima.
FavoriteCitiesContext
: Gerencia a lista de cidades favoritas.
A API do OpenWeatherMap foi solicitada no teste.
As requisições são feitas usando axios para maior controle e tratamento de erros.
localStorage
Para manter a lista de cidades favoritas mesmo após recarregar a página, utilizei o localStorage
.
O estado é sincronizado com o localStorage
sempre que há uma mudança.
WeatherInformations
, são carregados de forma dinâmica usando React.lazy e Suspense para melhorar o desempenho inicial da aplicação.Utilizei componentes pré-estilizados da biblioteca shadcn/ui para garantir consistência visual e agilizar o desenvolvimento.
Ícones são fornecidos pela biblioteca Lucide e Heroicons.
try/catch
para garantir que erros sejam capturados e exibidos ao usuário de forma amigável.```bash
previsao-do-tempo/
├── public/ # Arquivos estáticos (imagens, fonts, etc.)
├── src/
│ ├── components/ # Componentes reutilizáveis
│ ├── context/ # Contextos globais (WeatherContext, FavoriteCitiesContext)
│ ├── pages/ # Páginas da aplicação
│ ├── types/ # Tipos TypeScript
│ ├── utils/ # Funções utilitárias (ex: getBackgroundImageForWeather)
│ ├── styles/ # Estilos globais e CSS
│ └── app/ # Configurações do Next.js (layout, providers)
├── .env.local # Variáveis de ambiente
├── package.json # Dependências e scripts
└── README.md # Documentação do projeto
Feito com ❤️ por Beatriz Moraes.