Vancouver Trip Planner: Smart Parking Made Simple 🚗
Inspiration
As lifelong Vancouverites, we've all experienced the same frustrating ritual: circling downtown blocks endlessly, watching parking meter prices fluctuate throughout the day, and inevitably ending up either broke from overly-priced parking or late because we parked too far away.
The question became: What if we could turn Vancouver's confusing parking system to our advantage?
What It Does
WYHD (Whatever Your Heart Desires) Trip Planner is an intelligent route optimization system that solves this problem by minimizing both parking costs and travel time for multi-stop trips around Vancouver.
Core Features:
- *Smart Route Planning: Input multiple destinations and get optimized route options considering time and price
- ** Cost-Aware Optimization**: Analyses Vancouver's time-dependent parking rates (9 AM-6 PM: ~$3.50/hr, 6 PM-10 PM: ~$2.00/hr, 10 PM-9 AM: FREE) to give you parking suggestions
- ** Time-Efficient Routing**: Considers real-time traffic patterns using Google Maps APIs
- ** Multi-Objective Solutions**: Users can choose between cheapest, fastest, or balanced hybrid routes
- ** Precise Parking Placement**: Finds the best parking meters within walking distance of each destination
- Seamless Navigation: One-click integration with Google Maps for exact directions
How We Built It
Architecture Overview
We built a full-stack solution with a Go backend and Next.js frontend, designed for scalability and real-time performance.
Backend (Go + Gin)
├── internal/
│ ├── domain/ # Core business models
│ ├── service/ # Optimization algorithms
│ ├── repository/ # Vancouver Open Data integration
│ └── handler/ # RESTful API endpoints
├── pkg/maps/ # Google Maps API wrapper
└── cmd/ # Application entry point
Multi-Objective Route Optimization:
- Generates route permutations for stop ordering
- Evaluates parking options within 2km radius of each destination
- Limits to top 10 closest meters per stop to prevent combinatorial explosion
- Uses greedy approach with future potential for genetic algorithms
Spatial Optimization:
- Calculates walking distances using Haversine formula
- Integrates real-time traffic data from Google Maps Distance Matrix API
- Balances parking cost vs. walking convenience
Frontend (Next.js + TypeScript)
- Modern UI/UX: Clean, responsive design with Tailwind CSS and shadcn/ui components
- Interactive Maps: Google Maps integration showing parking locations and routes
- Real-time Search: Places Autocomplete for seamless address input
- Progressive Enhancement: Loading states and error handling for robust UX
- Responsive Design: Works seamlessly on desktop and mobile devices
Data Integration
- Vancouver Open Data Portal: Live parking meter locations, rates, and time limits
- Google Maps APIs: Geocoding, Distance Matrix, and Places services
- Real-time Processing: All calculations performed server-side for accuracy
What We Learned
Technical Deep Dives
1. Multi-Objective Optimization is Hard Initially, we tried to solve this as a single optimization problem, but quickly realized that cost and time optimization often conflict. A cheap parking spot might be far from your destination, while the closest spot might be expensive. We learned to embrace this complexity by providing multiple solutions rather than trying to force a single "best" answer.
2. Time-Dependent Pricing Complexity Vancouver's parking system is more intricate than expected:
- Different rates for weekdays vs. weekends
- Multiple time periods per day (9 AM-6 PM, 6 PM-10 PM, 10 PM-9 AM)
- Varying time limits (some meters max 2 hours, others 4 hours)
- Payment method restrictions (cash-only vs. credit card) ```
3. API Rate Limiting and Caching Strategy Google Maps APIs are powerful but expensive. We learned to:
- Cache geocoding results to avoid repeated lookups
- Batch distance matrix requests efficiently
- Implement request deduplication for common routes
- Consider implementing our own tile server for production scaling
4. User Experience vs. Algorithmic Complexity The tension between providing comprehensive options and maintaining simplicity taught us valuable lessons about product design. We settled on showing three clear options (cheapest/fastest/hybrid) rather than overwhelming users with dozens of possibilities.
Challenges We Faced
1. The Combinatorial Explosion Problem
Challenge: With n stops and m parking meters per stop, we potentially have n! \times m^n route combinations to evaluate.
Solution: We implemented several optimizations:
- Limited parking options to the 10 closest meters per destination
- Used permutation generation only for stop ordering, then greedy parking selection
- Future optimization: Implement genetic algorithms for larger problem instances
2. Vancouver Open Data API Reliability
Challenge: The parking meter dataset is large (~17,000 meters) and the API occasionally returns incomplete data or times out.
Solution:
- Implemented robust error handling and retry logic
- Added fallback mechanisms for missing rate data
- Built comprehensive test coverage to catch data inconsistencies
3. Real-Time vs. Batch Processing Trade-offs
Challenge: Google Maps Distance Matrix API calls are expensive and slow for real-time route optimization.
Solution:
- Implemented intelligent caching of travel time estimates
- Used approximation algorithms for initial filtering
- Only call expensive APIs for final route calculations
What's Next
Our hackathon project has a solid MVP, but we envision more extensions to come:
Immediate Improvements
- Real-time Parking Availability: Integrate with ParkVancouver's live occupancy data
- Weather Integration: Adjust walking time estimates and parking spot availability based on weather conditions
- Transit Options: Add public transit as an alternative to driving between stops
- Mobile App: Native iOS/Android apps with offline caching
Advanced Features
- Machine Learning: Predict parking availability patterns using historical data
- Social Features: Share trip plans and parking tips with friends
- Business Integration: Partner with local businesses for validated parking deals
- Carbon Footprint: Calculate and optimize for environmental impact
Technical Scaling
- Microservices Architecture: Split into dedicated services for routing, pricing, and maps
- Event Streaming: Real-time updates using Apache Kafka
- Global Expansion: Adapt the system for other cities with complex parking systems
Impact and Vision
WYHD Planner addresses a real problem that affects thousands of people daily. By making Vancouver's complex parking system work for residents instead of against them, we can:
- Save Money* Help users avoid expensive parking zones during peak hours
- Reduce Traffic: Minimize time spent circling blocks looking for parking
- Improve Quality of Life: Turn stressful trip planning into a simple, optimized experience
- Support Local Business: Make it easier for people to visit multiple destinations in one trip
The mathematics behind our solution, combining spatial optimization, temporal pricing models, and multi-objective decision theory, demonstrates how hackathon projects can tackle complex algorithmic challenges while delivering immediate user value.
We built this because we're tired of Vancouver's parking system winning. Now, we win. :)

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