WatchApp¶
The WatchApp records sailing tracks on the wrist and uploads them to the logbook. It works fully offline on deck; uploads happen when a connection is there. Every platform implements the same spec. Platform sections only state what has to differ.
| Garmin | Wear OS | Apple Watch | |
|---|---|---|---|
| Status | ✅ released (store 1.0.x is the old public beta without pairing; 1.1.0 with pairing is next) | ✅ built, not released | ⏳ planned |
| Repo | apps/garmin-watchapp/ (Monkey C, Connect IQ 3+) |
apps/android/ (Kotlin, Compose for Wear OS) |
— (plan) |
| Build & code guide | AGENTS.md |
AGENTS.md (incl. Garmin → Kotlin source map) |
— |
| Platform value at pairing | garmin |
wear_os |
apple_watch |
How the platforms relate¶
- One behaviour. Screens, values, colours, texts, thresholds and upload rules are the same on every platform. Garmin was built first and Wear OS draws its instrument screens line by line like Garmin, but the reference is this spec, not either codebase.
- Platform differences are allowed only where the platform forces them: buttons vs touch and crown, OS lifecycle, storage limits, store rules. They are written under
### Garmin/### Wear OS/### Apple Watchin each file. - A change to one platform is made on all of them (
/port-change), or the gap is listed in parity.md.
Screens and flows¶
Splash ─► Start menu ─► Vessel state picker ─► Instrument screens ◄─► Action menu / Controls
│ 1 Dashboard │ Stats (2 pages)
│ 2 Track view │ Pause ─► Pause view (Garmin) / background (Wear OS)
│ 3 Environment │ Stop ─► Save view ─► exit
│ (+ overlays: alerts, │ Discard (confirm)
│ auto-stats) │ Vessel state
├─► Upload tracks (Sync view)
├─► Pair device / Unpair device (Pairing view)
└─► Settings (alerts, auto-stats)
Files¶
| File | Covers |
|---|---|
| lifecycle.md | Launch, splash, start menu, trip and track lifecycle (new, continue, resume, pause, stop, discard), crash recovery, exit |
| input.md | The control concept and its mapping to Garmin buttons, Wear OS touch / crown / stems, Apple Watch |
| menus.md | Action menu / Controls page, vessel state picker, discard confirmation |
| dashboard.md | Instrument screen 1 |
| track-view.md | Instrument screen 2: plot, zoom, turn angle |
| environment.md | Instrument screen 3: solar arc, clock, sun, position, tides, barometer, moon |
| pause-view.md | Low-power standby screen while a track is paused (Garmin; Wear OS goes to the background) |
| stats.md | Two-page stats summary |
| alerts-and-auto-stats.md | Float, battery and baro alerts, distance / time splits, overlays, Settings menu |
| recording.md | What is measured and stored while a track runs: tick, GPS, distance, timers, state periods, totals, FIT, persistence |
| sync-and-pairing.md | When uploads happen, save / sync view, leftovers, pairing and unpairing, tides from the server |
| visual-system.md | Palette, fonts, layout scaling, supported screens |
| live-surfaces.md | Ambient, Tile, Complication, Ongoing Activity (Wear OS), Apple equivalents |
| parity.md | Where the platforms differ today and why |
Shared with other products: vessel states, calculations (COG, turns, baro trend, sun, moon), SLTB track sync, device API.