Game Deals Radar
Plataforma distribuída de inteligência de preços, agregação multi-lojas e automação de alertas para jogos digitais
O Game Deals Radar é uma plataforma distribuída de inteligência de preços e monitoramento contínuo de promoções para jogos de PC em tempo real. Projetado como um Monólito Modular orientado a domínio (DDD), o sistema coleta dados de múltiplos marketplaces (Steam e Nuuvem), resolve o recorde histórico global em BRL via API IsThereAnyDeal v2 desde 2011, agrega jogos 100% grátis com contagem regressiva, calcula economia acumulada e dispara alertas automáticos no Discord via Rich Embeds quando metas de preço alvo são atingidas.
O Back-End desta aplicação está hospedado no plano gratuito do Render. Caso o serviço esteja em repouso (cold start), a primeira inicialização pode levar de 30 a 120 segundos para carregar os dados.

O Desafio de Negócio
O mercado de distribuição digital de jogos de PC é fragmentado entre lojas oficiais (Steam, Nuuvem, Epic Games, GOG), cada uma com calendários promocionais isolados. Os consumidores perdem ofertas históricas por falta de dados consolidados desde 2011, perdem tempo pesquisando manualmente em múltiplos sites e deixam de resgatar jogos gratuitos semanais por ausência de notificações centralizadas.
A Solução de Engenharia
Engenharia de um Monólito Modular de alta performance. O Back-End em Java 21 LTS e Spring Boot 3.4.5 implementa Strategy Pattern para scrapers plugáveis (Jsoup e APIs), integração com IsThereAnyDeal v2 para semeadura histórica de preços, Webhook Dispatcher para Discord, proteção Anti-SSRF e Rate Limiting no padrão OWASP, persistindo no PostgreSQL 15 via Flyway (V1..V7) com cache Caffeine multi-tenant e 95 testes automatizados. O Front-End em Next.js 16 (App Router com Turbopack), React 19 e Tailwind CSS conta com busca instantânea com autocomplete, importador 1-click de Wishlist da Steam, radar de jogos grátis e gráficos de séries temporais com Recharts.
Galeria de Telas & Fluxos do Sistema
Explore as telas completas da aplicação, fluxos operacionais, dashboards em tempo real e painéis administrativos.

Home & Vitrine de Ofertas Populares
Ranking em tempo real dos títulos mais monitorados com indicação da melhor oferta ativa e badges de menor preço histórico.

Dashboard Pessoal & Métricas Financeiras
Watchlist personalizada com definição de preço alvo, comparador de lojas e contabilidade da economia acumulada.

Radar de Jogos Grátis (Freebies Feed)
Feed de jogos 100% gratuitos da semana (Epic Games, Steam, GOG) com contagens regressivas ao vivo e guias de resgate.

Histórico de Preços & Alertas Discord
Visualização gráfica de séries temporais com Recharts, filtros por período e automação de alertas via Discord Webhooks.
Blueprint de Arquitetura & Stack Técnica
Next.js 16 (App Router com Turbopack), React 19, TypeScript, Tailwind CSS, Recharts
Java 21 LTS, Spring Boot 3.4.5, Spring Security 6, JWT, Jsoup, Caffeine Cache, Discord Webhooks
PostgreSQL 15, Spring Data JPA, Hibernate, Flyway Migrations (V1..V7)
Docker, Docker Compose, GitHub Actions (CI), JUnit 5, Mockito, AssertJ, Vitest (95 testes)
Principais Recursos & Regras de Negócio
Desafios de Engenharia & Decisões Técnicas
Arquitetura Plugável de Scrapers (Strategy Pattern)
Criação de contratos de scraping desacoplados que permitem plugar novos marketplaces (Epic Games, GOG) sem acoplamento ou modificação nas regras centrais de catálogo.
Hardening de Segurança & Proteção Anti-SSRF
Implementação de validador de segurança com allowlist estrita e resolução de DNS antes de qualquer requisição externa, bloqueando faixas de IP privadas, loopback e metadados de nuvem (169.254.169.254).
Semeadura Histórica com IsThereAnyDeal & Cache Multi-Tenant
Eliminação do problema de cold-start de histórico através de enriquecimento automático com ITAD v2 e caching em memória segmentado por usuário e query no Caffeine Cache.
Experimente a Aplicação na Prática
Acesse a aplicação em produção online ou explore todos os detalhes técnicos e arquitetura neste estudo de caso.
Nota: Back-End no Render Free Tier (pode levar 30s–120s na primeira requisição)