Inspiration

Map apps give everyone the same bike route. You can't tell them "I'm riding with my kid," "I'm on a heavy cargo bike," or "stay off Capitol Expressway." When a route doesn't feel safe or doable, people drive instead. We wanted a bike map that actually listens.

What it does

You type how you want to ride in plain English, like "I'm riding with my 8-year-old, avoid busy roads, and grab coffee on the way." Wayfinder builds several real routes across California, measures every street on them (climbing, steepest hill, busy-road miles, bike lanes), and picks the one that best fits what you said. It explains its choice with real numbers, shows tradeoffs, and warns you honestly when no route can do everything you asked. It also handles follow-ups ("actually we're running late"), avoids streets by name, adds stops with the smallest detour, and has a 3D terrain view with a ride preview so you can see the hills before you ride.

The AI only turns your words into settings. It never picks the route. Our own code does the routing, measuring, scoring, and explaining, so the AI can't make anything up.

How we built it

  • Backend: Python and FastAPI
  • AI: Google Gemini with structured output, so it must fill in an exact form of route settings. Numbers are clamped, and it falls back to other models if one is down.
  • Routing: our own copy of the open-source Valhalla engine with all of California's OpenStreetMap and elevation data, so routes take milliseconds
  • Scoring: each route gets "penalty minutes": riding time plus extra minutes for things you dislike, weighted by your preferences. Lowest score wins.
  • Frontend: HTML, CSS, JavaScript, MapLibre, and 3D terrain tiles
  • Testing: 39 automated tests, plus a checker that sends 18 real requests to the AI
  • Dev tools: Claude Code helped write, test, and debug the code

Challenges we ran into

  • Keeping the AI to one narrow job instead of letting it invent routes
  • "Avoid bike lanes" originally added bike lanes, because the settings had no way to say "avoid." We redesigned them to go from -1 to +1.
  • The free public routing server blocked us during testing, so we built our own routing engine for California
  • Valhalla can't avoid a street by name, so we wrote our own detect, block, and re-route loop

Accomplishments that we're proud of

  • Every claim in an explanation is a measured number, not AI text
  • Our own California routing engine with no rate limits
  • The app is honest about tradeoffs and what it couldn't do
  • Follow-up conversations and a 3D ride preview

What we learned

How frontends and backends talk through APIs, how routing engines work, how to use AI responsibly by giving it a narrow job and checking its output, and that testing with real data finds bugs that examples never show.

What's next for Wayfinder

Scoring streets by bike crash history, accessibility profiles for adaptive bikes, e-bike battery range, live voice navigation, and expanding beyond California.

Built With

Share this project:

Updates

Submission history