Inspiration
One of our teammates went to Montreal for ICSE and had one extra day to explore the city. He had a list of places he wanted to see, but no good way to turn it into a realistic day plan. That experience sparked FlashPlanner.
What it does
FlashPlanner builds a personalized city itinerary based on the user’s available time, interests, budget, pace, and transportation choice.
It does more than recommend places. It checks opening hours, travel times, weather, meal breaks, and how long each stop may take. It then orders the stops into a route that can actually fit the day.
Users can also keep or remove stops, re-plan during the trip, compare transit and ride options, view the route on a map, and export it to Google Maps or their calendar.
How we built it
We built the backend with FastAPI and used Gemini to understand trip preferences, score places, estimate visit lengths from reviews, and explain the final plan.
We used Google Places for locations, ratings, reviews, prices, and opening hours. Google Routes provides travel times and route shapes, while Google Weather helps us move outdoor activities away from rain.
The final schedule is created with OR-Tools. It decides which places fit and in what order while respecting time, distance, opening hours, budget, meals, weather, and the user’s pace.
For the Waymo challenge, we added a walk-and-ride option with estimated ride time and cost. We also show how that plan compares with transit and link users to Waymo availability information where relevant.
Challenges we ran into
The hardest part was making the itinerary realistic. Generating a list of popular places is easy. Deciding which place should come next, whether it is open, how long the visit should take, and whether the full route fits the user’s time is much harder.
Many constraints affect each other. A museum may be open but too far away. A park may fit the route but fall after sunset. A restaurant may be nearby but not work with the requested meal time. We had to balance all of these cases without creating an empty or exhausting day.
We also worked through limits in the APIs. Google Places only returns a small number of reviews, transit schedules are not available for every date or city, and ride prices are estimates rather than live quotes. We added sensible fallbacks and made these limits clear in the app.
Accomplishments that we're proud of
We built a fully working app in 36 hours.
FlashPlanner does not just show a demo route. It creates multi-day plans, uses real travel data, handles weather and opening hours, supports fixed appointments, and lets users re-plan while they are already exploring.
We are also proud that the route explains its choices. Users can see why a place was included, why another one did not fit, and how much time they will spend traveling.
What we learned
We learned that combining APIs is not enough. The important part is using their data together in a useful way.
Google’s APIs gave us places, reviews, routes, maps, weather, and local details. Gemini helped turn that data and the user’s notes into structured decisions. OR-Tools helped us make those decisions fit into a real schedule.
For the Waymo challenge, we learned that mobility is part of the planning problem, not just a line between two places. Travel time, pickup time, cost, availability, and walking all change which itinerary makes sense.
What's next for FlashPlanner
Next, we want to add live ride quotes and deeper Waymo support as more integrations become available. We also want collaborative trips, easier itinerary sharing, ticket links, and better live re-planning when plans change during the day.
Built With
- css
- fastapi
- geminiapi
- googlemapsplatform
- googleroutesapi
- googleweatherapi
- html
- javascript
- or-tools
- python
- sqlite
- vercel


Log in or sign up for Devpost to join the conversation.