Arquitetura do Sistema
O RadarBov é composto por três aplicações principais que compartilham uma única API REST:
┌──────────────────────────┐
│ App Mobile (Flutter) │
│ iOS + Android │
└────────────┬─────────────┘
│
│ HTTPS/JSON
│
┌────────────▼─────────────┐ ┌──────────────────────┐
│ Backend (Elixir) │◄──►│ Banco de Dados │
│ Phoenix API REST │ │ PostgreSQL + PostGIS │
└────────────▲─────────────┘ └──────────────────────┘
│
│ HTTPS/JSON
│
┌────────────┴─────────────┐
│ Frontend Web (Vue 3) │
│ TypeScript + Vite │
└──────────────────────────┘
Componentes
| Componente | Tecnologia | Papel |
|---|---|---|
| Backend | Elixir 1.18 + Phoenix 1.7 | API REST, lógica de negócio |
| Frontend Web | Vue 3.5 + TypeScript + Vite | Portal de gestão e consulta |
| App Mobile | Flutter (Dart) | Operações de campo, offline-first |
| Banco de Dados | PostgreSQL 14 + PostGIS | Persistência e dados geoespaciais |
Infraestrutura
O sistema roda em AWS EC2 gerenciado com NixOS e Docker Compose. A infraestrutura é declarativa e versionada no repositório capybara/infra/.
Ambientes
| Ambiente | Frontend | Backend |
|---|---|---|
| Dev | dev.radarbov.app | dev.api.radarbov.app |
| Staging | staging.radarbov.app | staging.api.radarbov.app |
| Produção | radarbov.app | api.radarbov.app |
O Caddy atua como reverse proxy com HTTPS automático para todos os ambientes.
Secrets
Segredos (tokens, chaves de API, senhas de banco) são gerenciados com SOPS + Age, criptografados no repositório e descriptografados automaticamente no servidor via SSH key.
Serviços externos
| Serviço | Finalidade |
|---|---|
| SendGrid | E-mails transacionais (verificação, recuperação de senha) |
| Twilio | SMS (verificação de conta, alertas) |
| OneSignal | Push notifications mobile (ver Notificações Push) |
| Agrotools | Verificações de Conformidade Socioambiental |
| MinIO / S3 | Armazenamento de arquivos (PDFs de GTA, imagens) |
CI/CD
- Backend e Frontend: GitHub Actions, build de imagem Docker, push para GHCR
- Mobile Android: GitHub Actions automático no merge para beta
- Mobile iOS: build manual com
flutter build ipa→ App Store Connect - Obsidian Vault: workflow manual no repositório
radarbov-obsidian