Project Story — copy this entire block into DevPost:
## Inspiration
Quin Gable described a problem every van-lifer knows: dating and making friends on the road is hard when you're always moving, and van life is a tight, protective community. Existing dating apps match by proximity — but a match 5 miles away today is 500 miles away tomorrow. There's no way to find someone heading to the same trailhead next week, no community-sourced map of that hidden free-camping spot, and no way to find a traveling electrician when your solar panel dies in rural Montana.
Trailmates was built to be the app Quin described: a trusted, all-in-one community platform purpose-built for the nomadic lifestyle.
## What it does
Trailmates is a full-featured mobile app with five core tabs, each solving a real problem for van-lifers:
### 1. Connect — Nomadic Dating
A swipe-based dating experience designed for people on the move. Each card shows the user's name, age, gender, vehicle type, travel route, next destination, compatibility score, and shared interests. The matching algorithm weighs shared interests (60%), travel style compatibility (20%), vehicle type (10%), and proximity (10%) — so you're matched with people heading your way, not just people nearby right now.
Features include super likes powered by a star economy, real-time match notifications via Supabase Realtime, a likes-received counter with badge, animated card dismiss with physics-based gestures, and multi-photo browsing with tap-to-advance. Free users get 10 swipes/day with a live countdown timer showing when they reset.
### 2. Discover — Activity-Based Friend Finding
An Instagram-style feed with two tabs: "For You" and "Following." Users post activities (hiking, camping, surfing, climbing, biking, bonfires, meetups) or schedule events with date/time, location, and max participants. Other users can like, comment, RSVP, save, follow creators, and double-tap to like with a heart animation. Each post shows distance from the viewer calculated in real time. Activities link directly to the poster's full profile. Free users can post 1 activity per day; premium users get unlimited.
### 3. Messages — Real-Time Chat & Voice Calling
Full messaging system with conversation list, unread badges, real-time message delivery via Supabase Realtime, typing indicators, read receipts, and image sharing. From any conversation, users can initiate a **real WebRTC voice call** — not a placeholder, but actual peer-to-peer audio with Supabase Realtime as the signaling layer. The call screen shows call state (connecting → ringing → connected → ended), call duration timer, mute, speaker toggle, and handles incoming calls with a global listener service.
### 4. Builders — Van Build Help Marketplace
A full marketplace where van-lifers can offer or seek help for van builds. 9 skill categories: electrical, plumbing, solar, woodwork, full builds, insulation, HVAC, design, and more. Each listing includes title, description, skills, photos, location, hourly/flat rate or budget range, urgency level, and remote-help option. Users can filter by category, sort by rating/price, set max price and minimum rating. Builders get a dashboard to manage their listings, and users can contact builders directly through the built-in chat. Listings track views, contacts, and responses.
### 5. Spots — Community-Sourced Van-Life Map
A Google Maps-powered interactive map with 28 spot categories purpose-built for van life: camping, parking, water refill, dump stations, WiFi, showers, laundry, scenic viewpoints, propane, mechanics, grocery stores, EV charging, rest areas, community hubs, trailheads, beaches, hot springs, dog parks, fishing spots, co-working spaces, campfire areas, and more. Each spot has amenities (fresh water, electric hookup, cell signal, shade, fire pit, etc.), a safety rating (safe / use caution / daytime only), pricing type (free / paid / donation / permit required), and user-submitted photos. Map and list view toggle with category filter chips, search, and "add a spot" flow. Secret spots are premium-only.
### Onboarding
A multi-step onboarding flow collects everything that makes van-life profiles unique: birth date, gender, matching preferences (gender + age range), vehicle type (van, RV, camper, SUV, truck, motorcycle), van name, build year, interests, experience level (just starting / weekend explorer / seasoned nomad), activity intensity, and distance preference. OAuth users get an invite code step to earn bonus stars.
### Profile & Personalization
The profile screen shows your stats (likes received, mutual matches, profile views), photos with premium-gated upload limits, and quick access to edit profile, edit travel route (with popular routes like PCH, Route 66, Highway 101), manage photos, view your posts, get verified, see who viewed your profile, and customize the theme.
Van-life-specific profile fields include: van amenities (solar, water tank, shower, kitchen, WiFi/Starlink, generator — 16 options), pit stop status (traveling / parked short-term / parked long-term / settled temporarily), next destination with estimated arrival, and travel route description.
### Trust & Safety
- **Photo verification** — upload an ID to get a verified badge
- **Invite codes** — earn stars for inviting trusted friends, creating a community-gated entry point
- **Block & report** — available throughout the app
- **Verified badges** displayed on profiles and matching cards
### Star Economy
Users earn daily stars (1 free, 10 premium). Stars can be gifted to other users and are required for super likes (5 stars each). The invite code system rewards both the inviter and invitee with bonus stars.
### Theme Customization
12 hand-crafted color palettes organized into categories (Nature, Warm, Road): Trailmates default, Earthy Adventure, Mountain Explorer, Coastal Wanderer, Pacific Highway, Boho Vanlife, Golden Hour, Desert Nomad, Campfire Nights, Outback, Sky Freedom, Northern Lights, Midnight Road. Full dark/light mode support.
## How I built it
**Flutter** (Dart) with Provider for state management and a unified Material 3 design system across 42 screens, 18 services, and 6 data models.
**Supabase** powers the entire backend: PostgreSQL with 30+ tables secured by Row Level Security, Auth (email/password + OTP + Google + Apple sign-in), Realtime channels for chat, presence, match notifications, and call signaling, plus Storage for photos across 7 buckets.
**RevenueCat SDK** (`purchases_flutter ^9.11.0`) handles Premium subscriptions — Monthly $9.99, Annual $69.99 — with real App Store purchases, entitlement verification, and feature gating throughout the app.
**WebRTC** (`flutter_webrtc`) for real peer-to-peer voice calling with Supabase Realtime as the signaling layer — full ICE candidate exchange, SDP offer/answer, and call state management.
**Google Maps** + Geolocator + Geocoding + PostGIS for the spots map, nearby user discovery, distance calculations, and location-based activity sorting.
**Firebase Cloud Messaging** for push notifications on new matches, messages, and incoming calls.
The database schema is 1,400+ lines of SQL with 13 RPC functions (SECURITY DEFINER), comprehensive RLS policies, and PostGIS spatial queries.
## Challenges I ran into
- **Route-aware matching** — No dating app considers where users are heading. Building a compatibility algorithm that weights travel trajectory alongside interests, travel style, and vehicle type required careful design.
- **WebRTC with Supabase Realtime** — Using Supabase Realtime channels as the signaling layer for WebRTC was complex. Handling the full call lifecycle (offer → answer → ICE candidates → connection → hangup) with a separate incoming-call listener service that works globally across the app.
- **28 spot categories** — Each category needed its own map pin color, icon, filter chip, and detail card. The spot model handles amenities, safety ratings, pricing types, and photos.
- **Premium gating at scale** — Enforcing free vs. premium limits (swipes, super likes, activities, photos, daily stars, secret spots) across 42 screens without breaking the free experience required a centralized SubscriptionService with per-feature gate checks.
- **RLS + unconfirmed users** — Securing every table with Row Level Security while supporting signup before email verification required SECURITY DEFINER RPC functions to bypass RLS for initial profile creation.
## What I learned
- Building for a niche community means every field, every category, and every flow must reflect how that community actually lives. Generic "location" fields became "next destination + estimated arrival + pit stop status." Generic interests became van amenities.
- RevenueCat dramatically simplifies monetization — entitlements, receipt validation, and cross-platform billing would be months of work to build manually.
- Supabase Realtime is powerful enough to build production-quality voice calling, live chat, typing indicators, and presence tracking — no custom WebSocket server needed.
- PostGIS spatial queries make location-based features like "spots within 50km" trivially fast.
## What's next for Trailmates
- Android release via Google Play
- Caravan/convoy feature — travel together with matched groups along shared routes
- Builder ratings and reviews with verified skill badges
- Route planning with suggested stops and meetup points
- Community events and van-life rally coordination
- Integration with campground booking platforms
- International expansion with multi-language support
Log in or sign up for Devpost to join the conversation.