An iOS app that finds scenic, interesting driving routes instead of the fastest ones.
Every navigation app optimizes for the same thing: get there fast. But anyone who enjoys driving knows the best roads aren't on the interstate. They're the winding two-lane highways through small towns, the mountain passes with real elevation change, the roads that make you actually want to be behind the wheel.
Vibe Drive flips the routing problem. Given an origin and destination, it deliberately seeks out routes with more curves, more hills, and more character — then ranks them by a composite "scenic score" so you can pick the drive that matches your mood.
Traditional routers minimize time or distance. That's exactly what you don't want when the drive is the destination. But you also can't just pick random waypoints — you'll end up with absurd detours, backtracking, or routes that look interesting on paper but are actually just longer versions of the same highway.
Vibe Drive builds scenic alternatives through a pipeline:
-
Discover waypoints — Query OpenStreetMap (Overpass API) for small towns, villages, and hamlets in an expanded corridor around the direct path. These serve as candidate waypoints that pull the route off the obvious path.
-
Score and select waypoints — Each candidate is scored on four factors:
- Direction (0-100): Is it roughly along the travel direction, not behind you?
- Position (0-50): Is it in the middle third of the journey? (Best for scenic detours.)
- Place type (0-30): Hamlets score highest — smaller places tend to mean smaller, more interesting roads.
- Detour distance (0-20): Sweet spot is 3-8 km off the direct line. Too close and you're still on the highway; too far and you're just adding miles.
-
Generate route alternatives — For each selected waypoint, request a full route (origin → waypoint → destination) from OSRM. Filter out routes with excessive detour ratios or significant backtracking.
-
Analyze each route — Two dimensions matter:
- Curvature (55% of score): Sample the route polyline every ~100m and calculate the circumradius of consecutive point triplets. Tight radius = high curvature = winding road. Scored on a log scale so both gentle sweepers and tight switchbacks contribute.
- Elevation (45% of score): Fetch real elevation profiles from the Open-Elevation API. Score based on total gain/loss and elevation variance — a route that goes up 300m and back down is more interesting than one that's flat the whole way, even if they're the same length.
-
Rank and present — Routes are sorted by scenic score (0-100) and displayed on a map. Tap one to see the breakdown, then launch navigation in Apple Maps.
Not all detours are good detours. Routes are rejected if they:
- Exceed a distance-dependent detour ratio (e.g., 2x for short trips, 1.5x for long ones)
- Have more than 15% bearing reversals (backtracking)
- Are too similar to an already-selected route (within 15% distance and 70% spatial overlap)
Backtracking that sneaks past the filter still gets penalized in the final score — up to 40 points deducted.
The app is written in Swift/SwiftUI targeting iPhone.
Models/ Route, RouteAnalysis, Waypoint, ScoredPlace
Services/ RouteGenerator, RouteAnalyzer, CurvatureCalculator,
RoadNetworkService, GeoMath, LocationManager
Networking/ DirectionsService (OSRM), ElevationService,
OverpassService, GeocodingService, APIClient
ViewModels/ RouteFinderViewModel
Views/ ContentView, MapView, SearchView, RouteCardView
Config/ AppConfig (centralized constants)
| API | Purpose |
|---|---|
| OSRM | Turn-by-turn routing via OpenStreetMap road data |
| Overpass | OpenStreetMap queries for places and road metadata |
| Open-Elevation | Elevation profiles along route polylines |
| Apple Maps | Navigation launch (user's device) |
All routing and geographic data comes from open-source projects. No API keys required.
Requires Xcode 15+ and iOS 17+. Open vibe-drive-ios.xcodeproj and build. No external dependencies or package managers.