Navver
Turn-by-turn navigation for iPhone and CarPlay, with live weather radar and a forecast for every stop.
- Swift
- SwiftUI
- UIKit
- CarPlay
- Google Maps & Navigation SDK
- Mapbox Navigation SDK
- WeatherKit
- RevenueCat
- SwiftData
- Figma
Navver is turn-by-turn navigation with the weather built in: live storm radar on the map, a forecast at every point along your route, and a warning before you drive into rain. It has around 400 monthly active users and 20+ paying Navver Pro subscribers, on iPhone and CarPlay.
I’ve written about how it started and the first rewrite. This is what it looks like now.
The redesign
Navver started as a single map screen. I redesigned it into a four-tab, card-based app (Home, Trips, Map, You), designed first in Figma with its own token set:
- Home answers “should I go?” without touching a map: current conditions, active alerts, and your next trip.
- Trips are saved, named, and scheduled, with a creation wizard, an itinerary timeline, the best departure window, and a one-tap start.
- Map is search plus a persisted radar layer you can toggle, instead of a separate radar mode.
- CarPlay is a first-class surface, not an afterthought, with its own route preview and guidance.
Living home scenes
The Home hero is an illustrated landscape that follows the time of day and the actual weather. Clouds drift, stars twinkle, pines sway on a pendulum, and rain, snow, fog, and lightning roll in based on live WeatherKit conditions. I designed the scenes in an HTML gallery first, then ported them to SwiftUI, where every layer’s motion is computed from wall-clock time inside a TimelineView and a stateless Canvas draws the particles, so there are no timers or per-view animation state. It goes static when Reduce Motion is on.
Engineering decisions
- Moving to Google Maps. I migrated navigation from Mapbox to the Google Maps and Navigation SDKs in five flagged phases, on the phone and on CarPlay, behind a backend seam so either stack could run while I verified parity. Mapbox stays for one job: routing that respects an RV’s weight rating.
- Billing safety as an invariant. Map loads and radar tiles cost money per use, so a user without access must never construct the map. A build-phase script enforces it: the map entry point may appear exactly once, and gate, onboarding, and paywall code can’t reference map or radar code.
- Two weather pipelines, kept separate. Radar tiles come from Rainbow.ai and refresh every five minutes, with forecast frames preloaded so scrubbing is instant. Point forecasts come from WeatherKit, streamed into the route sample by sample with bounded concurrency so the list fills in progressively.
- Subscriptions run through RevenueCat on top of StoreKit 2, with one entitlement state that drives the whole app’s gate.





