// PROTÓTIPO FUNCIONAL · AO VIVO
Ingestão de dados públicos ao vivo, detecção de anomalias e busca de padrões similares via IA, transmitido por WebSocket para um dashboard que atualiza sozinho.
Muita operação depende de decisões em cima de dados que mudam a cada minuto — estoque, sensores, preços, filas — mas boa parte dos dashboards ainda são "snapshots" que só atualizam quando alguém aperta F5. Construir ingestão contínua, detecção de padrões e um canal ao vivo até o usuário é um problema de arquitetura, não só de front-end.
Este projeto é um protótipo funcional rodando em produção (não uma maquete): ele consome uma API pública de clima em tempo real, roda cada leitura por um detector de anomalias e uma busca de padrões similares, e transmite tudo via WebSocket assim que acontece.
// ARCHITECTURE
Um loop de coleta busca dados reais a cada 60 segundos. Cada leitura passa por vários detectores independentes — anomalias, qualidade do ar, padrões climáticos e mudanças de tendência —, e o resultado combinado (incluindo um resumo em linguagem natural) é transmitido para todos os clientes conectados, sem polling do lado do navegador.
Loop assíncrono coleta dados reais de múltiplas cidades a cada 60s, via um cliente isolado e substituível (mesmo padrão de adapter plugável do projeto de extração de documentos).
Janela móvel por cidade e por métrica — totalmente explicável, sem caixa-preta.
Cada leitura vira um vetor numérico; uma busca por similaridade encontra o registro histórico mais parecido, de qualquer cidade.
O dashboard também acompanha a qualidade do ar de cada cidade, sinalizando quando os níveis saem do normal.
O sistema reconhece padrões climáticos (por exemplo, "quente e úmido" ou "frio e seco") e avisa quando uma cidade muda de um padrão para outro.
Além de olhar cada medida isoladamente, o sistema aprende como diferentes condições costumam se relacionar em cada cidade — e avisa quando essa relação ou a tendência esperada deixa de fazer sentido.
A cada ciclo, uma IA (Claude) resume em uma frase simples o que há de mais interessante acontecendo — sem precisar interpretar números.
O painel também acompanha o preço de ações de empresas historicamente ligadas ao clima (geradores, materiais de construção, bebidas) e calcula, ao longo do tempo, uma correlação estatística real com as anomalias monitoradas — mostrando o número com honestidade, mesmo quando ainda não há dias suficientes para calculá-lo.
O dashboard não faz polling: o servidor empurra cada atualização assim que ela é processada.
// EM PRODUÇÃO
Hospedado no Railway, consumindo a API pública Open-Meteo sem chave, sem dados sintéticos:
Duas decisões de engenharia que valeram a pena documentar:
A primeira versão usava ChromaDB para a busca de padrões. Em produção, o container era derrubado e reiniciado a cada ~60-70s — consistente com falta de memória — o que derrubava toda conexão WebSocket aberta. Para o volume de dados real do app (poucos vetores de 5 números por cidade), um banco vetorial completo era peso desnecessário: troquei por uma busca por força bruta em memória, mesma interface, sem a dependência pesada. Resolveu o problema.
A segunda foi mais boba: um erro de maiúscula na URL do CDN do Chart.js quebrava o carregamento do gráfico — e como o script inteiro rodava em um único bloco, esse erro impedia até o WebSocket de conectar. Corrigido, e agora a falha de qualquer biblioteca de gráfico é isolada: o dashboard continua funcionando (cards + insights) mesmo que o gráfico não carregue.