3. Context and scope¶
Last reviewed: 2026-11-03
The system as a black box: who and what it talks to. Scope: the watch apps, the DataField and the server. Garmin Connect and Google's services are the user's own processing, not part of the system (privacy § 1).
Business context¶
flowchart LR
skipper(["Skipper"])
crew(["Crew member"])
visitor(["Visitor with a public link"])
owner(["Owner / admin"])
sys["SailEver<br/>watch apps + server"]
stores["Connect IQ store<br/>Google Play"]
skipper -->|"records on the watch, pairs, uses the logbook, shares trips"| sys
crew -->|"joins by crew link, reads the trip"| sys
visitor -->|"reads a shared trip and its replay"| sys
owner -->|"admin area, deploys, releases"| sys
sys -.->|"watch apps are distributed through"| stores
| Partner | Exchange |
|---|---|
| Skipper | Records on the watch, pairs a watch with a 6-digit code, uses the website, shares trips |
| Crew, public visitors | Read a shared trip through a link; crew have it in their own logbook, read-only |
| Owner | Admin area, deploys from the GitHub deploy job, store releases from tags |
| Garmin Connect IQ store, Google Play | Distribution of the watch apps |
Technical context¶
flowchart LR
watch["Garmin / Wear OS watch"]
browser["Browser"]
sys["SailEver server<br/>(beta.sailever.com, api.sailever.com)"]
tiles["tiles.sailever.com<br/>Cloudflare Worker + R2"]
meteo["Open-Meteo"]
osm["Geofabrik<br/>(OpenStreetMap)"]
emod["EMODnet"]
oci["Oracle Cloud<br/>VMs, Object Storage, Email"]
gh["GitHub<br/>Actions, container registry"]
watch -->|"HTTPS JSON: pairing, SLTB segments"| sys
browser -->|"HTTPS: pages, Turbo, passkeys"| sys
browser -->|"HTTPS: vector tiles"| tiles
watch -.->|"Wear OS, paired watch only: tiles"| tiles
sys -->|"HTTPS: wind, tides"| meteo
sys -->|"download: country extracts"| osm
sys -->|"depth data (worker builds)"| emod
sys -->|"S3 API: files, backups; SMTP: mail"| oci
gh -->|"Kamal deploy over Cloudflare Tunnel"| sys
| Neighbour | Channel and data | Where |
|---|---|---|
| Watches | HTTPS, JSON with base64 SLTB segments, Authorization: Bearer device token; pairing without a token. The response carries tides for a paired watch |
device-api, track-sync |
| Browsers | HTTPS, server-rendered HTML with Turbo; passkeys and magic links | auth |
tiles.sailever.com |
HTTPS vector tiles from a Protomaps extract in Cloudflare R2, with depth and seamarks layers | maps, ADR 004 |
| Open-Meteo | HTTPS requests for wind per track and tide prediction; paid plan needed before launch | ADR 001, ingestion § Wind |
| Geofabrik (OpenStreetMap), EMODnet | Downloads on demand or on a worker VM build, for places, island names and the depth layer | ADR 013, ADR 008 |
| Oracle Cloud | S3-compatible object storage for track files and encrypted backups; SMTP for email; the VMs | DEPLOYMENT.md |
| Cloudflare | DNS, SSH tunnels, Access in front of SSH, R2 | infra map |
| GitHub | Source, the deploy job, container registry | .github/workflows |