Inspiration

Digital nomadism has exploded but the social infrastructure hasn't kept up. Dating and social apps are all built around the assumption that you live in one place. If you're a van lifer pulling into a new town every two weeks, there's no good way to find people nearby who are living the same way. The community exists - it's just scattered across Facebook groups and Instagram hashtags. Roam is an attempt to give it a proper home.

What it does

Roam is a dating and social app for digital nomads, van lifers, and remote workers. Users share where they're headed, and the app matches them with other nomads going to the same area (within 200km). Discovery works through a swipe-based "wave" system. There's also a service marketplace where nomads can offer skills to each other — solar installs, photography, van repairs — gated behind a premium subscription.

How I built it

React Native + Expo with TypeScript, Firebase for the backend (Auth, Firestore, Storage), and RevenueCat for subscriptions. The freemium model gives free users 5 waves per day, tracked in Firestore and gated by RevenueCat's premium entitlement. When a user hits their limit, the paywall surfaces. Premium unlocks unlimited waves, incoming wave visibility, and access to the service marketplace. If a subscription lapses, active service listings are automatically deactivated.

Challenges

Getting the discovery logic right was tricky — matching users based on overlapping travel routes rather than static location required date filtering, haversine distance calculations, and connection state management all working together. The swipe gestures needed to feel native, which meant running animations on the UI thread with Reanimated. On the subscription side, making sure wave limits persisted correctly across sessions and that the paywall triggered consistently from both button presses and swipe gestures took some iteration.

What I learned

RevenueCat made the subscription layer straightforward — one entitlement, two products, and the SDK handled the rest. The time I would've spent on StoreKit receipt validation and entitlement logic went into building actual features instead. The biggest takeaway was how much a simple freemium mechanic (daily wave limits) can drive natural conversion moments without feeling aggressive.

Built With

Share this project:

Updates