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>
168 lines
5.6 KiB
Markdown
168 lines
5.6 KiB
Markdown
# 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
|