# Fleet Pulse

Uma frota em movimento. Cada comando tem um caminho de volta.

[HTML](https://leohteixeira.com/pt/projects/fleet-pulse) · Leonardo Teixeira

## O produto

Fleet Pulse é um simulador de locação e leasing entregue em um único binário Go. Clientes MQTT reais representam veículos simulados; o mapa e a carteira mostram telemetria, contratos e estados dos comandos.

Stack: Go, React, TypeScript, PostgreSQL, MQTT, SSE, Leaflet

## O fluxo principal

1. **Dispositivos publicam telemetria** — Os veículos simulados conectam ao broker mochi-mqtt embutido como clientes reais e percorrem uma biblioteca versionada de rotas da Grande São Paulo.

2. **O navegador acompanha a frota** — HTTP fornece o snapshot inicial. SSE com buffer entrega telemetria, comandos e saídas de área; clientes lentos podem perder eventos antigos.

3. **O visitante envia um comando de porta** — Travar e destravar aceitam Idempotency-Key e retornam HTTP 202 com identificador. O veículo recebe o comando MQTT e confirma.

4. **O comando termina** — PENDING → SENT → ACKED, FAILED ou TIMEOUT. O prazo é de cinco segundos a partir de SENT; a fila por veículo é limitada.

## Arquitetura

```text
Dispositivos MQTT simulados ↔ broker embutido ↔ ingestão / máquina de comandos
React + Leaflet ↔ API HTTP → PostgreSQL + cache de estado
Hub SSE → navegador · build React → go:embed → binário Go único
```

### Um processo, limites explícitos

HTTP da biblioteca padrão, MQTT embutido, simulador, máquina de comandos, hub SSE e assets React rodam em um processo Go.

### Carteira durável, comandos transitórios

O PostgreSQL guarda a carteira e as últimas posições, com cache de estado em memória. Comandos de porta da locação e stream são perdidos ao reiniciar. Não há histórico de posições.

## Disponibilidade e limites

Veículos, rotas e contratos são simulados. Não há autenticação: visitantes compartilham a demonstração e podem executar suas ações. Sem réplicas, histórico de posições ou controle de veículos reais. O relógio acelerado da simulação é separado dos timestamps reais da telemetria.

[Abrir demo](https://leohteixeira.com/fleet-pulse/)

[Código no GitHub](https://github.com/leohteixeira/fleet-pulse)
