# PROJECT_CONTEXT — Histórico e contexto

> Documento informal sobre como o projeto chegou ao estado atual. Útil para
> a equipe entender as decisões e a evolução.

## Origem

O projeto começou simples: o dono do veleiro **Shivao** queria um diário de
bordo digital para registrar viagens, manutenções, horímetro do motor e
passageiros, com possibilidade de exportar e compartilhar.

A primeira versão foi um HTML standalone com localStorage — funcional, mas
limitado. A partir daí, foi crescendo iterativamente:

## Linha do tempo

1. **v1**: HTML básico — viagens, manutenções, exportar JSON/CSV
2. **v2**: Adicionado uso no Android, fotos da câmera, áudio (MediaRecorder),
   vídeo, lembretes de manutenção futura, lista de manutenções a fazer com
   custos. Migrado armazenamento de mídia para IndexedDB.
3. **v3**: GPS — detecção de posição inicial, rastreio em tempo real,
   cálculo de milhas náuticas e velocidade em nós, mapa Leaflet com OSM.
4. **v4 (design)**: Refatoração visual completa — adoção da estética
   "marítimo editorial" com Fraunces (serif itálico), Manrope, JetBrains Mono,
   paleta pergaminho/marinha/latão.
5. **v5**: Vigia de fundeio com alarme sonoro forte, vibração, botões para
   disparar mensagens de WhatsApp/SMS/e-mail (limitação: browser não envia
   automaticamente, requer 1 toque por contato).
6. **v6**: Servidor próprio (Node.js + SQLite + Docker para Coolify VPS)
   com sincronização na nuvem, dead-man switch, e fan-out automático de
   notificações para múltiplos canais (Telegram, ntfy, e-mail SMTP, Twilio,
   webhook).
7. **v7**: Webhooks diretos do app (Telegram, Discord, genérico) sem
   precisar do servidor; histórico de fundeios com mapa de cada sessão;
   compensação de maré/corrente via "swing circle" (centro de giro
   independente da posição da âncora) com auto-recentro.
8. **v8**: Geofencing com zonas de proibição/atenção; compartilhamento
   público de posição em tempo real (link temporário com mapa Leaflet);
   importação de tracks GPX.
9. **v9**: Exportação GPX por viagem; modo economia de energia (Battery API);
   previsão meteorológica (Open-Meteo); checklists de bordo customizáveis.
10. **v10 (atual)**: Migração da meteorologia para Windy Point Forecast API
    (premium key do dono) com cálculo de vento a partir de componentes
    `wind_u`/`wind_v` e ondas em modelo `gfsWave` paralelo. Open-Meteo mantido
    como fallback.

## Princípios mantidos durante a evolução

- **Single-tenant**: o app é pessoal, do dono. Sem necessidade de gestão de
  usuários, login complexo, etc.
- **Offline-first**: o app funciona 100% sem o servidor. O servidor é uma
  camada de robustez, não dependência.
- **Single-file frontend**: facilita distribuição, instalação no celular e
  uso offline.
- **Single binary backend**: 1 container Docker, 1 banco SQLite, 1 volume.
  Deploy trivial no Coolify.
- **Estética cuidada**: o app não é um "app de app store qualquer" — tem
  identidade visual própria, faz sentido para um barco de verdade.
- **Sem dark patterns**: zero analytics, zero tracking, zero ads. Tudo do
  dono fica no servidor do dono.

## O que NÃO foi feito por opção

- **Login/registro de usuários**: por ser single-tenant pessoal.
- **App nativo iOS/Android**: maior complexidade, sem ganho proporcional para
  uso pessoal. PWA atende.
- **Service Worker**: ficou como TODO. App funciona offline-first mas não é
  PWA full ainda.
- **Push notifications via FCM**: para o uso anchor watch, polling com
  heartbeat é melhor. Para outros casos, ntfy resolve.
- **TypeScript**: por simplicidade. Equipe pode migrar se quiser.
- **Build step**: para manter o "1 arquivo HTML" como deliverável principal.

## Limitações conhecidas e aceitas

(coisas que conscientemente deixamos como estão)

- Frontend monolítico em um único arquivo HTML
- API do servidor sobrescreve estado (não merge — vence o último write)
- Mensagens automáticas SMS/WhatsApp dependem do servidor (Twilio pago) ou
  do tap manual do usuário no celular
- iOS tem limitações em algumas APIs (Battery, alguns modos de áudio com
  silencioso ativado)

## Para o time de devs

O dono está confortável em deixar vocês continuarem a evolução. Pontos
importantes:

1. **Não compliquem prematuramente**. O app funciona. Adicione complexidade
   só quando ela se justifica.
2. **Mantenham a estética**. A identidade visual é parte da experiência.
3. **Test em condições reais**. Bateria fraca, sinal fraco, sol forte, mãos
   molhadas — esses são os cenários reais.
4. **Coordenem com o dono** antes de mudanças grandes (refatorações, mudanças
   de stack, novos custos recorrentes).
5. **Backups são sagrados**. Antes de qualquer mudança no schema, garantir
   que os dados existentes do dono não se perdem.

Boa sorte! 🌊⛵
