Ridgeline
An offline-first trail navigator for iPhone and Apple Watch, built for the moment the signal drops.
Role
Design & development
Timeline
14 weeks
Platform
iPhone · Apple Watch
Stack
Swift · SwiftUI · MapKit
The problem
Everyhikingappwetriedfailedinthesameplace:thetrailhead.Coveragedisappearsamilein,andappsthatstreammaptilesondemanddegradeintoabluedotonagreyrectangleexactlywhenyouneedthemmost.Theworkaroundeveryoneaccepts—screenshotthemapbeforeyouleave—isatacitadmissionthatthesoftwaredoesnotworkwhereitisused.
Decisions
Vector tiles, not raster
Raster tiles are simpler to cache but a useful region ran to several gigabytes, which nobody downloads over hotel wifi. Vector tiles cut a region to roughly 40MB and render crisply at any zoom. The cost was writing our own style layer, which took three weeks we had not planned for.
Duty-cycled GPS
Continuous high-accuracy location drained a full charge in under five hours — useless for a day hike. We sample aggressively when the user is moving and back off hard when they are stationary, then interpolate. Accuracy drops slightly while resting, which is precisely when it does not matter.
CloudKit over a custom backend
We prototyped a bespoke sync service and threw it away. CloudKit gave us conflict resolution, free storage against the user’s own quota, and no server to keep alive at three in the morning. The trade is that we are locked to Apple accounts — acceptable for an Apple-only product, and we would revisit it the day Android is on the table.
The watch app came first
We built the Watch experience before the phone app, on the theory that if the hardest surface works the easy one follows. It inverted several interface decisions — glanceability forced a much blunter information hierarchy, and the phone app is better for having inherited it.
Outcome
Ridgeline is in TestFlight with a small group of hikers while we tune battery behaviour on longer routes. The figures below are from our own instrumented builds, not App Store data.
0MB
typical region download
0h
tracking on one charge
0
network calls on trail
<0s
cold launch to map
Screens
Trail map with elevation profile
add src to lib/case-studies.ts
Apple Watch glance view
add src to lib/case-studies.ts
Route planning screen
add src to lib/case-studies.ts
Next project