Skip to content

Repository files navigation

Fleet Admin

Sistema de gestão para locadoras que alugam veículos diretamente a motoristas (modelo semelhante a aplicativos de transporte). Construído do zero, pensando em evoluir para um SaaS multi-empresa.

Objetivo

Substituir o controle manual (planilhas) da locação de veículos, motoristas, contratos, financeiro e manutenção por um sistema centralizado, acessível via web e celular, com automações que reduzem trabalho manual (ex: pagamento de parcela gera lançamento financeiro automaticamente; criar um contrato já vincula veículo e motorista).

Tecnologias

Backend

  • Node.js + Express — servidor HTTP e rotas da API
  • TypeScript — tipagem estática em todo o projeto
  • Drizzle ORM — acesso ao banco de dados e migrations
  • PostgreSQL 16 — banco de dados relacional, rodando via Docker
  • JWT (jsonwebtoken) — autenticação por token
  • bcryptjs — hash de senhas
  • Multer — upload de arquivos (fotos de vistoria)

Frontend Web

  • React + Vite + TypeScript
  • React Router — navegação entre páginas
  • Axios — chamadas à API
  • Tailwind CSS — estilização
  • Recharts — gráficos do Dashboard
  • lucide-react — ícones

Mobile

  • React Native + Expo (SDK 54, testado via Expo Go)
  • Expo Router — navegação por arquivos
  • AsyncStorage — persistência local do token de login
  • expo-image-picker — upload de fotos em vistorias
  • react-native-gifted-charts — gráficos do Dashboard mobile

Infraestrutura

  • Docker Compose — container do PostgreSQL para desenvolvimento local
  • Git + GitHub — versionamento

Estrutura do projeto

fleet-admin/ ├── src/ # Backend (API) │ ├── db/ # Schema Drizzle, client de conexão, seed │ ├── routes/ # Rotas da API (uma por recurso) │ ├── middlewares/ # Middleware de autenticação │ └── server.ts # Ponto de entrada do backend ├── web/ # Frontend web (React + Vite) │ └── src/ │ ├── pages/ # Uma página por rota │ ├── components/# Layout compartilhado │ ├── contexts/ # Contexto de autenticação │ └── api/ # Cliente Axios configurado ├── mobile/ # App mobile (Expo) │ └── app/ │ ├── (tabs)/ # Telas do app (uma aba por arquivo) │ ├── contexts/ # Contexto de autenticação │ └── api/ # Cliente Axios configurado ├── drizzle/ # Migrations geradas ├── uploads/ # Fotos de vistoria (não versionado) └── docker-compose.yml # Container do Postgres

Modelagem de dados

Sistema multi-tenant: toda tabela de negócio tem companyId, isolando os dados de cada empresa cliente.

Entidades principais:

  • companies / users — empresa (tenant) e usuários com login
  • vehicles — veículos da frota
  • drivers — motoristas, com vínculo ao veículo que estão alugando no momento
  • contracts — contrato de locação (motorista + veículo), com dia de pagamento semanal e prazo previsto
  • financial_entries — lançamentos financeiros (entradas/saídas), com vínculo opcional a veículo/motorista
  • vehicle_financings / vehicle_insurances — financiamento e seguro por veículo, com pagamento gerando lançamento financeiro automaticamente
  • inspections / inspection_photos — vistorias semanais com checklist de 22 itens e fotos

Funcionalidades implementadas

  • ✅ Autenticação (login com JWT, senha com hash bcrypt)
  • ✅ CRUD completo de Veículos, Motoristas, Contratos, Financeiro
  • ✅ Contratos: dia de pagamento semanal, prazo previsto, vínculo automático motorista↔veículo
  • ✅ Financiamentos: controle de parcelas, pagamento com valor customizável (amortização)
  • ✅ Seguros: controle de mensalidade
  • ✅ Vistorias: checklist de 22 itens, upload de múltiplas fotos, alerta de vistoria pendente (ciclo de 7 dias)
  • ✅ Dashboard: ocupação da frota, saldo em caixa, gráfico de entradas x saídas por mês, alertas de pagamento do dia e contrato vencendo
  • ✅ Isolamento entre empresas (multi-tenancy) garantido em todas as rotas
  • ✅ App mobile (iOS via Expo Go) com as mesmas 7 telas do sistema web

Em andamento / próximos passos

  • 🔲 Validação de dados de entrada (Zod) em todas as rotas
  • 🔲 Tratamento de erros centralizado no backend
  • 🔲 Proteção contra força bruta no login (rate limiting)
  • 🔲 Deploy em produção (hoje roda apenas localmente)
  • 🔲 Testes reais com dados da locadora

Como rodar o projeto localmente

Pré-requisitos

Node.js, Docker Desktop, Git.

1. Backend

# Na raiz do projeto
docker compose up -d        # sobe o Postgres
npm install
npm run db:migrate           # aplica as migrations
npm run dev                  # inicia o servidor em http://localhost:3333

2. Frontend web

cd web
npm install
npm run dev                  # inicia em http://localhost:5173

3. Mobile (opcional, requer Expo Go no celular)

cd mobile
npm install
npx expo start                # escaneie o QR code com o Expo Go

Nota: para testar o app mobile em um celular físico, o computador e o celular precisam estar na mesma rede Wi-Fi. O IP local da máquina deve ser configurado em mobile/api/client.ts.

Variáveis de ambiente

Crie um arquivo .env na raiz com:

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages