Inspiration
Quin Gable's brief hit close to home — she described the real loneliness of solo van life: dating fails because you're always leaving, friendships are hard when you're always moving, and there's no trusted space for nomads to connect. She specifically asked for three things: a way to date and make friends on the road, activity-based connections so you meet people who share your interests, and a paid builder help section with verified professionals. Existing dating apps don't understand nomadic lifestyles — they penalize you for constantly changing locations. Van build help is scattered across Facebook groups with no accountability, no reviews, and no way to verify who's legitimate. I set out to build the app the van-life community has been waiting for — one that treats movement as a feature, not a bug.
What it does
VanMeet is a full-featured van-life community app with seven bottom navigation tabs (Discover, Chat, Scout, Routes, Builders, Likes, Profile) and five core feature pillars:
1. Discover — Nomadic Dating & Friend Finding (Quin's #1 ask: "I really struggle making friends and dating while living in a van")
The Discover tab is the heart of VanMeet. Users browse other van lifers in two view modes — a swipe card stack for quick browsing and a grid view for scanning multiple profiles at once. A toggle in the app bar switches between modes.
Filter chips at the top let users narrow discovery by intent:
- All — browse everyone
- Dating — only users looking for dating (with bidirectional gender preference matching, age range filtering based on user preferences, and distance cutoff)
- Friends — only users looking for friends
- Near Me — sorted by proximity to current location
- Routes Cross — only users whose travel routes intersect with yours
A search page (accessible from the Discover app bar) provides deeper filtering by name, interests, travel style, and looking-for intent. Users can combine multiple filters simultaneously.
Profile detail sheet — tapping any profile opens a rich detail view showing:
- Photo gallery (hero photo + thumbnails; for dating profiles, free users see photo 1 full-size and additional photos blurred with a "Upgrade to see all photos" CTA — Pro users see all photos unblurred)
- Name, age (calculated from date of birth), location, verification badges (photo verified, van verified)
- "Why You Match" section showing shared interests, route intersection info, and travel style match
- Route intersection card (if paths cross — shows city, date, and direction)
- Dating prompt and answer (for dating profiles)
- About bio, van details (type, year, name, self-converted badge), travel style, remote work status, pet details
Connection actions — on each profile, the action button is context-aware:
- For friends: "Connect" button sends a connection request
- For dating: "Interested" button sends a connection request (but requires the sender to be photo verified first — if not verified, a "Verify to Date" prompt appears instead)
- If a request is already sent: shows "Request Pending"
- If the other person sent a request first: shows "View Request"
- If already connected: shows "View Connection" linking to chat
Free users can send 5 connection requests per day; Pro users get unlimited. When the daily limit is reached, a paywall bottom sheet appears explaining the limit and offering upgrade.
Once both users accept, they become a connection and can communicate via real-time chat (powered by Supabase Realtime). The Chat tab shows all conversations with unread message badges that update in real-time.
2. Verified Builder Marketplace (Pro) (Quin's ask: "a paid builder help section")
The Builders tab is entirely gated behind the Nomad Pro subscription. Free users see a full-screen locked overlay explaining Pro benefits with an upgrade button that opens the paywall.
VanMeet supports three types of builders:
- Nomad Builder 🚐 — lives in their van and helps other nomads on the road
- Mobile Service 🔧 — travels to clients with service vehicle and tools
- Workshop/Garage 🏢 — has a fixed location where clients bring their vehicles
Each builder type has a dedicated onboarding flow (multi-step wizard) collecting: business name, tagline, bio, years of experience, builder type selection, service categories (Electrical & Solar, Plumbing & Water, Insulation & Flooring, Cabinetry & Woodwork, Mechanical Repairs, Full Custom Builds, Maintenance & Upkeep, Consultation), service radius, pricing (hourly rate range), portfolio images, and contact information.
Builder discovery includes:
- Search by name, skill, and location
- Filter by service categories/skill set
- Map view — Mapbox-powered map showing builders near the user, filterable by radius and skills
- List view — same results in a scrollable list format
Builder profile page shows: business name, tagline, bio, builder type badge, years of experience, all service categories, hourly rate range, service area, portfolio gallery, location (with staleness indicator for nomadic builders), and direct contact via multiple channels — WhatsApp, phone call, website, and Instagram handle. This direct-contact model means builders don't need to actively use the app after onboarding — especially workshop builders who have a fixed location. Their profile serves as a permanent listing.
Builder reviews — users can leave star ratings and text reviews for builders they've worked with. Reviews are publicly visible on the builder profile.
Community forum (inside the Builders section) — a categorized discussion board with four categories:
- Build Help 🔧 — ask questions about van builds
- Showcase 📸 — show off completed builds
- Tips & Tricks 💡 — share knowledge and advice
- Parts & Gear 🛒 — discuss parts, tools, and gear
Posts support images, likes, replies, and threaded discussions. Free users can browse all posts and replies without restriction. Only post creation has a daily limit — free users can create 3 posts per day; Pro users get unlimited posting.
Note: Currently, builders log in as builder accounts and van lifers log in as vanlifer accounts. A known limitation is that builder accounts cannot post in the community forum section (which lives inside the vanlifer Builders tab). This is a UX gap being addressed in the next update.
3. Route Intersector (Quin's ask: "finding a needle in a haystack" — meeting people on the same road)
The Routes tab lets users create, view, edit, and delete travel routes. Each route captures:
- Start and end points — selected via Mapbox location autocomplete with real geocoding
- Timing — estimated arrival date
- Date flexibility — slider from 0 to ±7 days, controlling how loosely the app matches timing
- Travel style / activities — tag your route with activities (Climbing, Photography, Hiking, Surfing, Yoga, Mountain Biking, Kayaking, Stargazing, Hot Springs, Music, Coffee, Dogs, Remote Work) for activity-based matching
- Women-only matching — a toggle visible only to women users, ensuring they only see and are matched with other women on that route (directly addressing Quin's safety emphasis for solo female travelers)
The app computes route intersections using PostGIS geometry on the backend — finding where two users' routes overlap in both space and time.
Matches tab shows all route matches with:
- Intersection point and city
- Date of intersection
- "Why we match" indicators
- Both users' route summaries
Wave system — on route matches, users can "wave" at each other. This is different from the Discover connection system:
- User A sees a route match and taps "Wave" 👋
- User B receives a push notification that someone waved at them on their route
- User B can "Wave Back" 👋
- When both users have waved (mutual wave), they automatically become a connection — the app creates a real connection via
create_connection_on_mutual_waveRPC, and they can chat via the existing Chat tab
This wave-back mechanic is specifically designed for the route context — it's a lightweight, low-pressure way to say "I'll be on that road too, let's connect."
Routes are available to all users (free and Pro).
4. Camp Scout (Solving the "where do I park tonight?" problem)
The Scout tab helps nomads find nearby resources. It includes multiple category filters:
- Campsites ⛺ — actual campsite data from real APIs
- RV Parks 🏕️ — RV-specific parking and hookups
- Water 💧 — fresh water fill stations
- Fuel ⛽ — gas stations
- Toilets 🚻 — public restrooms
- Dump Stations 🚿 — waste dump locations
- Events 🎪 — AI-powered event discovery (uses Google Gemini to research nearby meetups, festivals, and outdoor activities in real-time)
A radius slider (10–100 km) controls the search area. Results show name, category, distance, amenities (water, showers, power), capacity, and fee information. Tapping a result opens a detail sheet with full information and navigation options.
Subscription gating: Free users see only 3 results per category. Pro users see unlimited results plus a "Who's Here" social overlay showing nearby VanMeet users at each location.
When location services are unavailable, the app falls back to the user's profile location.
5. Trust & Safety System (Quin's emphasis: "safety is the most important thing")
Photo verification — AWS Rekognition Face Liveness detection via Supabase Edge Function (create-liveness-session + verify-liveness-result). Users complete a real-time liveness check to prove they are who their photos show. This is required for dating — if a user taps "Interested" on a dating profile without being photo verified, they are prompted to verify first.
Van verification — Google Gemini Vision AI analyzes uploaded van photos via Supabase Edge Function (analyze-van-photo). The AI confirms the photo contains a real van/camper and provides a confidence score.
Trust score system (50–100):
- Base score: 50
- Photo verified: +20
- Van verified: +15
- Community vouches: +2 each (max +20 from vouches)
- Badges: Trusted Nomad (95+), Established (80+), Active Member (60+), New Member (40+), Unverified (<40)
Verification badges are visible on every profile card in Discover, search results, and profile detail views — so users can immediately see who is verified.
Community safety: Users can report others (reasons: fake profile, harassment, inappropriate content, spam, safety concern, not a van lifer), block users (blocked users are hidden from all discovery and chat), and vouch for trusted connections.
Admin dashboard — a separate Appsmith web application (not in the mobile app) for reviewing reports, managing user bans, and monitoring verification requests. The dashboard code exists but is not yet fully deployed.
6. Profile & Settings
Profile page shows the user's complete profile with: photo gallery (up to 6 images with full-screen viewer and zoom), all personal details from onboarding, verification status with CTA to verify, and edit functionality for all fields.
Onboarding — van lifers complete a multi-step onboarding flow (6–7 steps depending on whether they select dating):
- Photo + name + gender
- Van details (type, year, name, self-converted)
- Travel style + remote work + pets
- Looking for (dating, friends, community)
- Dating extras (date of birth, gender preference, dating prompt) — only if dating selected
- Interests (hiking, climbing, surfing, photography, etc.)
- Location
Builder onboarding is a separate multi-step flow collecting business details, service categories, pricing, portfolio, and contact information — tailored per builder type (nomad, mobile, workshop).
Settings page includes: subscription management (links to paywall), blocked users list, verification hub, and account options.
Dating preferences (configurable from profile): age range (min/max), gender preference, maximum distance — these directly control which profiles appear in the Dating filter on Discover.
7. Real-time Features
- Chat — instant messaging between connections via Supabase Realtime subscriptions
- Unread message badges — live count on the Chat tab, updating in real-time
- Pending request badges — live count on the Likes tab for incoming connection requests
- Push notifications — Firebase Cloud Messaging for new connection requests, accepted connections, and route waves
- Discover auto-refresh — when a connection request is sent, accepted, or a new connection is created, the Discover page automatically refreshes via Riverpod stream listeners
How I built it
- Flutter (Dart) with Riverpod for state management and GoRouter for declarative navigation across 7 tabs with nested routes
- Supabase for auth, PostgreSQL database (26 tables, all with Row Level Security), real-time subscriptions, storage, and Edge Functions
- RevenueCat SDK (
purchases_flutter) for subscription management — single "Nomad Pro" tier withisProProviderfor gating andDailyUsageNotifierfor daily limit enforcement - Mapbox for interactive maps — route creation with geocoding autocomplete, builder location map with radius/skill filters, camp scout nearby results
- PostGIS for geospatial route intersection computation (ST_Intersection, ST_Buffer)
- Firebase for push notifications (FCM) and Gemini AI integration
- AWS Rekognition for face liveness verification (via Supabase Edge Functions with Web Crypto API for SigV4 signing)
- Google Gemini Vision for van photo verification AI analysis and camp scout event discovery
- Drift (SQLite) for local database caching of users, messages, and matches
- Clean architecture with feature-based folder structure (15+ feature modules), repository pattern, and provider-based dependency injection
Challenges I ran into
- Route intersection algorithm: Computing where two users' routes overlap in time and space required PostGIS geometry operations and careful SQL optimization. The
route_intersectionstable stores computed spatial/temporal overlaps, and the wave system on top of it required handling race conditions for mutual waves. - Trust system balance: Building a verification system thorough enough to keep the community safe (Quin's top priority) without being so burdensome that users abandon onboarding. I settled on optional-but-incentivized verification — dating requires photo verification, but friend connections don't. The visible trust score (50–100) creates social pressure to verify without hard-blocking.
- RevenueCat in development builds: The development flavor's applicationId didn't match the Google Play product configuration, causing "no plans available" during testing. I learned to test monetization flows with production builds early and to configure RevenueCat with the production package name.
- Real-time state sync: Keeping like counts, connection statuses, wave statuses, and chat messages in sync across multiple screens required careful use of Riverpod's invalidation patterns and stream listeners rather than eager refresh calls. The wave status provider uses a cache layer to prevent UI flicker during polling.
- Builder type differentiation: Supporting three distinct builder types (nomad, mobile, workshop) with different onboarding flows, location behaviors (workshop locations don't go stale; nomad locations do after 30 days), and service models required careful enum design and conditional UI rendering.
- Dating photo gating: Implementing blurred gallery photos for free users on dating profiles required a layered approach — BackdropFilter with blur overlay and lock icon, with tap-to-upgrade linking to the paywall with source tracking.
Accomplishments I'm proud of
- Every feature Quin asked for is implemented: Nomadic dating, activity-based friend finding (interest tags on profiles and routes), paid builder section (fully gated behind Pro), and verified/safe community access — all in a single, cohesive app with 7 navigation tabs.
- Real monetization strategy: The Pro subscription gates genuinely valuable features (builder marketplace, unlimited connections, full camp scout, unblurred dating photos) rather than crippling the free experience. The builder marketplace alone justifies the subscription for anyone doing a van build — builds cost $5,000–$80,000+, and direct access to verified builders with reviews is worth a monthly fee.
- Production-grade trust system: Face liveness (AWS Rekognition) + van photo AI verification (Gemini Vision) + community vouches + trust scores with visible badges — this isn't a demo, it's real safety infrastructure. Dating requires photo verification, directly addressing Quin's emphasis on safety for solo women.
- Women-only route matching: A toggle on route creation that ensures women travelers only see and are matched with other women — a direct response to Quin's experience as a solo female van lifer.
- Wave-back mechanic on routes: A lightweight, context-aware connection system specifically for route intersections — wave, get a push notification, wave back, automatically become connections. This solves the "I'll be on that road too" use case without the formality of a full connection request.
- Three builder types with tailored flows: Nomad builders, mobile service providers, and workshop/garage businesses each have appropriate onboarding, location handling, and profile presentation — recognizing that a workshop builder in Arizona has very different needs than a nomad builder traveling the country.
- 26 database tables with Row Level Security on every single table — users can only access their own data, connection-based access gates chat, and builder profiles are publicly readable.
What I learned
- Van lifers are an underserved but passionate community willing to pay for tools that genuinely help them connect safely. The builder marketplace is the clearest monetization opportunity — people spending thousands on van builds will pay for verified professional access.
- Monetization works best when it gates access to high-value content (real builder contacts, verified profiles, unblurred dating photos) rather than basic social features. Keeping friend connections and community browsing free drives engagement and organic growth.
- RevenueCat's SDK makes subscription management straightforward — the hardest part is designing the right paywall UX and choosing which features to gate, not the integration itself. The single-entitlement model ("pro") keeps things simple.
- Safety features aren't just nice-to-have for this audience — they're the core differentiator. Requiring photo verification for dating creates a trust barrier that makes the platform feel safer than generic dating apps.
- Activity-based matching (interest tags on profiles and route activity tags) creates more meaningful connections than proximity alone — Quin specifically asked for this, and it's the difference between "someone nearby" and "someone nearby who also climbs."
What's next for VanMeet
- iOS launch via TestFlight and App Store submission
- Fix builder-vanlifer account separation — allow builders to also participate as van lifers (post in community forum, use Discover) without needing separate accounts
- Stripe Connect for builder payments — enable direct payments through the app for builder bookings
- Convoy live location sharing — the convoy map page exists but real-time location tracking between convoy partners needs to be completed
- AI-powered route suggestions based on weather, season, and community activity patterns
- Invite-only access — Quin specifically requested this; implementing invite codes and referral chains to grow the community organically while maintaining quality
- Creator partnership — working with Quin to promote VanMeet to her audience for real-world distribution and feedback
Built With
- android
- aws-rekognition
- dart
- drift-sqlite
- firebase-cloud-messaging
- flutter
- google-gemini-ai
- google-play-console
- gorouter
- mapbox-gl
- postgis
- postgresql
- revenuecat-sdk
- riverpod
- row-level-security
- supabase
- supabase-auth
- supabase-edge-functions
- supabase-realtime
- supabase-storage
Log in or sign up for Devpost to join the conversation.