Inspiration

I bike to school, and I took a lot of wrong turns before I found a route that actually works. Google Maps gives you a route, but sometimes it tells you to turn left from a side street onto a busy arterial, or sends you onto an expressway. Some bike lanes just disappear after an intersection.

After school, I want the opposite. I want to let go of the day's stress, look at some trees and flowers, and enjoy the ride home. But I always end up on big roads, watching out for cars speeding past.

So I wanted to build a bike map that is safe and reliable first. On top of that, I added a natural route, so the ride home can look much better without taking much longer.

What it does

We rebuilt the bike map with two modes: Modern and Natural.

Modern mode colors every bike route in three levels: safe, caution and risky. More importantly, it plans a route that avoids the risky parts, so you always get less traffic, wide bike lanes and a comfortable ride.

Natural mode is for anyone who wants a leisure ride. It scores every street on greenery, shade and noise, and a slider lets you choose how green you want your ride and how deep into nature you want to go.(Still 100% safe)

How we built it

  1. Road network: Cupertino's bike network from OpenStreetMap (osm), joined with the city's official Bikeways GIS layer.
  2. Street View: we sampled a point every 80 m (10k+ points) and checked/download(two layers) the street view using Google API.
  3. AI scoring: Claude Haiku 5.5 reads each spot's photos and map facts, then scores safety 1–10 with a list of hazards. It doesn't guess: it follows the Level of Traffic Stress (LTS) standard used by U.S. transportation planners, with fixed caps for known dangers like expressways and disappearing bike lanes.(rubric-based prompting+grounding) A separate Claude call scores greenery and shade, so trees can't make a dangerous road look safe. In total: 5,763 safety scores and 5,196 greenery scores.
  4. Path planning: Dijkstra with cost(edge) = length × (1 + 3 × (1 − safety)) + 1000 × (1 − junction_safety)², where risky roads and busy crossings count as longer than they really are. The Green route follows the Safe method, adding cost(edge) = length × (1 + r × (5 × (1 − greenery) + 2 × [safety < 0.4])), and both modes cap the detour.

Challenges we ran into

It was hard for us to sample the right images and get Claude's scores to match real situations. Even with the LTS rules, my own riding experience told me they weren't close enough to real life. So we revised our prompting and grounding rules many times before we got a scoring standard that feels human.

Accomplishments that we're proud of

We built a map that I'll actually use myself in Cupertino. It's really helpful, practical, and close to everyday life.

What's next for Bikescape: Safe streets, green routes

Better data: find a new way to collect street data beyond the limited Street View API.(drone follow) Mobile app: bring Bikescape to phones. More cities: expand the map beyond Cupertino. Polish: refine the core functions and features.

Built With

Share this project:

Updates

Submission history