Frotamais — Plataforma de frota com D1, auth real, roles e rastreamento ao vivo
- 8
- Veiculos na demo
- 11
- Modulos ativos
- 3
- Roles com permissoes
Cliente
Frotamais
Setor
Gestão de Frotas e Logística
Linha do tempo
6 dias de implementação · 2026-08
Produto ao vivo
Usar agoraResultados
Resultados reportados pelo cliente durante o rollout
Baseline: D1 + KV + Durable Object
Baseline: dados ilustrativos em D1
Baseline: dashboard funcional com auth
Baseline: base para score de segurança
Baseline: borda Cloudflare
Baseline: Nearest Neighbor + 2-opt
Dados reportados pelo cliente
O desafio
O desafio
Frotamais e uma demonstracao de plataforma SaaS de gestao de frotas evoluida de mock estatico para MVP funcional honesto. A landing page comunica o valor do produto enquanto a area logada exige autenticacao real com roles e mostra dashboard com mapa ao vivo, roteirizacao VRP, KPIs do banco D1, paginas de detalhe por veiculo e motorista, CRUD completo, relatorios com graficos dinamicos, inspecoes DVIR, geofences e score de motorista calculado em tempo real.
Transportadoras e gestores de frota perdem visibilidade quando controlam tudo em planilhas desatualizadas. Falta uma visao unica de veiculos, motoristas, rotas, manutencao, combustivel, inspecoes e geofences para decidir com agilidade.
A abordagem
A abordagem
Implementamos Astro com SSR, Hono para API REST com CRUD completo (POST/PUT/DELETE), Cloudflare D1 com Drizzle ORM para persistencia real, Better Auth para autenticacao com roles (admin, gestor, motorista) e permissoes granulares, Durable Objects com SSE para rastreamento em tempo real, algoritmo VRP (Nearest Neighbor + 2-opt com distancia haversine) para roteirizacao, Leaflet para mapas com geofences, score de seguranca calculado a partir de eventos de telemetria, paginas de detalhe por veiculo e motorista, relatorios com graficos dinamicos (barras e donut em SVG puro) e exportacao CSV, inspecoes DVIR e sino de notificacoes in-app.
A solução
A solução
- Landing page com hero fotografico e CTA para acessar a demo
- Autenticacao real com Better Auth (email/senha) e sessao via KV
- Sistema de roles e permissoes (admin, gestor, motorista) com middleware de acesso
- Banco Cloudflare D1 com Drizzle ORM e migrations aplicadas em producao
- Dashboard com KPIs lidos do D1, mapa Leaflet e grafico dinamico de consumo
- Pagina de detalhe por veiculo com historico, mapa, financeiro, viagens, manutencao e inspecoes
- Pagina de detalhe por motorista com score detalhado, eventos de telemetria e viagens
- CRUD completo na interface: adicionar e remover veiculos e motoristas com modal de formulario
- Filtros e busca em veiculos, motoristas e alertas
- Roteirizacao VRP real com Nearest Neighbor + 2-opt e distancia haversine
- Rastreamento em tempo real via SSE com Durable Object (simulacao de telemetria)
- Score de seguranca calculado em tempo real a partir de eventos de telemetria
- Inspecoes DVIR (checklist pre/pos viagem) com aprovacao e defeitos
- Geofences com areas de controle visualizadas no mapa Leaflet
- Relatorios com graficos dinamicos (barras e donut em SVG puro) lidos do D1
- Exportacao CSV para combustivel, manutencao e viagens
- Sino de notificacoes in-app com contador de alertas pendentes
- Middleware de auth protegendo rotas /app/* com redirecionamento por role
- Módulos: dashboard, veiculos, motoristas, rotas, manutencao, combustivel, alertas, inspecoes, geofences, relatorios e usuarios
- API Hono com CRUD completo (GET/POST/PUT/DELETE) lendo do D1
- Deploy em Cloudflare Workers com D1, KV e Durable Object bindings
- Tabelas acessiveis com th scope e badges de status
- Disclaimers claros de que nao ha emissao de documentos fiscais reais
Linha do tempo
Como o projeto foi conduzido, do mapeamento ao deploy. How the project was conducted, from mapping to deploy.
1 dia
Discovery
- Pesquisa de benchmarks de gestão de frotas
- Análise de fluxos operacionais de transportadoras brasileiras
- Definição de módulos e arquitetura
1 dia
Design
- Landing page com hero fotográfico
- Paleta azul profundo + laranja de CTA
- Sidebar e top bar do dashboard
2 dias
Dev base
- Scaffold Astro + Hono + Tailwind
- Seed de dados ilustrativos brasileiros
- Landing page e módulos do dashboard
- Deploy no Cloudflare Workers
2 dias
Dev funcional
- D1 real com Drizzle migrations
- Better Auth com sessao e middleware
- Durable Object + SSE para rastreamento
- VRP Nearest Neighbor + 2-opt
- Leaflet no dashboard
- Score de seguranca calculado
2 dias
Evolucao MVP
- Sistema de roles e permissoes (admin, gestor, motorista)
- Paginas de detalhe por veiculo e motorista
- CRUD completo na interface com modais
- Inspecoes DVIR com checklist pre/pos viagem
- Geofences com areas no mapa
- Relatorios com graficos dinamicos e exportacao CSV
- Sino de notificacoes in-app
- Filtros e busca em todos modulos
Metodologia
Como o projeto foi conduzido, do mapeamento ao deploy. How the project was conducted, from mapping to deploy.
Pesquisa de benchmarks
Arquitetura edge-first
Mobile-first
Acessibilidade primeiro
Honestidade no conteúdo
Algoritmos próprios
Tempo real na borda
Deploy contínuo
Arquitetura
- → Astro SSR com Cloudflare Workers adapter e custom worker entry point
- → Hono gerenciando rotas /api/* lendo do D1 via Drizzle ORM
- → Cloudflare D1 com migrations Drizzle aplicadas em produção
- → Better Auth com factory function (D1 binding só existe no contexto da request)
- → Middleware Astro protegendo rotas /app/* com verificação de sessão
- → Durable Object FleetTracker com SSE para rastreamento em tempo real
- → Durable Object usa alarm() para simular telemetria a cada 3 segundos
- → Algoritmo VRP (Nearest Neighbor + 2-opt) roda no edge com haversine
- → Leaflet com client:only para evitar problemas de SSR com window
- → KV Namespace para sessão de auth na borda
- → Build e deploy via GitHub Actions com migrations D1 automáticas
- → Subdomínio frotamais.expostacker.com.br gerenciado pela Cloudflare
Diagrama conceitual — não reflete implementação real
Stack tecnológica
Escolhas técnicas e o que ficou para fora.
systems
Por quê: SSR leve e islands para interatividade seletiva.
Alternativa rejeitada: Next.js
Por quê: Compatibilidade com SSR no Workers.
Alternativa rejeitada: React 19
Por quê: Mapa interativo leve com marcadores e polylines.
Alternativa rejeitada: MapLibre GL
Por quê: Design tokens e responsividade.
Alternativa rejeitada: CSS customizado
systems
Por quê: API pequena e compatível com Workers.
Alternativa rejeitada: Express
Por quê: Auth real com sessão e adapter Drizzle.
Alternativa rejeitada: Auth mockado
Por quê: Type-safe queries SQL no D1.
Alternativa rejeitada: SQL cru
systems
Por quê: Banco SQLite serverless na borda.
Alternativa rejeitada: Supabase
Por quê: Estado compartilhado e SSE para realtime.
Alternativa rejeitada: WebSocket service
Por quê: Sessão de auth na borda.
Alternativa rejeitada: Redis
systems
Por quê: VRP leve com haversine, funciona no Workers.
Alternativa rejeitada: OR-Tools WASM
Por quê: Cálculo real a partir de eventos de telemetria.
Alternativa rejeitada: Score estático mockado
systems
Por quê: Borda global, SSL e domínio personalizado.
Alternativa rejeitada: Vercel
Decision log
O que escolhi, o que rejeitei e por quê.
D1 real em vez de dados em memória
Por que: D1 com Drizzle ORM demonstra capacidade de persistência real, migrations e queries SQL na borda. Mostra domínio de banco serverless sem custo adicional no plano Cloudflare.
Alternativas rejeitadas: Seed em memória — rejeitado por não demonstrar capacidade de banco real.
Better Auth em vez de auth mockado
Por que: Better Auth com adapter Drizzle + D1 mostra autenticação real com sessão, cookies seguros e middleware. Demonstra domínio de segurança para prospects B2B.
Alternativas rejeitadas: Auth mockado sem persistência — rejeitado por não demonstrar capacidade real de auth.
Durable Objects + SSE em vez de polling
Por que: Durable Objects mantêm estado compartilhado entre conexões e broadcastam posições via SSE. Demonstra arquitetura realtime na borda sem serviço externo.
Alternativas rejeitadas: Polling com setInterval — rejeitado por não ser tempo real e gerar carga desnecessária.
VRP próprio (Nearest Neighbor + 2-opt) em vez de OR-Tools
Por que: Implementação própria de Nearest Neighbor + 2-opt com haversine é leve, funciona no Workers e demonstra domínio de algoritmos. OR-Tools WASM pesa 58MB e excede limites do Workers.
Alternativas rejeitadas: OR-Tools WASM — rejeitado pelo tamanho de 58MB que excede o limite do Workers.
Leaflet em vez de MapLibre GL
Por que: Leaflet pesa 40KB gzipped contra 200KB do MapLibre GL. Para marcadores e polylines de rota, Leaflet é suficiente e mais leve. Usa client:only para evitar problemas de SSR.
Alternativas rejeitadas: MapLibre GL — rejeitado pelo tamanho e complexidade desnecessária para o caso de uso.
React 18 em vez de React 19
Por que: React 19 gera erro MessageChannel no ambiente do Cloudflare Workers. React 18 e estavel para SSR nesse runtime.
Alternativas rejeitadas: React 19 — rejeitado por incompatibilidade com o ambiente Workers.
Roles fixos em vez de RBAC customizavel
Por que: Tres roles fixos (admin, gestor, motorista) com permissoes definidas em codigo cobrem os cenarios de portofolio sem adicionar complexidade de CRUD de permissoes. Middleware checa acesso por role e sidebar filtra itens automaticamente.
Alternativas rejeitadas: RBAC customizavel com CRUD de permissoes — rejeitado por escopo excessivo para um portofolio.
Graficos SVG puro em vez de Chart.js
Por que: Graficos de barras e donut em SVG puro pesam menos de 3KB contra 60KB+ do Chart.js. Para os graficos do portofolio, SVG e suficiente e mantem o bundle leve.
Alternativas rejeitadas: Chart.js — rejeitado pelo tamanho e complexidade desnecessaria.
Segurança e acesso
Seguranca e privacidade
-
Autenticacao real com Better Auth (email/senha)
-
Sessao persistida em KV com cookies seguros
-
Sistema de roles (admin, gestor, motorista) com permissoes granulares
-
Middleware protege rotas /app/* com redirecionamento por role
-
Sidebar filtra itens de menu conforme permissoes do usuario
-
Banco D1 com dados ilustrativos persistidos
-
CRUD com validacao server-side via Hono
-
Deploy com SSL via Cloudflare
-
Nenhum documento fiscal real e emitido
-
Secrets gerenciados via wrangler secret put
Lições aprendidas
Nem tudo saiu como planejado.
— Evoluir de mock para MVP funcional honesto foi a decisão certa. D1 real, Better Auth, Durable Objects com SSE, VRP próprio e Leaflet demonstram capacidade técnica profunda sem virar produto comercial. O Wrangler v4 mudou a configuração de Durable Objects de exports para migrations. Better Auth exige factory function porque D1 bindings só existem no contexto da request. Leaflet precisa de client:only no Astro porque acessa window na importação.
Veja também outros produtos
NutriX
Plataforma de saúde adaptativa em produção: nutrição calculada, treino ao vivo, coach de IA, análise por foto e portal de profissionais.
Ver case →
VulnStrike
Scanner de vulnerabilidades SaaS: digite um domínio e receba nota de segurança A+–F com achados explicados e correção passo a passo — scan grátis sem cadastro.
Ver case →
Medellin RP
Loja VIP do servidor Medellin RP onde o jogador escolhe itens, paga via Mercado Pago e recebe tudo automaticamente no jogo.
Ver case →Quer um produto como esse?
Posso fazer o mesmo para o seu negócio. Vamos conversar.