- Show the location button on all three steps
- Send lat/lon to the server for every photo upload
- Clear gpsCoords after each upload so each step gets a fresh capture
- Store location_1 (step 1) and location_2 (step 2) in the session
- Ride 1 LogEntry uses location_1; Ride 2 LogEntry uses location_2
https://claude.ai/code/session_015myTTMs6yDsAGarATe5ePZ
Axum 0.7 defaults to a 2 MB body limit, which rejects typical phone photos
(often 5–15 MB). Added DefaultBodyLimit::max(50 MB) to accept large images.
Also changed `catch {}` to `catch (e) {}` in the sessionStorage IIFE; the
optional-catch-binding syntax (ES2019) is not supported by all mobile
WebViews, which would have prevented the script from loading entirely.
https://claude.ai/code/session_015myTTMs6yDsAGarATe5ePZ
iOS Safari can discard page JS state when backgrounding to open the camera.
Saving gpsCoords to sessionStorage ensures the coords survive the round-trip
and are still available when handleUpload runs after the photo is taken.
Also change the server-side geocode fallback from empty string to raw lat/lon
so the location column in the Excel sheet is never silently empty.
https://claude.ai/code/session_015myTTMs6yDsAGarATe5ePZ
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