Voltar aos projetos
CASE 01 / ALP / LOGÍSTICA · WEB & MOBILE

A viagem continua.
A conexão, nem sempre.

O ALP conecta motoristas e operação em uma plataforma web e mobile. Concebi a arquitetura e fui o principal responsável pela implementação do núcleo do sistema, com atuação também nas interfaces e na publicação do app.

Minha atuação
Arquitetura e implementação do núcleo
Contexto
Loopino
Produto
ALP
Aplicativo · iOS e Android

O case em três pontos

ALP / VISÃO GERAL
O desafio
Conexão instável e restrições de execução em segundo plano.Entender o contexto
Uma decisão central
Persistência local, sincronização por lotes e regras no Core.Explorar as decisões
Minha contribuição
Autoria da arquitetura e implementação principal, com atuação em web e app.Ver minha contribuição

A viagem acontece no campo.
O sistema precisa acompanhar.

Uma operação logística não acontece só no navegador. Existe um motorista usando o app, dados de localização sendo coletados, informações de viagem circulando entre dispositivos e uma equipe acompanhando tudo pelo painel web.

O app precisa preservar os dados de localização quando a conexão cai e sincronizá-los com o backend quando há conexão. O painel usa esses dados para acompanhar a operação.

A restrição de projetoA conectividade e o comportamento em segundo plano do aplicativo não podem ser tratados como se fossem iguais aos de um navegador no desktop.

Concebi a arquitetura.
Implementei o núcleo.

Minha responsabilidade abrangeu backend e dados, integração do GPS, interfaces web e mobile e publicação do aplicativo.

O que assumi no projeto

  • Arquitetura central, APIs, dados e integração Cloudflare/Supabase.
  • Integração entre o app do motorista e o painel operacional pela Core API.
  • Integração do SDK GPS, investigação do comportamento offline e sincronização por lotes.
  • Diagnósticos técnicos e evolução da visualização de rotas.
  • Preparação e publicação do aplicativo para iOS e Android.

A estrutura por trás
do produto.

O mapa mostra as principais responsabilidades e conexões. Amplie para explorar o fluxo ou escolha uma camada para entender seu papel no sistema.

ALP / MAPA DO SISTEMA
ALP / Do dispositivo à operação O app persiste dados no SQLite e envia lotes para a Core API Hono. O painel Next.js e a visualização pública usam o mesmo backend. O Core valida sessões com Supabase Auth, aplica regras de negócio e acessa PostgreSQL com PostGIS, evidências privadas no R2 e documentos privados no Supabase Storage. As setas mostram requisições e dependências selecionadas, não todos os caminhos de rede. ALP / Do dispositivo à operação Fronteiras do sistema · conexões selecionadas Linha contínua: chamada / dependência HTTP HTTP / JSON Consulta Persistir no aparelho JWT SQL / Drizzle Acesso assinado Arquivos privados App do motorista Expo · React Native SDK GPS · fluxos de viagem Painel de operação Next.js · TanStack Query Viagens · motoristas · evidências Visualização pública Web Visão limitada da viagem Persistência local SQLite · Drizzle Dados offline no dispositivo Core API Cloudflare Workers · Hono Regras · isolamento de dados Supabase Auth Provedor de identidade Sessões de admin e motorista Banco operacional PostgreSQL · PostGIS Drizzle · viagens · GPS ordenado Evidências de viagem Cloudflare R2 Arquivos privados · acesso assinado Perfil e documentos Supabase Storage Avatares e documentos privados GPS é evidência. A quilometragem vem da distância declarada e das leituras do odômetro. MARCOS COSTA / VISÃO TÉCNICA SIMPLIFICADA / 06.10.2026
Arquitetura simplificada · repositórios consultados em 6 out 2026
Ler o diagrama em texto

O app persiste dados no SQLite e envia lotes para a Core API Hono. O painel Next.js e a visualização pública usam o mesmo backend. O Core valida sessões com Supabase Auth, aplica regras de negócio e acessa PostgreSQL com PostGIS, evidências privadas no R2 e documentos privados no Supabase Storage. As setas mostram requisições e dependências selecionadas, não todos os caminhos de rede.

Expo · React Native · SQLite

Projetar para o aparelho, não só para a requisição.

O app separa telas, domínio e integrações. A persistência usa SQLite/Drizzle, com SDK de localização em segundo plano e fluxos próprios de sincronização. Operação offline não significa execução ilimitada em segundo plano: permissões, sistema operacional e conexão continuam importando.

Lotes GPS · idempotência

Uma retentativa não pode virar outro lote.

O backend identifica lotes GPS por clientBatchId e checksum. Assim, o reenvio pode ser tratado como repetição, não como nova evidência. App e servidor também precisam concordar sobre o estado dos lotes e a ordenação dos dados.

Hono · Drizzle · PostgreSQL/PostGIS

Manter as regras de negócio no backend.

Rotas validam entradas com Zod e chamam services; repositories cuidam da persistência e mappers moldam a resposta. O backend resolve organização e autorização. GPS é evidência; a quilometragem usa distância declarada e leituras/fotos do odômetro.

Next.js · TanStack Query · storage privado

Dar visibilidade sem expor os arquivos.

O painel consome o Core por TanStack Query. Evidências de viagem ficam no R2 privado; avatares e documentos usam Supabase Storage privado. Acesso assinado e verificações do backend conectam a interface aos arquivos.

Visão simplificada das principais fronteiras e integrações.

O que escolhi.
Os compromissos envolvidos.

01Tornar a sincronização idempotente.Reenviar sem duplicar a evidência.

Escolha de arquitetura

Usar identificador e checksum do lote ao receber pontos GPS. O transporte pode repetir a entrega sem criar outro lote lógico a cada tentativa.

A contrapartida

Idempotência exige um contrato persistente: identidade, conflitos e estado precisam permanecer coerentes. Ela não elimina as restrições do sistema operacional nem da conexão.

02Separar evidência GPS de quilometragem declarada.O trajeto observado não substitui a distância declarada.

Escolha de arquitetura

Usar distância declarada e leituras/fotos do odômetro para a quilometragem. Preservar GPS ordenado e simplificá-lo para exibir a rota, sem transformar sinal ruidoso na distância comercial.

A contrapartida

A interface precisa diferenciar o que foi declarado do que foi coletado. Exibir uma rota não prova que o GPS registrou todos os trechos da viagem.

03Manter a autoridade no Core.A mesma regra para web e aplicativo.

Escolha de arquitetura

Centralizar contexto da organização, permissões e regras no backend Hono. Separar rotas, validação, services, repositories e mapeamento da resposta.

A contrapartida

Web e app precisam respeitar contratos estáveis. Ter mais interfaces não deve criar versões concorrentes da mesma permissão ou regra de negócio.

Da decisão
à implementação.

Backend central e APIs

Backend, dados e infraestrutura conectando aplicativo e painel.

Rastreamento e sincronização

Integração da SDK, investigação de lotes e evolução das rotas.

Interface e integração com APIs

Implementação e ajustes visuais em web e app, conectados ao backend central.

Publicação para iOS e Android

Participei da preparação e publicação do aplicativo ALP para iOS e Android.

Esse trabalho chega ao aparelho do motorista, ao painel da operação e às lojas de aplicativos, com links no início deste case.

Conversar sobre este case
Continue por outro contextoAchei Fotos

No Achei Fotos, o desafio passa da operação em campo ao processamento de imagens e à compra.

Vamos conversar sobre
o próximo desafio?

Está contratando para sua equipe ou planejando um sistema? Envie o contexto da vaga ou do projeto e o que precisa construir ou evoluir.

Conversar por e-mail
viniciustatuta@gmail.com

Diagrama de arquitetura

100%

Use o zoom e a rolagem para explorar a imagem. Escape fecha esta visualização.