Replace silent on-load getCurrentPosition with an opt-in button on
step 1. iOS Safari requires a user gesture for the permission prompt
to appear; calling it on page load suppresses the dialog. The button
triggers the request on tap, shows "Getting location…" while waiting,
and surfaces permission-denied / timeout errors with clear messages.
https://claude.ai/code/session_015myTTMs6yDsAGarATe5ePZ
Photo 2 serves as both end of ride 1 and start of ride 2.
Server holds in-memory session state across the 3 uploads
and writes both Excel rows after the final photo.
https://claude.ai/code/session_015myTTMs6yDsAGarATe5ePZ