← voltar para projetos

DealsGamer

Criador do projeto — desenvolvi toda a aplicação front-end e a integração com a API da IsThereAnyDeal, incluindo arquitetura, proxy de API, UX e deploy.

  • Nuxt 3
  • Vue 3
  • TypeScript
  • Tailwind CSS
  • Nuxt UI
  • Pinia
  • Chart.js
Screenshot do projeto DealsGamer

Problema

Acompanhar promoções de jogos para PC exige checar várias lojas separadamente. O projeto resolve isso centralizando ofertas em um só lugar, com dados atualizados da API da IsThereAnyDeal, sem estourar o consumo da API (que tem limites de requisição).

Solução

Aplicação Nuxt 3 com SSR para melhor SEO e performance, consumindo a IsThereAnyDeal via um proxy Nitro no servidor — decisão que protege a chave da API (ITAD_API_KEY nunca chega ao client) e permite normalizar e controlar o consumo de requisições. O catálogo tem carregamento incremental com auto-load, busca global com autocomplete, página de detalhe com tabela de preços e histórico visual (Chart.js), URLs amigáveis por slug e favoritos/filtros locais persistidos via Pinia.

Visão geral

Comparador de ofertas de jogos para PC que consolida preços e promoções de diversas lojas em uma interface única, usando dados da IsThereAnyDeal. O foco é entregar boa experiência de usuário mantendo o consumo da API baixo e previsível.

Funcionalidades

  • Home estilo loja: destaque com arte da Steam e prateleiras temáticas.
  • Catálogo /ofertas com filtros sempre visíveis (painel lateral no celular), aplicados na hora com estado na URL, e coleções como /ofertas/gratis e /ofertas/acabando.
  • Carregamento incremental com auto-load + botão manual “Carregar mais”.
  • Busca global com sugestões que já mostram capa, preço, desconto e menor preço da história; buscas recentes e atalhos / e Ctrl+K.
  • Página do jogo com caixa de compra, lojas ordenadas por preço e histórico visual.
  • URL amigável por slug (/game/cyberpunk-2077).
  • Favoritos em /favoritos com o melhor preço atual, salvos no navegador.
  • SEO: meta por página, JSON-LD de produto, canonical, sitemap e robots.

Decisões técnicas e arquitetura

  • SSR com Nuxt 3: melhora SEO (importante para indexação de catálogo) e performance de primeiro carregamento.
  • Rotas de API no servidor (Nitro, server/api/**): a chave da IsThereAnyDeal fica apenas no servidor, evitando exposição no bundle do client e centralizando a normalização dos dados.
  • Cache SWR nas rotas: respostas reaproveitadas entre visitantes, mantendo o consumo da API baixo e previsível.
  • TypeScript strict em todo o código, reforçando a confiabilidade da integração com dados externos.
  • Normalização centralizada no composable useGamesApi.ts, mantendo páginas desacopladas do formato da API.
  • Estado global via Pinia (stores/games.ts) para favoritos e filtros, sem dependência de armazenamento server-side.
  • Grafo de preços com Chart.js + vue-chartjs na página de detalhe.
  • Yarn 4 com node_modules linker para instalação mais rápida e reprodutível.

Aprendizados

  • Como projetar um proxy de API para proteger credenciais em aplicações SSR.
  • Padrões de carregamento incremental e autocomplete com foco em baixo custo de requisições.
  • Deploy contínuo no Vercel com variáveis de ambiente para ambientes Production/Preview/Development.
Próximo projetoVeritas Fidei