About the Project

Inspiration

There's something about the road that changes you. Not in a dramatic, movie-moment way, more like a slow tilt. Your idea of "home" stretches. Strangers at a campground become the people you share coffee with at 6 a.m. You start to care less about where you're from and more about where you're going, and who's going there too.

Drift came from that feeling. We wanted an app that didn't treat van life and RV travel as a niche or a hashtag, but as a real community: people discovering each other, finding places to stay, planning meetups, and actually talking—not just liking each other's rigs from a distance. So Drift isn't "another social app." It's the app we wished existed when we thought about life on the road. Invite-only by design, because the best communities feel a little chosen. And "Drift Pro" exists so we can keep building for that community without turning the product into an ad feed.


What it does

Drift helps you discover other travelers, find campgrounds, plan activities, and connect through real conversation—all in one place.

  • Discover — Swipe through profiles in two modes: dating (find romance on the road) or friends (find travel buddies and camp neighbors). Filters and preferences (travel style, availability, what you're looking for) keep the feed relevant.

  • Find — Search campgrounds and check availability via the Campflare API, so "I want to be near this area" turns into "here are places I can actually book."

  • Plan — Create and join activities and community events, with realtime updates for attendees and event chat.

  • Connect — Full messaging: conversations, threads, and push notifications so you don't miss a reply when you're off the grid.

  • Profile & privacy — Build a profile (photos, prompts, lifestyle, travel plans). Control what you share—including the option to hide your location on the map.

  • Drift Pro — A subscription tier that unlocks premium features and helps us keep the app ad-free and focused on the community.


How we built it

Drift is a native iOS app (Swift, SwiftUI, iOS 26+) with a local Swift package, DriftBackend, that holds all backend logic and shared models. The app is a thin shell that configures the backend once at launch and lets the UI observe and react.

  • Auth & data — Supabase: sign-in (Apple, Google, email), Postgres with Row Level Security, storage for avatars and photos, Edge Functions for invite codes and account deletion. Realtime for event messages and attendees.

  • Discovery & connection — Profiles, travel plans, and preferences drive Discover. Friends and swipes live in Postgres with RLS. Messaging is full conversations and messages, with RLS and realtime where it helps.

  • Campgrounds — Campflare API for search and availability.

  • Monetization — RevenueCat for "Drift Pro" (monthly and yearly). Single entitlement check, paywall screen with purchase and restore, identity tied to Supabase user so the subscription follows the account.

  • Push — Firebase Cloud Messaging; the app registers for remote notifications and forwards the token so the backend can target devices.

  • Design — Custom colors (BurntOrange, Charcoal, etc.), custom fonts, shared components (cards, buttons, tags). Two onboarding paths: a full flow (name, birthday, location, interests, lifestyle, photos, prompts, etc.) and a shorter "friend-only" flow.

The database schema evolved over time—profiles, friends and swipes, messaging, activities, van builder, community events, reports, push, options like "hide location on the map." Each migration in supabase/migrations/ is a snapshot of a decision: what we needed at the time, and why.


Challenges we ran into

Getting discovery right. Balancing "dating" and "friends" in one feed without making either feel like an afterthought took a lot of iteration. So did filters, preferences, and making sure the stack of cards (or list of friends) felt responsive and fair. There were late nights debugging why a profile didn't show up or why a like didn't create a match—often a mix of RLS, ordering, and client state.

Realtime and consistency. Knowing when to use Supabase Realtime (e.g. new messages, event updates) vs. polling or one-off fetches was a design choice every time. Realtime is magical when it works and confusing when it doesn't; getting the subscription lifecycle and the UI updates in sync took patience.

Onboarding that doesn't quit. We want enough info to make discovery good, but not so much that people bounce. Deciding which screens are mandatory, which are skippable, and how to persist "onboarding completed" across auth and metadata was a recurring theme. Same for the welcome and preference-selection flows—they had to feel like a natural path, not a form.

Subscriptions and paywall. RevenueCat does the heavy lifting, but wiring it—logging in with the same user ID, restoring purchases, showing the paywall at the right moments, and not blocking people who already have Pro—required careful sequencing and testing. One wrong check and someone pays twice or never sees Pro features.

Privacy and safety. Location is core to "who's near me," but so is "I don't want everyone to see where I sleep." We added options like hiding location on the map and thought through what's visible to whom. Reports and blocking had to be first-class so the community could self-moderate.

Scope. Drift could have become ten apps: a dating app, a campground app, a group-event app, a van-build forum, a messaging app. Keeping it one coherent product meant saying no to a lot of "wouldn't it be cool if…" and focusing on the loop: discover → connect → message → maybe meet on the road.

App Store Approval. The Apple App Store is known for being the most difficult of the app stores to submit to. They showed no mercy on our app due to their guideline 4.3 App Design - Spam. Essentially Apple had stated that there are "too many dating apps on the App Store". Even though our app has a dating aspect, I think apple had put unnecessary focus on dating. This lead Jared and I so bring a more community first approach to Drift, and have dating be more of an add on. I think this actually ended up strengthening our app to more more community driven and to bring people together.


Accomplishments that we're proud of

  • One product, one loop. We kept Drift focused: discover → connect → message → meet on the road. That focus is what we're most proud of.

  • Full stack in one place. Auth, profiles, discovery (dating + friends), messaging with realtime, campground search, community events, subscriptions, push, and privacy controls—all in a native iOS app backed by Supabase and a single Swift package.

  • Discovery that respects intent. Two modes (dating and friends) and preferences that actually shape the feed so it doesn't feel random.

  • Onboarding that adapts. A full flow for people who want to put themselves out there, and a shorter "friend-only" flow so we don't overwhelm anyone.

  • Privacy by design. Options like "hide my location on the map," clear visibility controls, and reports/blocking so the community can stay safe.

  • A design system that feels like us. Custom colors, fonts, and components that make Drift recognizable and consistent without feeling generic.


What we learned

Building Drift taught us that a "simple" app is anything but.

On the product side: Van lifers and RVers aren't one persona. Some are looking for friendship, some for romance, some for a trail buddy for a week. Discovery had to support different modes without making the app feel scattered. Onboarding had to ask the right questions so the feed actually felt relevant. Every screen had to answer: Does this help someone on the road feel less alone?

On the technical side: We learned how much goes on under the hood—auth and session handling, real-time messaging, subscription entitlements, push notifications, location and privacy, and a backend that can grow without becoming a mess. SwiftUI and async/await made the iOS side a pleasure; Supabase gave us a real database, storage, and realtime without running our own servers. RevenueCat handled the complexity of "Drift Pro" so we could focus on when to show the paywall and what Pro unlocks. Campflare turned "find a place to stay" from a vague wish into real campground and availability data.

We also learned that state is hard. Who's logged in, whether they've finished onboarding, whether they have Pro, what they've seen in the feed—getting that right and keeping the UI in sync meant a small set of managers (Supabase, Profile, RevenueCat, Friends, Messaging, etc.) and a clear rule: one source of truth, and the UI just reacts.

Intent: what you're looking for (friends, romance, adventure). Proximity: where you are or where you're headed. Authenticity: profiles and prompts that reflect who you are, not just what you drive. Drift is the place where those three get to meet—so that the next time you pull into a campground or open the app, you're a little less alone.


What's next for Drift - Connect on the Move

We're not done. We want to deepen campground integration—surfacing availability and bookability where it matters most—and keep refining discovery so the right people find each other at the right time. We're thinking about how community events and activities can feel more alive, and how the map can become a real hub for "who's here" and "what's happening." We'll keep listening to the community: safety, privacy, and authenticity will stay at the center, and we'll keep saying no to the wrong kind of growth so Drift stays a place you actually want to open on the road.

Built with Swift, SwiftUI, Supabase, RevenueCat, Campflare, and a lot of coffee. For everyone who's ever looked at a map and thought: I want to go there, and I want to find my people along the way.

Built With

Share this project:

Updates