Boats & devices tab
|
iOS |
Android |
| Status |
⏳ |
⏳ |
| Code |
— |
— |
Source: click dummies docs/companion_app/sailever-ios.html, docs/companion_app/sailever-android.html (Boats & devices tab, boat form, pair device).
Verified against code: 2026-10-11 (no code yet; checked against the click dummies)
Purpose
Manage the boats the user sails on and the devices that upload tracks. Pair a new watch with its 6-digit code. Same data as the website's /my/boats and /my/devices; pairing works like sailever.com/pair.
Server API
| Need |
Status |
Boats: GET/POST/PATCH/DELETE /api/v1/boats |
⏳ missing (website: /my/boats; POST already answers JSON) |
Devices: GET /api/v1/devices, PATCH (name), DELETE (unpair) |
⏳ missing (website: /my/devices) |
Pair with the code: POST /api/v1/devices/pair |
⏳ missing (website: POST /pair) |
| "Recording" state of a device |
⏳ missing; the server doesn't know it. Comes from the watch over Bluetooth, see map.md. |
Layout / behaviour
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Large title |
"Boats & devices". |
— |
Android: subtitle "The boats you sail, own or charter." / "Devices paired to your account. They upload their tracks straight to your logbook." |
| Avatar |
Initials. |
Opens Account. |
— |
| Switch |
"Boats" / "Devices". Boats first. |
Switches the list. The choice is kept while the app runs. |
iOS: segmented control. Android: tabs with icons. |
| Add |
Boats: "Add boat". Devices: "Pair device". |
Opens the boat form or pair device. |
iOS: + button in the navigation bar. Android: extended FAB at the bottom right. |
Boats
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Count |
"{n} boat(s)". |
— |
iOS only (group header). |
| Boat row |
Name (bold); "{model} · {home port}" ("–" without model, "No home port"); "{n} trip(s) · {x} NM". Own or charter: "Own boat" or the charter company. |
Opens the boat form. |
iOS: icon green for own, blue for charter; own/charter in the third line. Android: own/charter as a badge at the end. |
| Empty |
Boat icon, "No boats added yet", "Add your boat to assign it to sailing trips." |
— |
— |
| Footer |
"Boats you sail, own or charter. Assign them to trips in Edit trip." |
— |
iOS only. |
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Title |
New: "Add a boat". Existing: "Edit boat". |
— |
iOS: page sheet with ✕ and ✓. Android: bottom sheet with Cancel and "Save boat". |
| Boat name |
Required. Placeholder "Luna". |
Empty: the form stays open, the field is focused (validation). |
— |
| Model / type |
Required, placeholder "Hanse 458". |
Empty: "Boat model can't be blank" (validation). |
— |
| Home port |
Placeholder "Kiel, Germany". |
— |
— |
| Own boat |
Switch "Own boat", hint "Your own boat, no charter." |
On hides and clears the charter field. |
— |
| Charter company |
Placeholder "Navigare Yachting". Hidden for an own boat. |
— |
— |
| Save |
— |
New: toast/snackbar "Boat created successfully!". Existing: "Boat updated successfully!". Opened from Edit trip: the new boat is selected there. |
— |
| Delete boat |
Existing boats only. Text "Removes the boat. Trips sailed on it keep their tracks but no longer show the boat." |
Confirmation "Are you sure you want to delete this boat?" On confirm: deleted, toast/snackbar "Boat deleted successfully." |
iOS: red cell at the bottom. Android: red text button on the left of the sheet's actions. |
Devices
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Section head |
"Paired devices". |
— |
iOS only. |
| Device card |
Watch icon, name (bold), platform ("Garmin", "Wear OS", "Apple Watch"). Badge: "Recording" (pulsing) while a track records, otherwise "Paired". |
— |
iOS: grouped card. Android: card. |
| App version |
e.g. "1.8.2", mono. |
— |
— |
| Paired on |
Long date. |
— |
— |
| Last sync |
"{d Mon yyyy}, {HH:MM}", "Never", or "Live now" while recording. |
— |
— |
| ID |
First 16 characters of the device ID + "…", mono. |
— |
— |
| Rename |
Button. |
Dialog "Rename device", field "Name" prefilled, hint "Leave it empty to use the name the watch reports. Tracks keep the name they were recorded with." Cancel / Save. Toast/snackbar "Device saved." |
iOS: alert with a text field. Android: dialog. |
| Unpair |
Red button. |
Confirmation "Unpair this device? It can't upload tracks until you pair it again." Recording, added: "It's recording right now. The open track stays on the watch until you pair it again." On confirm: toast/snackbar "Device unpaired. It can't upload tracks any more." |
— |
| Empty |
Icon, "No devices paired yet", "Pair once and every trip from the SailEver WatchApp lands in your logbook." |
— |
— |
| Footer |
"Devices paired to your account. They upload their tracks straight to your logbook." |
— |
iOS only (Android shows it as the subtitle). |
Pair device
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Title |
"Pair a device". |
Cancel closes. |
iOS: page sheet with a large watch icon. Android: dialog with an icon. |
| Instruction |
"On your watch, open SailEver and choose Pair device. Enter the 6-digit code it shows." |
— |
— |
| Code |
Six one-digit fields, numeric keyboard. |
Typing moves to the next field. Backspace in an empty field moves back. Pasting fills all six. Non-digits are dropped. First field focused on open. |
— |
| Hint |
"The code is valid for 10 minutes." |
— |
— |
| Pair |
Primary button. Enabled with six digits. |
Shows a spinner and "Pairing". Success: closes, switches to Devices, toast/snackbar "Device paired.". |
— |
States and edge cases
- Wrong or expired code: ⏳ not designed. The website keeps the form with "Invalid or expired pairing code. Please check your watch screen." (devices.md § Submitting); more than 5 attempts in 5 minutes are refused.
- Unpairing a recording watch keeps the open track on the watch; it uploads after pairing again.
Known deviations
- The glossary says "device", not "watch", in the signed-in area. The dummies say "Watches paired to your account" and "Pair a watch once …". The website copy (
app.devices.subtitle, app.pair.*) uses "watch" too; both need the same fix. This spec uses "Devices paired to your account" and keeps "watch" only for the physical watch in instructions.
- Platform names: the dummies show "Garmin Connect IQ" and "Wear OS". The server stores
platform (garmin, wear_os). This spec shows "Garmin", "Wear OS", "Apple Watch".
- Device names differ inside the dummies: "Garmin fēnix 7 Pro" in the list, "fēnix 7 Pro" on tracks and in the live panel. One name per device: the name from Rename, or the name the watch reports.
- Copy aligned with the website: "No boats added yet", "No devices paired yet", "Pair a device", the unpair texts and messages, the rename hint, "No boat set".
- Boat messages in the dummies: "{name} added", "Boat saved", "Boat deleted", confirmation "Delete {name}?" / "Trips with this boat keep their tracks and show “No boat set”.", own-boat hint "Turn off for a charter boat and name the charter company.", unpair confirmation "Unpair {name}?". The dummies don't require a model. This spec uses the website copy and rules.
- The dummies offer Undo after deleting a boat and after unpairing. Both are final (conventions).
- "Recording", "Last sync: Live now": the server doesn't know whether a device records. These come from the Bluetooth link to the watch, so they only show on the phone that's connected to it.