-
-
Secure sign-in designed for life on the road.
-
Onboarding includes profile verification to ensure authentic users and build trust within the van life community.
-
Dedicated social feed for van lifers to share travel updates, location-tagged posts, and connect with the community.
-
VanHitch’s swipe interface prioritizes shared adventures, lifestyle compatibility, and route alignment instead of static city-based matching
-
Detailed user profiles highlight lifestyle tags, travel status, activities, and social connections to encourage meaningful matches.
-
Users can share current and upcoming trips, enabling route-aware matching and travel-based discovery.
-
Real-time messaging enables matched users and friends to coordinate trips, events, and meetups seamlessly.
Inspiration
The van life movement has exploded in recent years, with an estimated $\sim 3.1$ million Americans living full-time in converted vans, RVs, and campers. Yet existing dating and social apps aren't built for people whose zip code changes every week. We asked ourselves: what if connection wasn't tied to a fixed location, but to a shared lifestyle?
VanHitch was born from the idea that nomads deserve a platform that understands their world — one where distance is fluid, community is everything, and "nearby" might mean parked at the same trailhead tonight.
What it does
VanHitch is an all-in-one dating and social platform designed specifically for van lifers and digital nomads. Key features include:
- Dating — A swipe-based matching system that understands nomadic lifestyles, not just static locations
- Traveler Discovery — Find nearby van lifers using geohash-based proximity search, whether you're at a campground, trailhead, or rest stop.
- Travel Plan Intersections — Share your upcoming route and get notified when other travelers' paths cross yours.
- Community Feed — Post updates, share van builds, ask for advice, and stay connected with the nomad community.
- Real-Time Messaging — Chat with matches, friends, and fellow travelers.
- Marketplace — Buy, sell, and trade van life gear and services within the community.
- Events — Discover and organize van life meetups, campouts, and gatherings.
How we built it
We chose Flutter for cross-platform reach (Android & iOS from a single codebase) and Firebase as our serverless backend to move fast without managing infrastructure. The app follows Clean Architecture with three distinct layers:
- Data Layer — Firebase integrations, DTOs with type-safe Firestore
withConverterfor compile-time safety. - Domain Layer — Pure business logic, use cases, and repository interfaces.
- Presentation Layer — UI powered by Riverpod for state management and GoRouter for declarative routing with auth guards.
We used geohashing to encode $(\text{lat}, \text{lng})$ pairs into sortable strings, enabling efficient proximity queries without expensive geo-computations. Admin tooling built in TypeScript seeds $\sim 300$ test users with realistic profiles, vans, travel plans, and social connections for development and demos.
Challenges we ran into
Real-time state synchronization was our biggest hurdle. With multiple stream providers feeding into screen ViewModels, we hit edge cases where Riverpod's autoDispose lifecycle and cached stream data caused infinite loading states on screen re-entry. We developed a defensive pattern of seeding initial state from cached values and guarding loading flags with null checks.
Travel plan intersections required computing overlap between users' planned routes. Efficiently matching $n$ users' geohash-encoded travel windows against each other pushed us to think carefully about query design within Firestore's document-oriented constraints.
Balancing glass morphism aesthetics with usability — our frosted-glass UI looked stunning but hurt readability on plain backgrounds. We learned to reserve the effect for image-backed surfaces and lean on Material 3 defaults everywhere else.
Accomplishments that we're proud of
- Built a full-featured social and dating platform with real-time messaging, swiping, friend systems, community posts, marketplace, and events — all from a single Flutter codebase.
- Designed a geohash-based discovery system that efficiently finds nearby travelers without costly geo-queries.
- Implemented a travel intersection algorithm that notifies users when their future routes overlap with other nomads.
- Maintained clean architecture throughout — every feature flows through proper data, domain, and presentation layers with type-safe Firestore converters and a consistent Result pattern for error handling.
- Created a robust seed system that generates $\sim 300$ interconnected test users with realistic profiles, vans, travel plans, conversations, and social graphs.
What we learned
- Geohashing as a practical technique for location-based queries in NoSQL databases.
- The importance of the Result pattern over raw exceptions for predictable error handling across async boundaries.
- How Riverpod's lifecycle interacts with cached streams — and the subtle bugs that emerge when you assume fresh state on screen re-entry.
- Designing data models that work within Firestore's constraints while keeping the domain layer database-agnostic.
- That UI polish matters, but accessibility and readability must always come first.
What's next for VanHitch
- Map View — An interactive map showing nearby van lifers, campgrounds, and points of interest in real time.
- Trip Planning — Collaborative route planning where friends can build and share road trip itineraries together.
- Van Build Showcase — A dedicated gallery for users to document their van conversion journeys with before/after photos.
- Safety Features — Check-in system and trusted contacts for solo travelers.
- Offline Support — Caching and offline-first architecture for areas with no cell signal — because van life doesn't stop when the bars drop.
- Web App — Expanding beyond mobile with a Flutter web build for planning trips from a laptop.
Built With
- android
- auth
- cloud-firestore
- cloud-functions
- cloud-messaging
- cloud-storage
- dart
- firebase
- flutter
- ios
- typescript
Log in or sign up for Devpost to join the conversation.