Arquiwarearquiware

Portal, Aplicativo e Datalake

Ecossistema digital completo para inteligência de dados agrícolas

O Cenário

A MBAgro é uma empresa de inteligência de mercado agrícola que fornece dados de preços, produção e commodities para o agronegócio brasileiro. O desafio não era falta de dados — era excesso. Anos de séries históricas acumuladas em centenas de planilhas Excel, com formatos heterogêneos, colunas sem padronização e dados espalhados por servidores de rede internos.

O portal web existente, construído em AngularJS, atendia a necessidade básica de distribuir relatórios PowerBI para clientes. Mas a experiência era datada, o código acumulava dívida técnica de anos e não havia aplicativo mobile — um problema para analistas de campo que precisavam consultar dados em tempo real.

O Diagnóstico

O primeiro passo foi mapear o ecossistema completo: portal web, app mobile e infraestrutura de dados. Três frentes independentes mas interconectadas.

No datalake, o cenário era crítico. Cerca de 700 mil séries temporais de preços e quantidades — agricultura, pecuária, insumos, porto, econômico-financeiro — viviam em planilhas Excel com estruturas completamente diferentes entre si. Algumas tinham datas como números seriais do Excel, outras como texto. Colunas variavam de posição entre arquivos. Não havia chaves padronizadas.

No portal, a decisão foi não reescrever o backend Express.js que já funcionava em produção. O risco de migração dupla (frontend + backend) não justificava o ganho. A estratégia foi manter a API estável e reconstruir apenas o frontend, de AngularJS para Next.js, usando um modelo de proxy.

Para o mobile, a escolha recaiu sobre Ionic com Angular e Capacitor — reutilizando a expertise Angular da equipe e permitindo deploy nativo para iOS e Android com uma única codebase.

A Construção

O consolidador do datalake foi construído em Python, com Pandas para ETL e Apache Parquet para armazenamento colunar — ideal para séries temporais com milhões de observações. A arquitetura de banco foi poliglota: PostgreSQL com pgvector para dados estruturados e buscas semânticas, MongoDB para dados operacionais e estado de processamento, Redis para cache e filas.

O pipeline lê as planilhas, resolve mapeamentos dinâmicos de colunas, aplica fatores de conversão de unidades, valida integridade das séries e gera tickers únicos. A classificação de metadados utiliza a API do Claude com busca híbrida — embeddings vetoriais combinados com trigram matching — para inferir automaticamente o que cada série temporal representa.

A migração do frontend seguiu 8 fases estruturadas, de infraestrutura a cleanup final. O Next.js 16 com App Router substituiu 63 controllers AngularJS e 114 templates HTML. O middleware de proxy encaminha chamadas para o backend Express sem modificá-lo. A autenticação migrou de tokens em localStorage para JWT em cookies httpOnly.

O app Ionic 8 com Angular e Capacitor entrega push notifications via Firebase, deep linking para conteúdos específicos e suporte offline para dados já consultados.

O Resultado

O datalake consolidou as 700 mil séries em uma base unificada com taxa de classificação automática por IA de 81%. O processamento paralelo com múltiplos workers reduziu o tempo de ingestão de quase um mês contínuo para menos de um mês útil. Um dashboard executivo em Next.js com WebSocket mostra métricas de cobertura, saúde e volume dos dados em tempo real.

O portal modernizado carrega mais rápido, o código é mantível e os clientes acessam relatórios PowerBI embeddados com autenticação integrada. O app mobile colocou dados de mercado agrícola no bolso dos analistas de campo.

Por Dentro

Portal

Next.js 16, React 19, Express.js, MongoDB, PostgreSQL, PowerBI API, AWS S3

Mobile

Ionic 8, Angular 21, Capacitor 7, Firebase (Auth + FCM)

Datalake

Python, Pandas, Apache Parquet, PostgreSQL (pgvector + pg_trgm), MongoDB, Redis, Claude API

Infra

AWS EC2, S3 (sa-east-1), PM2, Docker

Tem um desafio parecido?

Vamos conversar