PITCH: Criei uma API open source que rastreia creatinas do mercado e compara preço por grama em tempo real
Faz alguns dias, queria aprender scraping de verdade, eu já sabia o básico ali mas nunca me aprofundei tanto. Então pensei: por que não construir algo útil enquanto aprendo?
Comecei analisando lojas de suplemento, observando como elas estruturam o HTML, se usavam JSON-LD, sitemap, paginação. Antes de escrever uma linha de scraper ( E VibeCodar grande partes complexas com Claude Code), passei dias só estudando a arquitetura que iria precisar.
O resultado foi o PoteBarato um sistema que:
🔍 Rastreia automaticamente lojas de suplemento a cada 6 horas via Playwright (Chromium headless)
💡 Extrai dados via JSON-LD (Schema.org) o mesmo dado que o Google usa para SEO, eu uso para capturar preço, marca e disponibilidade sem depender de seletores frágeis
⚖️ Calcula o preço por grama de cada produto, então dá pra comparar creatina de 250g com a de 1kg de forma justa
🚀 Expõe tudo via API REST documentada com OpenAPI/Scalar, com autenticação por API key, rate limiting e WebSocket para atualizações em tempo real
O que aprendi construindo isso:
O crawling é a parte mais interessante e menos falada. O pipeline começa lendo o robots.txt, expande sitemaps (incluindo sitemap index), filtra URLs que contenham "creatin" no path, valida via HEAD em paralelo (10 conexões simultâneas) e só então passa pro scraper. Isso evita processar páginas desnecessárias.
A estratégia de JSON-LD foi um divisor de águas. Em vez de ficar ajustando seletores CSS toda vez que a loja muda o layout, o <script type="application/ld+json"> está ali, estruturado, esperando ser lido. Quando não existe, uso fallback em CSS mas na maioria das vezes o JSON-LD resolve.
O processo filho com Bun.spawn() foi outra decisão importante: o scraper roda isolado, então se ele travar ou lançar erro, o servidor HTTP continua respondendo normalmente.
Stack utilizada:
Bun · Hono · Playwright · Drizzle ORM · PostgreSQL · React 19 · Tailwind CSS 4 · Better Auth · Zod · OpenAPI/Scalar
O projeto é 100% open source, com toda a arquitetura documentada desde o modelo de dados até o fluxo do scraper. A ideia nunca foi monetizar, e sim pra estudar coisas que só aparecem em produção: concorrência, retry com backoff, deduplicação por URL, upsert no banco, WebSocket de rate limit.
Se você também quer aprender scraping ou montar uma stack moderna com Bun, talvez valha uma olhada.
🔗 GitHub: https://github.com/GXDEVS/potebarato
🔗 PoteBarato: https://potebarato.gxserver.shop/
Qualquer feedback é bem-vindo especialmente sobre a estratégia de extração ou a arquitetura do crawler.