Method
How it works
The short version: we ask OpenStreetMap what's nearby, score each sight by how interesting it is, and greedily pick a loop that fits your time budget.
The budget
You give us minutes. We pair that with your chosen pace — leisurely (4 km/h), normal (5 km/h), or brisk (6 km/h) — to get a target distance. 30 minutes at normal pace is a 2.5 km loop. 60 minutes brisk is 6 km.
If you turn on calorie estimates in Settings, they use published MET values for walking: calories = MET × weight × time. Default weight is 75 kg; adjustable alongside the toggle.
The sights
We query OpenStreetMap (via the Overpass API) for everything tagged as sightseeing around your location — monuments, museums, viewpoints, artworks, castles, peaks, waterfalls, parks, fountains, lighthouses, and so on. Cafés, bakeries, and shops are out of scope by design; StrollCraft is for seeing, not for errands.
Each sight gets an interestingness score. Things that tick more boxes score higher:
- Has a Wikipedia article? +5.
- Has a Wikidata entry? +3.
- Has a photograph? +2.
- Is a historic castle or archaeological site? +5.
- Is a viewpoint, peak, or waterfall? +5.
- Is an artwork? +3.
- Is a park, garden, or nature reserve? +5.
- Is a spring, rock arch, or geyser? +3.
- Is a fountain? +2.
- Has a proper name? +1 (and no name = dropped entirely).
A bronze statue of a local poet with a Wikipedia article and a photo scores higher than a generic park bench marked as "public art." Sights scoring below 3 are filtered out.
The loop
From the top 25 scored sights near you, we walk a simple algorithm:
- Start at your location. The remaining budget is your target distance.
- From every unvisited sight, find the nearest few that fit the budget. Pick one at random, weighted toward the closest — so nearby sights are favoured but not guaranteed.
- Repeat until no sight fits.
- If you asked for a round-trip, close the loop back to your start.
Scores get a small random nudge (±2 points) each time you generate, so similarly-scored sights trade places across runs. Together with the weighted selection, this means tapping Again produces a genuinely different walk — not just a minor re-order.
It's not the "optimal" route in any mathematical sense — that's the travelling salesman problem and it's hard to solve. But for a walk, weighted-nearest-neighbor is fast, runs in under 50 ms in a Worker, and produces routes that feel right.
One-way walks
Toggle One-way walk to a landmark and the algorithm changes strategy. Instead of building a loop, it picks a high-scoring destination landmark a comfortable walking distance away — roughly 30-70% of your budget — and charts a path toward it.
Intermediate sights are selected from a corridor between your starting point and the destination, so the route feels like a purposeful journey rather than a zigzag. The result card tells you where you'll end up, and Google Maps takes it from there.
The handoff
StrollCraft doesn't do turn-by-turn navigation. Instead, once you've got a loop you like, tap Full route in Google Maps — we hand up to 9 waypoints to Google Maps in walking mode, which knows the streets better than we do and will guide you properly.
The map you see in StrollCraft is a preview. It draws straight lines between sights, not the actual walking paths. The external navigator fills that in.
What's under the hood
If you're curious about the stack: the site is Astro on Cloudflare Pages, with the algorithm running in small Cloudflare Workers. The map is MapLibre GL with Protomaps vector tiles, self-hosted. Overpass queries are cached for 24 hours so the same neighborhood doesn't keep poking the OpenStreetMap servers.