Portal MRO
plataforma interna que reúne almoxarifado, indicadores, treinamentos e gestão de equipe de uma operação de manutenção rodoviária multiestado.
o ERP da operação é lento e o login falha com frequência. para chegar a um único número era preciso abrir várias transações diferentes, exportar cada pedaço e juntar tudo à mão — os indicadores nasciam de planilha montada manualmente, com todo o espaço para erro humano que isso abre. e como cada unidade fazia do seu jeito, não existia visão consolidada: nem por estado, nem um lugar único onde olhar indicador e treinamento.
um portal único com hierarquia estado → unidade. o estoque é modelado do mesmo jeito que o ERP modela (centro → depósito) e ligado à hierarquia do negócio por um vínculo configurável, o que permite alimentar tudo com o próprio relatório exportado do ERP — sem integração direta, decisão tomada de propósito para não depender de credencial de serviço nem de liberação de rede corporativa. na prática, uma pessoa entra no ERP uma vez e sobe o arquivo; a partir daí a equipe inteira consulta em milissegundos, pelo celular, sem computador e sem passar pelo login do ERP. e como o ERP é licenciado por usuário cadastrado, tirar de lá quem só precisa consultar reduz a quantidade de licenças necessárias.
como as peças se conectam
- NavegadorReact 19 + Vite, build estático
- NginxHTTPS e entrega dos arquivos
- FastifyAPI em TypeScript
- PostgreSQLbanco próprio do portal
o que existe dentro
Almoxarifado
em produçãoprodutos por depósito, posição física, lotes e validade, reservas, etiquetas Zebra, fichas de segurança e importação do relatório do ERP.
Indicadores (KPI)
parciallinhas de entrada e saída, SKUs ativos e média de competência, com filtro por estado e por unidade.
Treinamentos
implementadotrilhas de segurança, operacional e liderança, com progresso que não regride, prova de múltipla escolha e diálogo diário de segurança.
Equipe
implementadocadastro de funcionários com organograma e avaliação de competência por pilar, aplicada pela liderança.
Home / mapa
implementadomapa interativo por estado, com contagens vindas direto do banco em vez de números fixos.
Suporte e notificações
planejadochatbot de apoio ao usuário e avisos em canal corporativo.
o que foi usado
decisões técnicas e o porquê
Vite + React em vez de Next.js
renderização no servidor não agregava nada num sistema totalmente autenticado e pesava na VPS. o build estático é servido pelo Nginx e o Fastify cuida só da API.
upload de relatório em vez de integração com o ERP
integração direta exigia credencial de serviço e liberação de rede que não dependiam de mim. o upload entrega o mesmo dado e deixa a autonomia com a equipe.
dois perfis, não cinco
o sistema legado tinha cinco perfis que ninguém usava direito. reduzi para usuário e supervisor, mais uma flag de somente leitura para quem só consulta.
deploy por git push
um repositório bare na própria VPS com hook post-receive que instala, builda e reinicia o processo. publicar é um push.
o que ficou
- modelar o estoque igual ao ERP e ligar à hierarquia do negócio por um vínculo manual foi o que fez a importação parar de brigar com a realidade da operação.
- substituir um sistema legado sem período paralelo funciona quando a carga inicial vem de um export confiável — mas exige que a importação seja idempotente desde o primeiro dia.
- permissão de banco é parte do deploy: aplicar schema como superusuário deixou as tabelas com dono errado, e o erro só apareceu em runtime, na primeira rota que tocou nelas.