Felipe Angelini

Monitor de ofertas no Telegram

Dashboard
Dashboard — imagem 1 de 3
Detalhe da promoção
Detalhe da promoção — imagem 2 de 3
Filtros
Filtros — imagem 3 de 3

Projeto pessoal que nasceu de cansar de rolar dezenas de canais de oferta no Telegram à mão: um bot monitora os canais, extrai preço e categoria de cada post e organiza tudo num painel com histórico de preço por produto. Essa é a segunda versão do sistema — a primeira, em produção real por um bom tempo, foi reescrita (Express+EJS+SQLite → NestJS+React+PostgreSQL) mantendo a antiga como fallback de emergência até o corte.

Decisões técnicas

  • Validar antes de confiar na LLM

    A classificação de categoria e a confirmação de preço começaram usando uma LLM. Depois de acumular dado real de produção, medi: uma função pura (regex + palavras-chave) batia com a LLM em 96,2% dos preços, e a categoria já esbarrava num teto de ~65% de autoconsistência mesmo comparando a LLM com ela mesma. Removi a chamada de LLM desse caminho — mais rápido, mais barato, sem perda de qualidade mensurável.

  • Preço não é só achar 'R$'

    O extrator de preço trata casos que confundem qualquer regex ingênua: 'R$8,33 cada' dentro de um kit não é o preço (é o valor unitário, sempre menor que o total), 'Limitado a R$10' é teto de cupom, não preço, e um post com 'R$76.728' provavelmente quis dizer R$76,72 — acima de um teto de bom senso, o sistema prefere não extrair preço nenhum a arriscar um valor absurdo.

  • Mídia comprimida no tamanho certo

    Imagens baixadas do Telegram são redimensionadas e convertidas pra WebP (sharp) antes de gravar em disco, com qualidade calibrada pro tamanho que realmente aparece no painel — card pequeno não precisa de imagem grande.

O que o painel mostra

  • Promoções organizadas e com histórico

    Lista de promoções capturadas, com filtro por categoria e histórico de preço por produto ao longo do tempo — dá pra ver se aquele 'menor preço' é real ou só marketing.

  • Monitoramento da própria infraestrutura

    Alerta automático quando o disco está enchendo ou o backup do Postgres está atrasado — cuidado que só se aprende depois de rodar um sistema tempo suficiente pra se preocupar com isso.

O trabalho difícil aqui nunca foi 'ler mensagem do Telegram' — foi desconfiar dela: separar preço de fração de cupom, e saber quando a resposta certa é não extrair nada.