What I want a ride to be
In a city: quiet streets, separated bike paths, parks and water, and a view or a café worth stopping for. Outside it: steady climbs rather than walls, big views, and the roads local cyclists love. A ride should fit the time you have, with time to stop, and match how you like to ride.
Those preferences become rules. Software then applies them to every street in a region, so a new city starts with good rides on day one, and every city is judged the same way. No one picks a route by hand to promote it.
Where the data comes from
- Streets and paths: OpenStreetMap, the open map made by volunteers. It gives the bike lanes and tracks, speed limits, one-way streets, surfaces, signed bike routes, mountain passes and drinking water. Each build reads a recent copy.
- Hills: open elevation data (Mapzen Terrarium tiles on AWS), for the slope of every stretch and the climbing on every ride. In the US the tiles carry 3DEP data courtesy of the U.S. Geological Survey.
- City open data: street trees in Paris and Lyon, for shade, and the Grand Annecy council's list of public fountains, to confirm water.
- The Annecy forecast comes from MET Norway. It is shown for information and never changes which rides you see.
- Photos in ride previews are real, openly licensed photos from Wikimedia Commons, Panoramax and Mapillary, credited on screen. Never generated images.
I don't use data whose terms forbid it. That rules out, for example, the Strava heatmap. Each source and what its licence allows is kept on a list I check before adding anything new.
How each street is scored
Every rideable street and path gets a score from three things:
- Traffic stress: how it would feel to ride, from the speed limit, the road's size and the kind of bike lane, if any. A separated path scores best; a fast road with no lane scores worst.
- Surface: smooth asphalt over gravel, cobbles or unknown.
- Slope: steep stretches cost more.
These three multiply, so any one of them can rule a street out: a smooth, flat road full of fast traffic is still a bad street. Shade from trees, green space nearby and signed bike routes can only add a little, never more than a fifth of the score, so they can't make a bad street look good.
How rides are put together
In a city, the software routes thousands of short trips across town along the most comfortable streets, not the shortest. The streets those trips share become the city's backbone, and rides to parks, along water and around loops are built on it. In Paris, trips routed this way spent 72% of their distance on separated bike infrastructure, against 22% for the shortest routes, for about 8% more distance.
Outside the city, rides follow mapped roads to named passes, lakes and villages, using the full slope profile of the route. Road rides avoid surfaces tagged as gravel or unpaved and unverified tracks; a road with no surface tag is assumed paved, and the ride page counts how much of a ride that applies to.
Each ride is then matched to how you ride. These are the starting assumptions:
| Pace | On the flat | Climbing | Traffic | Steepest sustained |
|---|---|---|---|---|
| Family & gentle | 12 km/h (7 mph) | 150 m (490 ft) an hour | Quietest only | 5% |
| Casual | 16 km/h (10 mph) | 300 m (980 ft) an hour | Quiet | 7% |
| Moderate | 21 km/h (13 mph) | 500 m (1,640 ft) an hour | Some busier stretches | 10% |
| Sporty | 26 km/h (16 mph) | 700 m (2,300 ft) an hour | Any | Any |
An e-bike climbs about 1.8 times faster and handles slopes 3 points steeper; riding with kids keeps to the quietest streets and gentle slopes. Riding times are shown as a range, a little under to a fifth over the estimate, because these assumptions are guesses until real riding data tunes them. Your time budget is the whole outing, so it leaves room for stops.
Checking a ride can be ridden
Before a ride is published, every stretch of it is checked against the map's access rules: private roads, paths closed to bikes, and seasonal closures with dates. A ride that crosses anything restricted or unclear is held back. This is a check of the map, not of the road on the day.
Checking against real riders
Paris and Lyon publish counts from bike counters on their streets. I keep these out of the scoring and use them only as a check. The comfortable routes do pass the busier counters more often, a weak match in Paris and a moderate one in Lyon. But most counters sit on bike paths already, so they can't prove the scoring tells a good street from a bad one. I say so rather than call it validation.
Riders can now compare their own recorded rides with ours on Your rides: which of our rides and climbs they've ridden, and how long they take at their own pace. That happens on the rider's device and nothing is sent to me, so riders' rides do not yet shape the rides here. The next step is for riders who choose to send what their rides show (which rides and climbs, and their real riding times, never the tracks) so the rides and their timings can be checked and improved. I'll say so here when that has happened, starting with my own rides.
What the data can't know
- Roadworks, closures, events and traffic on the day.
- How rough a surface really is, or whether a mapped path has washed out.
- Whether a fountain is running. Water is marked as mapped, not checked, and seasonal where the map says so.
- Whether a street feels safe to you. The traffic score is an estimate, not a safety rating.
So every ride is labelled as modelled until it has been checked, and you should check conditions before you go. How a ride is checked, and how to tell me about a mistake, is in the review policy.
Software and AI
The rides, their times and their descriptions come from the data and the rules above, not from an AI writing about places. I use AI assistants, mainly Anthropic's Claude, to help write the software and the site; I set the rules, and I review what ships. The photos are real and credited, never generated.