Overland (free, open source, by Aaron Parecki) logs GPS in the background and POSTs batches of GeoJSON to a URL you choose.
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
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).
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.