shivao-projeto/BACKLOG.md
PontualTech / Karlão 5b02feae50 chore: initial commit + security hardening (4 runs squad shivao-melhoria)
Importação inicial do projeto Shivão (Diário de Bordo do veleiro) em estado
pronto pra produção, já incluindo as 5 mudanças de hardening implementadas
pela squad shivao-melhoria em 2026-04-27.

Mudanças de hardening (HANDOFF.md seção " Pronto"):

1. **Rate limiting nos 3 endpoints públicos de share**
   - express-rate-limit ^8.4.1, 60 req/min/IP
   - server/src/index.js linhas 38, 262, 271, 279

2. **Tamanho de upload reduzido pra 50MB** (era 200MB)
   - multer linha 84

3. **Validação Zod nos endpoints autenticados** (POST /api/data e /zones)
   - novo arquivo server/src/schemas/index.js
   - middleware validate() retorna 400 com top 5 issues

4. **Audit log de ações sensíveis**
   - nova tabela audit_log + funções db.audit() e db.recentAudit()
   - 6 endpoints instrumentados (state_set, media_insert/delete, share_create/revoke/zones_update)
   - novo endpoint GET /api/audit (autenticado)

5. **Catch silencioso de webhook em zona PROIBIDA tratado**
   - app/diario-bordo.html + server/public/index.html linha 3280
   - agora loga erro + exibe toast ao usuário

Status final do HANDOFF:
- 🔴 Críticos restantes: 1 (CORS — decisão consciente single-tenant, não-acionável)
- 🟡 Importantes: 4 itens (testes, vigia reconnect, refator frontend, demais catches)
- 🟢 Bom-ter: 5 itens

Stack: Node 20 ESM + Express + better-sqlite3 + Docker (Coolify)
Single-tenant pessoal · single-file frontend HTML · offline-first

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 13:24:08 -03:00

5.6 KiB

BACKLOG — Próximas melhorias

Ideias e melhorias sugeridas, ordenadas por impacto/esforço.


🔥 Prioridade alta

Hardening de produção (ver HANDOFF.md, seção crítica)

  • Rate limiting nos endpoints públicos
  • Validação de schema (zod/ajv)
  • Reduzir tamanho de upload de mídia
  • Backup off-site automático
  • Monitoring (UptimeRobot, Sentry)
  • Audit log de operações sensíveis

Service Worker / PWA real

  • Permitir uso offline real (atualmente offline-first mas não offline-only)
  • Background Sync API para retentar sync quando reconectar
  • Push notifications via Web Push (servidor envia → celular recebe sem o app aberto)
  • Cache de tiles do mapa para uso em alto-mar

Testes automatizados

  • Backend: vitest com fixtures de SQLite em memória
  • Frontend: playwright para fluxos críticos (criar viagem, vigia, alarme)
  • CI no GitHub Actions

Reconexão robusta de GPS

  • Atualmente, se o Android pausa o GPS quando tab fica em background, não retoma automaticamente. Precisamos detectar isso e re-iniciar.
  • Considerar Sensor APIs alternativas (Generic Sensor, DeviceOrientationEvent)

🟡 Prioridade média

Geofencing avançado

  • Suporte a polígonos (não só círculos)
    • UI: tap pra adicionar vértices, double-tap pra fechar
    • Detecção: ponto-em-polígono com ray-casting
  • Zonas com horário (ex: "marina fecha às 22h")
  • Zonas dependentes de maré

Tracks como entidade separada

  • Hoje cada track vai dentro do trip como JSON. Para tracks longas (multi-dia) isso pesa no localStorage.
  • Mover para IndexedDB com sua própria tabela
  • Permitir "continuar" um track entre sessões do app

Histórico de fundeios mais rico

  • Hoje só guarda resumo. Salvar também os GPS points completos.
  • Análise: "Em que ponto aquela vez que o vento mudou?" — replay visual

Importar/exportar mais formatos

  • KML (Google Earth)
  • TCX (Garmin)
  • CSV simples (lat, lng, ts)
  • AIS (sistema de identificação automática) — importar tracks de outros barcos

Multi-barco / multi-dispositivo

  • Suportar mais de um barco no mesmo backend
  • Cada barco com seu próprio token e dados isolados
  • UI no app para "trocar de barco"
  • Compartilhamento entre tripulação (perfis com permissões)

Sincronização incremental

  • Hoje sempre envia/baixa estado todo. Para usuários com muito histórico, fica lento e pesa.
  • Versionar por entidade (id + updated_at). Sync envia só o que mudou.
  • CRDTs ou Last-Write-Wins-com-timestamp

Refatoração do frontend

  • HTML monolítico (~3500 linhas) — difícil de revisar
  • Sugestão: migrar para Vue/Svelte/Lit + Vite com build single-file
  • Manter mesma estética/UX

🟢 Prioridade baixa / nice-to-have

Tiles náuticas

  • OpenSeaMap overlay (boias, faróis, ports)
  • Mapbox com nautical layer (pago, mas mais bonito)
  • Tiles com batimetria

Previsão de vento como overlay no mapa

  • Windy Map Forecast API (precisa de chave separada, ECMWF Pro custa caro)
  • Embed da Windy via iframe
  • Visualização local de wind barbs nas próximas N horas

Histórico de tempo

  • Salvar previsão a cada fetch
  • Comparar previsão vs realidade ("disseram 15kn, foi 22kn")
  • Útil para aprender sobre microclimas locais

AIS Receiver

  • Se usuário tem receptor AIS no barco, integrar
  • Mostrar outros barcos próximos no mapa em tempo real
  • Alerta de proximidade / colisão

Compass / heading

  • Usar DeviceOrientationEvent para mostrar a proa do barco
  • Útil em modo de "arrumar a posição da âncora"

Logs de bordo automáticos

  • Detectar transições (saiu da marina → começa viagem; entrou em outra marina → encerra viagem)
  • Sugerir nome de destino com base em geocoding reverso

Manutenção preditiva

  • Com base no horímetro + histórico, sugerir próxima manutenção ("troca de óleo a cada 100h, faltam 23h")
  • Lembretes automáticos no app
  • Custo médio histórico por categoria

Modo de leme / autopilot

  • Curva de respostas de leme em função do vento
  • Salvar trim de velas que funcionaram bem em condições parecidas

Compartilhamento de relatórios

  • Gerar PDF bonito da viagem (dados + fotos + mapa)
  • Postar diretamente em redes sociais
  • Galeria pública de viagens (opt-in)

App nativo via Capacitor

  • Wrap do HTML em app Android/iOS nativo
  • Acesso a APIs que browser não tem (background GPS contínuo)
  • Notificações push reais
  • Distribuir via Play Store / App Store

Desktop

  • Versão Electron para uso no chartplotter
  • Sync com app de celular

Integração com instrumentos via NMEA

  • Receptor NMEA 0183 / 2000 via WebSerial
  • Importar dados de velocidade da água, profundidade, temperatura
  • Direção/intensidade do vento de anemômetro do mastro

IA / análise

  • Análise de viagens: "Você navegou X milhas em Y horas, vento médio Z"
  • Sugestões de melhoria: "Sua média foi 4kn — o barco rende mais 5kn neste vento"
  • Detecção de anomalias no consumo de combustível

🔮 Ideias exploratórias

"Modo MOB" (Man Over Board)

  • Botão grande de emergência
  • Marca a posição imediatamente
  • Dispara TODOS os canais com prioridade máxima
  • Inclui Coast Guard / Marinha se configurado

Previsão de chegada (ETA)

  • Com base na velocidade média e rumo
  • Atualiza em tempo real durante a viagem
  • Compartilha automaticamente com tripulação em terra

Diário social

  • Compartilhar viagens com amigos (privado)
  • Comentários, likes
  • Encontros: "Aquele veleiro está perto, quer ancorar junto?"

Comunidade do Shivao

  • App específico do barco com fotos da tripulação
  • Rituais e tradições do barco registradas
  • Tipo um "livro do barco" digital