<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/main/kotlin/org/terst/nav/vessel, branch main</title>
<subtitle>nav — android navigation app
</subtitle>
<id>https://git.terst.org/nav.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/nav.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/'/>
<updated>2026-05-07T18:58:57+00:00</updated>
<entry>
<title>refactor: extract GeoThrottle, fix fully-qualified refs, harden enum parsing</title>
<updated>2026-05-07T18:58:57+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-05-07T18:58:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=d8a53c3c9cba34dec7741395877a8dc87cebd0c5'/>
<id>urn:sha1:d8a53c3c9cba34dec7741395877a8dc87cebd0c5</id>
<content type='text'>
- Extract GeoThrottle inner class in MainViewModel; eliminates 6 state
  vars and duplicate throttle logic in loadConditions/loadWindGrid
- Fix android.util.Log.e and kotlin.math.* fully-qualified refs now that
  imports are present
- UnitPrefs: wrap valueOf() in runCatching to handle corrupt pref values
- VesselRepository.init: forEach { add() } → mapTo() for both lists
- TrackRepository: remove noisy cached-log else-branch that fired on
  every stopTrack() call

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: past tracks layer toggle + persist vessel/crew registry</title>
<updated>2026-05-04T18:37:48+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-05-04T18:37:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=1d3619c241059c3b7405498869d435835a1ed4fc'/>
<id>urn:sha1:1d3619c241059c3b7405498869d435835a1ed4fc</id>
<content type='text'>
Layers menu:
- Add "Past tracks" switch to layer picker sheet — hides/shows previous
  voyage polylines on the map, persisted across sessions via SharedPrefs

Vessel/crew registry:
- VesselRepository now takes a Context and persists all vessels and crew
  to SharedPreferences as JSON (Moshi, same pattern as BoatProfileRepository)
- Wire VesselRepository as a singleton in NavApplication so the Fragment
  and ViewModel share one instance — previously each created its own empty repo

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: vessel registry, crew management, and thermal alarm</title>
<updated>2026-04-22T05:35:49+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-22T05:35:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=eeafe2f0f3a3718bd52e9c333894e1abbc0611ab'/>
<id>urn:sha1:eeafe2f0f3a3718bd52e9c333894e1abbc0611ab</id>
<content type='text'>
- Vessel/CrewMember data classes with full profile fields
  (MMSI, callsign, flag, home port, hull type, dimensions, roles)
- VesselRepository: in-memory CRUD for own vessel, fleet, and crew;
  getOwnVessel(), getSkipper(), getCrewByRole() helpers
- VesselRegistryFragment: own-vessel card + crew list + known-vessels
  list; AlertDialog editors for add/edit; long-press to delete
- ic_vessel.xml sailboat icon; 5th bottom-nav tab "Vessel"
- ThermalMonitor: thermalFlow() using Intent.ACTION_BATTERY_CHANGED
  (battery °C) + PowerManager.OnThermalStatusChangedListener (API 29+);
  ThermalState OK/WARM/HOT/CRITICAL with distinct-until-changed filter
- MainActivity: startThermalMonitoring() sounds mob_alarm + Toast on
  HOT (≥45°C) and CRITICAL (≥50°C); auto-silences on OK/WARM
- MainViewModel: thermalState and thermalReading StateFlows
- 18 VesselRepositoryTest cases — all GREEN (test-runner)
- design.md: updated competitive matrix + feature implementation status

https://claude.ai/code/session_011h2dXbgXg3PesQMmQUNTCW
</content>
</entry>
</feed>
