Skip to content

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