Skip to contact form
← WorkiOS · 2026in progress

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.Theworkaroundeveryoneacceptsscreenshotthemapbeforeyouleaveisatacitadmissionthatthesoftwaredoesnotworkwhereitisused.

Decisions

01

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.

02

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.

03

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.

04

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

Offline vector rendering at full zoom.

Apple Watch glance view

add src to lib/case-studies.ts

Route planning screen

add src to lib/case-studies.ts

Next project

Cadence