Inspiration
Commuting in London often forces a trade-off: speed, cost, or comfort. At the same time, many short journeys that could be cycled end up being fully spent on crowded trains. We were inspired by the idea that small changes - like cycling just part of your journey - could make commuting not only faster and cheaper, but also healthier. We wanted to make those hybrid journeys easy to discover.
What it does
PennyFarething finds the best routes across London by combining cycling with public transport. Instead of defaulting to the nearest station, it explores all stations within cycling distance of your start and end points.
It then surfaces the best options by balancing:
- ⏱️ Total journey time
- 💷 Cost
- 🚴 Cycling effort
The result is a set of optimised routes - including the fastest, cheapest, and best value - that often beat traditional transit-only journeys while helping users stay active.
How we built it
We built a full-stack web app using:
- Next.js for the frontend and API routes
- Google Maps APIs (Distance Matrix, Directions, Places) for cycling times, routing, and geocoding
- TfL APIs for live transit journeys, stations, and fare data
At the core is a routing engine that:
- Finds nearby stations using the TfL StopPoint API
- Batch-computes cycling times using Google Distance Matrix
- Filters viable station pairs
- Fetches transit routes and fares in parallel
- Applies a Pareto frontier algorithm to return only the best trade-offs between time and cost
We only fetch detailed map polylines for the final routes to keep things fast and efficient.
Challenges we ran into
- API coordination: Combining multiple APIs with different formats, limits, and response times required careful orchestration
- Performance: The number of possible station combinations grows quickly, so we had to aggressively batch, prune, and parallelise requests
- Fare accuracy: Getting reliable fare estimates from TfL and aligning them with journey results was tricky
- Balancing UX vs complexity: Presenting multi-modal routes in a simple, intuitive way without overwhelming the user
Accomplishments that we're proud of
- 🚀 Building a working end-to-end routing engine that genuinely improves real journeys
- 🧠 Implementing a Pareto optimisation system to intelligently filter results
- ⚡ Reducing API calls with batching (cycling times in just two requests)
- 🗺️ Clean, interactive UI that clearly visualises hybrid routes
- 💡 Creating a product that encourages healthier, more active commuting
What we learned
- How to design and implement multi-objective optimisation systems in a real-world context
- The importance of API efficiency and batching at scale
- How small UX decisions can make complex data feel simple
- That combining datasets (cycling + transit + fares) unlocks insights users wouldn’t find otherwise
What's next for PennyFarething
- 📍 Real-time updates (delays, disruptions, live bike conditions)
- 🚴 Personalisation (fitness level, cycling preferences, hill avoidance)
- 📱 Mobile-first experience for on-the-go commuters
- 🧠 Smarter recommendations based on past journeys
- 🌍 Expanding to other cities with strong transit networks
Ultimately, we want to make healthier, more efficient commuting the default — not the exception.
Log in or sign up for Devpost to join the conversation.