APP MOVIES é uma aplicação web para buscar filmes em alta, buscar títulos e visualizar detalhes, construída com React, TypeScript e Vite.
A aplicação está disponível em produção através do seguinte link:
Nota: O link direciona para a página de filmes em tendência (
/movie/trending), que é a página inicial do aplicativo.
- Dev:
npm run dev - Build:
npm run buildenpm run preview
- React 19 e TypeScript 5
- Vite 7
- React Router 7 (roteamento SPA)
- Tailwind CSS 4
- Shadcn UI
- **Icones ** com
lucide-react - Theming com
next-themes - Toast com
sonner - Validações com
zod - date-fns para manipulação de datas
- Listagem de filmes em alta (trending) na página inicial
- Busca de filmes com feedback visual
- Página de detalhes do filme (sinopse, imagem, metadados)
- Tema claro/escuro
- Paginação e componentes de UI reutilizáveis (
card,button,input) - Tratamento de erros com toasts (
sonner)
- Entregar uma base sólida de SPA com arquitetura simples e extensível
- Demonstrar componentes reutilizáveis e estilização consistente
- Prover hooks customizados para separar lógica de dados da UI
- Manter padrões de acessibilidade e boas práticas de DX
- Estrutura de pastas organizada (
components,hooks,pages,lib) - Scripts de lint e formatação:
eslint,prettier - Configuração pronta para deploy (ex.:
vercel.json) - Utilização de utilitários de tipagem e validação (
zod)
src/
components/
ui/ # componentes base (button, card, input, etc.)
layout/ # layout (Container, Footer)
MovieCard.tsx
ImageCard.tsx
Navebar.tsx
hooks/
useTrendingMovies.ts
useSearchMovies.ts
useMovieDetails.ts
useTheme.ts
pages/
Home.tsx
Seach.tsx # página de busca
Movie.tsx # detalhes do filme
NotFound.tsx
Root.tsx
lib/
utils.ts
App.tsx
main.tsx
useTrendingMovies— busca e pagina filmes em altauseSearchMovies— busca por termo com controle de estadouseMovieDetails— carrega detalhes poriduseTheme— alterna e persiste o tema
- Requisitos: Node 18+ e npm
- Instale dependências:
npm install
- Configure as variáveis de ambiente (veja seção Configuração da API abaixo)
- Execute em desenvolvimento:
npm run dev
- Build de produção:
npm run build npm run preview
O projeto utiliza a API do The Movie Database (TMDB) para obter dados de filmes. É necessário configurar as variáveis de ambiente antes de executar a aplicação.
- Crie uma conta gratuita em https://www.themoviedb.org/
- Acesse Settings → API no seu perfil
- Solicite uma API Key (V3 API Key) ou gere um Read Access Token (V4)
- Copie sua chave API
-
Copie o arquivo
.env-semplepara.envna raiz do projeto:cp .env-semple .env
-
Abra o arquivo
.enve adicione sua API Key:VITE_TMDB_API_BASE_URL=https://api.themoviedb.org/3 VITE_TMDB_IMAGE_BASE_URL=https://image.tmdb.org/t/p VITE_TMDB_API_KEY=sua_chave_api_aqui
-
Substitua
sua_chave_api_aquipela sua chave API do TMDB
- Nunca commite o arquivo
.envno Git (ele já está no.gitignore) - O arquivo
.env-sempleserve apenas como template de exemplo - Sem a API Key configurada, a aplicação não funcionará corretamente
npm run dev— inicia o servidor de desenvolvimentonpm run build— gera build de produçãonpm run preview— pré-visualiza o buildnpm run lint— verifica problemas de lintnpm run lint:fix— corrige problemas de lintnpm run format— formata arquivos suportadosnpm run format:check— checa formatação
O projeto utiliza ESLint e Prettier para garantir consistência e qualidade do código.
Configurado com regras recomendadas para React, TypeScript e Hooks:
- Plugins:
eslint-plugin-react,eslint-plugin-react-hooks,eslint-plugin-react-refresh,typescript-eslint - Configurações:
@eslint/js,typescript-eslint/recommended - Regras: React recomendadas, Hooks recomendados, JSX Runtime
- Integração: Compatível com Prettier (
eslint-config-prettier)
Scripts:
npm run lint # verifica problemas de lint
npm run lint:fix # corrige problemas de lint automaticamenteFormatação automática com as seguintes configurações:
- Aspas: simples (
singleQuote: true,jsxSingleQuote: true) - Semicolons: desabilitados (
semi: false) - Tabs: 2 espaços (
tabWidth: 2) - Linha: máximo 100 caracteres (
printWidth: 100) - Trailing commas: todas (
trailingComma: 'all') - Brackets: mesmo linha (
bracketSameLine: true) - Fim de linha: LF (
endOfLine: 'lf')
Scripts:
npm run format # formata arquivos suportados
npm run format:check # checa formatação sem alterar arquivosArquivos suportados: *.js, *.jsx, *.ts, *.tsx, *.json, *.css, *.md
- Componentes com nomes claros e responsabilidades únicas
- Hooks para isolar lógica de dados/efeitos
- Tipagem explícita em APIs públicas
- Evitar aninhamento profundo e tratar erros com feedback ao usuário
- Código formatado automaticamente com Prettier
