Paulo.dev
Projeto em DestaqueCódigo Proprietário2025fullstack

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.

Java 21Spring Boot 3Next.js 16PostgreSQLDockerRechartsJWTFlywayJsoupCaffeineDiscord WebhooksOWASP
Aviso de Inicialização (Cold Start)

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.

Game Deals Radar
Clique para inspecionar em tela cheia

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
Expandir Tela

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
Expandir Tela

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)
Expandir Tela

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
Expandir Tela

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

Interface / Frontend

Next.js 16 (App Router com Turbopack), React 19, TypeScript, Tailwind CSS, Recharts

Back-End & Regras de Negócio

Java 21 LTS, Spring Boot 3.4.5, Spring Security 6, JWT, Jsoup, Caffeine Cache, Discord Webhooks

Banco de Dados & Persistência

PostgreSQL 15, Spring Data JPA, Hibernate, Flyway Migrations (V1..V7)

DevOps, Testes & Deploy

Docker, Docker Compose, GitHub Actions (CI), JUnit 5, Mockito, AssertJ, Vitest (95 testes)

Principais Recursos & Regras de Negócio

Agregação Multi-Lojas & Best Deal: Coleta contínua de preços para Steam e Nuuvem com destaque automático da melhor oferta ativa
Baseline Histórico IsThereAnyDeal v2: Resolução do menor preço histórico real desde 2011 em BRL, eliminando cold-start de dados
Radar de Jogos Grátis (Freebies Feed): Agregação pública de jogos 100% gratuitos da semana (Epic Games, Steam, GOG) com contagens regressivas e guias de resgate
Motor de Alertas via Discord: Disparo automático de Rich Embeds estilizados quando o preço atinge o valor alvo ou menor preço histórico
Autocomplete em Tempo Real & Importador Wishlist Steam: Busca instantânea com debounce de 300ms e importação em lote da lista de desejos em 1 clique
Dashboard de Métricas Financeiras: Contabilidade em tempo real de economia acumulada versus preço cheio e média de desconto da lista
Visualização Gráfica Temporal: Gráficos dinâmicos com Recharts exibindo séries históricas de preço com filtros temporais (6M, 1A, total)
Hardening de Segurança OWASP: Proteção Anti-SSRF completa com validação de DNS/IPs privados, Security Headers (CSP, HSTS) e Rate Limiting por IP
Arquitetura Monólito Modular & DDD: Separação coesa de bounded contexts (auth, catalog, scraper, freebies, notifications, analytics)
Qualidade & 95 Testes Automatizados: Suíte completa no backend (JUnit 5, Mockito, AssertJ) e frontend (Vitest, RTL) com CI no GitHub Actions

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.

Acessar Deploy
Código Proprietário (Repositório Privado)

Nota: Back-End no Render Free Tier (pode levar 30s–120s na primeira requisição)