Set up Overland on iPhone

Overland (free, open source, by Aaron Parecki) logs GPS in the background and POSTs batches of GeoJSON to a URL you choose.

1. Get the device token

The Overland token lives in location-tracking/secrets/location.env (gitignored) as LOCATION_OVERLAND_TOKEN, and on the box in /etc/location-service/location.env. Print it on the Mac when you need it:

cd ~/github.com/ethomas2/location-tracking && grep '^LOCATION_OVERLAND_TOKEN=' secrets/location.env | cut -d= -f2

2. Receiver endpoint

In Overland โ†’ Settings โ†’ Receiver Endpoint, paste:

https://location.evanrthomas.com/ingest/overland?token=<LOCATION_OVERLAND_TOKEN>

The token can go in the URL (above, simplest) or in Overland's Access Token field if your version has one (it is sent as Authorization: Bearer <token>). Both work. The endpoint answers {"result":"ok"}, which is what tells Overland to drop the batch from its queue; anything else (e.g. 401 for a wrong token) and Overland keeps the points and retries, so nothing is lost while you fix it.

Set Device ID to something short like iphone (it becomes the device field; default is overland).

Setting names vary a little between Overland versions; these are the knobs that matter.

Setting Recommended Why
iOS Location permission Always, Precise on Background tracking needs Always; geofences need precise
Background App Refresh on Lets uploads happen while backgrounded
Tracking on
Significant location Enabled (not Exclusive) iOS relaunches Overland after a reboot/kill
Pause updates automatically on Big battery win when stationary
Desired accuracy 100 m (battery) or 10 m (sharper geofences) Geofence logic ignores fixes worse than 100 m
Activity type Other Fine for walking + driving
Points per batch 200
Send interval 5 min (1 min if you want fast geofence alerts) Alert latency โ‰ˆ send interval
Visit tracking optional Visits without a point geometry are ignored

Low Power Mode makes iOS defer background uploads; points still arrive later in order and geofence/landed logic handles late batches (events are timestamped with the fix time, not arrival time).

4. Check it works

Walk a few meters or tap Send Now in Overland, then on the Mac:

curl -s https://location.evanrthomas.com/healthz          # fixes count / last_fix_at go up
TOKEN=$(grep '^LOCATION_API_TOKEN=' secrets/location.env | cut -d= -f2)
curl -s -H "Authorization: Bearer $TOKEN" https://location.evanrthomas.com/location/current | jq

OwnTracks can keep running in parallel (it still goes to the separate owntracks.evanrthomas.com MQTT box); turn it off once Overland looks reliable.