# Voyage history Finished voyages read back in the Voyages tab as a list, and each one opens a detail screen with the stats, a map and a timeline of every event. From there you can also export the track as a GPX file or delete the voyage. ## How to use it 1. Open the Voyages tab. It lists finished voyages only, newest first. Each row shows the date and a second line like "12.3 nm · 4:05 · 1:20 eng" (distance, duration, engine hours). An amber warning triangle means at least one event has no coordinates. With nothing logged yet you see "No voyages yet" and "Start one from the Helm." 2. Tap a voyage to open it. The date is the title, with the start and end times underneath. 3. Read the stat card (DISTANCE, DURATION, ENGINE), the map and the TIMELINE. Each timeline row shows the event, the distance covered so far (or a dash when unknown), the time, and the position, for example 48°51.53'N 2°20.12'E. A row without a position shows an amber "No coordinates". 4. Tap "Export GPX" in the top right to open the share sheet. The button only appears when the voyage has a recorded track. 5. To delete one voyage, swipe its row and confirm "Delete Voyage?". To delete everything, use the menu at the top right, "Delete All Voyages", and confirm. 6. A voyage still in progress is not in the list. Find it on the Helm tab; it appears here once you hold "End Voyage". ## What happens behind the scenes - Engine hours pair each Engine On with the next Engine Off and add up the time between them. An Engine On with no later Engine Off is not counted. With no engine events the card shows "0:00". - Distance is added up from track points saved about every 45 metres. A leg between two points is skipped as a gap when more than 120 seconds passed, when it implies a speed above 30 knots, or when the GPS accuracy was worse than 100 metres (WAK-37). One nautical mile is 1852 metres. The card shows the total stored when the voyage ended. - Each time is shown in the time zone where the event was logged, with its abbreviation, so a voyage across zones still reads correctly. Positions are shown as degrees and decimal minutes. - The GPX file is GPX 1.1. It holds the whole track, and every event that has a position becomes a waypoint with its name. All times in the file are in UTC. - A voyage can disappear while its screen is open, for instance when it is deleted on another device. The screen notices and closes itself instead of crashing. ## Known limits - Voyages recorded before build 9 keep the distance stored by the old 30 second rule and are not recalculated. The newer figure is still waiting for the owner to confirm it on real voyages. - The "SPEED & DISTANCE" charts are built but do not show up yet. The app never stores a speed for track points, and the charts need at least two speed readings, so the section stays hidden on every voyage. - When the charts do appear, their distance line is recalculated from the track with the current gap rule, so on older voyages it can differ from the stored figure on the stat card. - Events without a position are flagged in amber, and the stat card adds a line like "2 of 9 events without coordinates". - "Export GPX" needs at least two track points. - Deleting a voyage is permanent and cannot be undone. ## Related tickets - [#53](https://github.com/svenfi/first_claude_app/issues/53): WAK-37, distance under-read on slow legs. The fix shipped in build 9. - [#45](https://github.com/svenfi/first_claude_app/issues/45): WAK-29, GPX export. - [#51](https://github.com/svenfi/first_claude_app/issues/51): WAK-35, speed and distance charts. - [#56](https://github.com/svenfi/first_claude_app/issues/56): the charts never appear because track points never store a speed. ## Where it lives `ios/Wake/Views/` (`VoyagesTabView.swift`, `VoyageListView.swift`, `VoyageListRow.swift`, `VoyageDetailView.swift`, `VoyageDetailHeader.swift`, `VoyageDetailEventRow.swift`), `ios/Wake/Models/GPXExport.swift`, `ios/WakeCore/Sources/WakeCore/` (`EngineHours.swift`, `DistanceCalculator.swift`, `DistanceFormatter.swift`, `GPXBuilder.swift`, `VoyageChartSeries.swift`, `Coordinates.swift`, `TimeFormatting.swift`)