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>
5.6 KiB
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
DeviceOrientationEventpara 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