Inspiration

The brief set by Quin Gable resonated deeply with me because I spent some time living in a van in 2017 and experienced first-hand how difficult it can be to meet people on the road. I’ve also always felt dating apps are too surface-level. I’ve used apps where profiles have no bio and people send nothing more than an emoji as their first message. This project was my opportunity to build a more intentional, route-first alternative.

What It Does

Vanpanion connects vanlifers based on overlapping routes, dates and what they’re actually doing in each place. Users build their journey by adding stops to a map, including when they’ll be there and the hobbies or activities they plan to do. The app then surfaces people whose paths genuinely intersect in place, time and shared interests.

What I Learned

Because I started this project late, I had to rely on AI more than I normally would. At first, I trusted it too much without properly reviewing its output. I quickly learned that while AI can dramatically increase productivity, it doesn’t replace engineering judgement. Testing, validating assumptions and refactoring generated code were essential to keeping the architecture stable and predictable.

How I Built the Project

I began with a simple map view using the flutter_map package and a UI that allowed users to drop pins. Firebase Firestore was used to store these pins, and Firebase Auth associated them with individual users. Riverpod StreamProviders surfaced users with overlapping routes in real time, based on location and dates. Routing is managed with GoRouter, and monetisation is integrated via RevenueCat. The entire app is built in Flutter with a focus on reactive state and clean separation of concerns.

Challenges

The biggest challenge was managing reactive state with GoRouter’s redirect method. Riverpod StreamProviders triggered redirects whenever small pieces of data changed, leading to unpredictable behaviour and navigation churn. Refactoring routing into a minimal AppGate enum resolved this by restricting redirects to only routing-relevant state. Another challenge was handling multiple connection intents (friends, dates, builders) without creating duplicate chats. Ensuring users disappeared from all swipe stacks once a connection request was sent required rethinking conversation identifiers and restructuring the underlying data model.

What's next for Vanpanion

The next step is improving real-time engagement with push notifications for connection requests and messages. I also want to expand localisation support by adding multiple languages, proper date formatting and automatic unit switching (miles/kilometres) to better support an international vanlife community. After that, I’d love to trial Vanpanion with a small group of nomads to gather real-world feedback and validate the route-based matching model.

Built With

Share this project:

Updates