Inspiration
Quin Gables' brief nailed a problem I've seen firsthand: dating and making friends on the road is broken. Every existing app assumes you live in one place. You match with someone, but by the time you plan a meetup, one of you has moved 300 miles. There's no platform that understands nomadic movement as a core input to connection.
The opportunity was clear — build a dating and community app where your travel trajectory is the matching engine, gate the highest-value action (messaging) behind a subscription, and use RevenueCat to manage the entire revenue path. The invite-only model from the brief was a bonus — it creates natural scarcity and real community trust from day one.
What I Learned
Paywall placement matters more than paywall design. Early on I gated generic features (extra themes, beacon limits). Conversion was hypothetically low because users didn't care enough. Moving the paywall to the messaging moment — after a user has already swiped, matched, and seen the celebration screen — puts the gate exactly where emotional investment peaks. That one change reframed the entire monetization strategy.
RevenueCat's SDK made the subscription plumbing straightforward, but the real work was deciding what to gate and when. I centralized entitlement checks in a shared Zustand store so every screen consistently enforces premium status. The native paywall via RevenueCatUI means I can A/B test pricing and copy from the dashboard without shipping app updates.
Invite-only architecture is a cold start problem. Single-use Firestore documents with transaction-based validation work cleanly, but the real challenge is distribution — how do initial users get codes? For the contest, seed data and TestFlight distribution solve this. At scale, it would need a waitlist or referral incentive loop.
Scope kills MVPs. I built a full Caravan feature (group travel coordination with multi-stop routes, RSVP, check-ins, messaging) before realizing it was too much for a focused submission. I disabled it and shipped the core experience — dating, beacons, builders — instead. The code is there for v2, but the lesson was: ship the thing that makes money first.
How I Built It
Stack: React Native + Expo (managed workflow), Firebase (Auth, Firestore, Cloud Storage), RevenueCat SDK, Zustand for state, Expo Router for file-based navigation.
Architecture: Tab-based layout with four main sections:
Dating Tab — Map-based interface showing nearby nomads as markers with synchronicity scores. Tap a profile to view their journal entries, trajectory, and shared activities. Connect via the action bar — if they accept, it's a match. Messaging is gated behind Pro ($14.99/mo), which is the core paywall moment. Lock icons and "Upgrade to Chat" copy build premium awareness before the hard gate.
Community Tab — Interest Beacons and a social feed. Users drop location-pinned activity beacons (hiking, yoga, climbing, campfire, etc.) that nearby nomads can discover and join. The feed shows journal entries from the community. Browsing and joining beacons is free; creating beacons requires Pro.
Builders Tab — A marketplace of van build experts (electrical, solar, plumbing, HVAC, carpentry). Browse profiles with ratings, specialties, and hourly rates. Booking a consultation requires Pro — another premium gate that targets a high-intent action.
Profile Tab — User profile with photo upload, van details, invite code sharing, subscription management, and a premium upsell card. Seven swappable color themes (6 locked behind Pro) with animated ripple transitions. Theme picker acts as constant premium teasing — you can see the themes, but can't use them until you subscribe.
Auth flow: Invite code validation → registration → three-step onboarding (activities, van details, trajectory). Every new user gets their own invite code to share, creating an organic referral chain.
Monetization: One product — Pro at $14.99/mo via RevenueCat. Free users can swipe, match, browse beacons, and explore builders. Pro unlocks messaging, beacon creation, builder booking, and all custom themes. The paywall appears at the natural upgrade moment: when you try to message a match you're already emotionally invested in.
Landing page: Standalone HTML/CSS/JS site at lovinvanlife.com with interactive canvas background, written proposal, and technical documentation. Deployed via Firebase Hosting.
Challenges I Faced
Getting the paywall moment right. The technical integration with RevenueCat was straightforward — the hard part was product design. Which action do you gate? Too early and users bounce. Too late and they never hit it. I tested several approaches before landing on "match free, pay to message" — a model proven by Tinder and Bumble, adapted for the van-life context with additional premium gates on beacon creation and builder booking.
Firebase + Expo New Architecture. Running @react-native-firebase with Expo's New Architecture (Fabric/TurboModules) on iOS required a custom build plugin, specific C++ compiler flags for Folly compatibility, and useFrameworks: "static". Multiple hours debugging cryptic Xcode build failures that came down to missing preprocessor definitions.
RevenueCat error handling in dev. The RevenueCat SDK logs purchase cancellations as ERROR-level events, which crashed Expo's Metro dev tools. Fixed with a custom log handler that routes ERROR/WARN logs through console.warn instead of console.error. Small thing, but it blocked development until solved.
Scope management. The brief asked for dating, community, marketplace, and invite-only access — four features that each could be their own app. I built all four plus a Caravan feature, then had to cut the Caravan to ship a focused MVP. The lesson: build the revenue path first, polish everything else second.
This app ships with a built-in Dev Panel visible at the bottom of the Profile tab. I chose to leave it accessible intentionally. A social dating app is impossible to evaluate in isolation — without other users on the platform, there's no one to match with, no beacons to discover, and no feed to scroll. The Dev Panel lets you seed 50 ealistic demo profiles and 18 activity beacons with one tap, simulate incoming match requests so you can experience the full match → celebration → paywall flow, and clear everything to start fresh. It's there because I'd rather you experience the actual product — swiping through profiles, hitting the messaging paywall, browsing beacons — than stare at an empty map and wonder what the app does.
Built With
- firebase
- react-native
- revenuecat
Log in or sign up for Devpost to join the conversation.