VanlifeVibes is a mobile-first social network and dating app designed exclusively for van lifers, nomadic travelers, and digital nomads. It solves the unique challenge of making meaningful connections when you're always on the move.
Traditional dating apps fail nomads because they assume you're staying put. Van lifers need to connect with other travelers who understand the lifestyle and share their routes β not locals who are rooted in one place.
VanlifeVibes lets you:
- Match based on travel timing β see who's in your city now, next week, or next month
- Connect with fellow nomads β date or make friends with people who get the lifestyle
- Join local events β find hiking buddies, coffee meetups, and campfire socials
- Get help with your build β access a marketplace of van builders and DIY experts
- Showcase your rig β share photos and specs of your van, RV, or skoolie
- Smart Discovery Feed β Swipe-based matching with relevance scoring based on location overlap, shared hobbies, and lifestyle compatibility
- Dual Intent Matching β Separate feeds for dating and making friends, with bidirectional gender preference filtering
- Location Timing β Set where you are now, next week, and next month to find travelers on similar routes
- Overlap Detection β See exactly when and where your paths will cross with potential matches
- Real-Time Chat β WebSocket-powered messaging with icebreakers and mini-cards per match
- Profile Prompts β Answer travel-themed questions to showcase your personality
- Vehicle Showcase β Display your van/RV with photos, specs, and build status
- Direct-Join Events β Create instant meetups (coffee, hiking, coworking)
- Swipe-to-Join Events β Host curated gatherings with approval-based attendance
- Platform-Hosted Events β Auto-generated community events in popular nomad hubs
- Group Chat β Real-time messaging unlocks when you join an event
- Event Discovery β Filter by type, location, and date
- Offer Services β Electricians, plumbers, carpenters, and solar experts list their skills
- Request Help β Post your van build challenges and get matched with experts
- Location-Based β Find builders in your current city or upcoming stops
- Direct Messaging β Chat with builders to discuss projects and pricing
Free Tier:
- 3 swipes per day (dating + friends combined)
- Basic profile and matching
- View matches and chat
Premium ($4.99/mo via RevenueCat):
- Unlimited swipes
- Future location matching (next week, next month)
- Access to Campfire Events
- Access to Builder Marketplace
- Priority in discovery feeds
graph TB
subgraph "Mobile App (React Native + Expo)"
A[Auth Flow] --> B[Main Tabs]
B --> C[Discovery]
B --> D[Campfire Events]
B --> E[Matches & Chat]
B --> F[Builder]
B --> G[Profile]
H[RevenueCat SDK] --> I[Paywall Modal]
I --> C
I --> D
I --> F
end
subgraph "Backend (Django + DRF)"
J[REST API] --> K[Auth & Profiles]
J --> L[Discovery Engine]
J --> M[Match System]
J --> N[Events API]
J --> O[Builder API]
J --> P[Subscription API]
Q[WebSocket Server] --> R[Match Chat]
Q --> S[Event Chat]
T[RevenueCat Webhook] --> P
end
subgraph "Data Layer"
U[(PostgreSQL)] --> K
U --> L
U --> M
U --> N
U --> O
V[(Redis)] --> Q
W[S3 Bucket] --> X[Media Storage]
end
subgraph "External Services"
Y[RevenueCat] --> H
Y --> T
Z[Google Play] --> Y
end
C --> J
D --> J
E --> J
E --> Q
F --> J
G --> J
A --> J
style A fill:#fb7185
style C fill:#fb7185
style D fill:#f59e0b
style E fill:#60a5fa
style F fill:#34d399
style G fill:#a78bfa
style Y fill:#ff9500
DesertSunrise β Optimistic, warm, and expansive outdoor aesthetic
- Warm Neutrals β Sand and clay tones with sunrise gradients (peach, amber, rust)
- Sunrise Accents β Warm gradient fills for primary actions
- Layered Elevation β Gentle shadows with large rounded corners
- Breathable Spacing β Generous vertical rhythm for relaxed feel
- Mobile-First β Designed exclusively for phone form factor
- Backend: Django 5.2, Django REST Framework, Django Channels (WebSocket), PostgreSQL
- Mobile App: React Native (Expo 54), React Navigation, Axios
- Auth: Token-based auth via DRF + django-allauth for email verification
- Payments: RevenueCat (
react-native-purchases) with Google Play Billing - Storage: S3 via django-storages (production), local filesystem (development)
- ASGI Server: Daphne (production)
- Deployment: AWS Elastic Beanstalk (Docker)
- Package Managers: UV (Python), npm (mobile)
βββ core/ # Django app (models, views, serializers, services, tests)
βββ vanlifevibes/ # Django project settings, URLs, ASGI config
βββ mobile-app/ # React Native / Expo app (Android)
β βββ src/
β β βββ components/ # Reusable UI (SwipeDeck, PaywallModal, SwipeCounter, etc.)
β β βββ contexts/ # AuthContext
β β βββ navigation/ # React Navigation stacks and tabs
β β βββ screens/ # App screens (Discovery, Matches, Profile, Events, etc.)
β β βββ services/ # API client, RevenueCat, WebSocket
β β βββ theme/ # Colors and styling constants
β βββ App.js # Entry point
βββ templates/ # Django email templates (allauth)
βββ .ebextensions/ # Elastic Beanstalk config
βββ Dockerfile # Production Docker image
βββ entrypoint.sh # Container entrypoint (migrate + Daphne)
βββ DEPLOYMENT.md # EB deployment guide
βββ manage.py # Django entrypoint
# Python dependencies
uv sync
# Mobile app dependencies
cd mobile-app && npm install && cd ..# Backend
cp .env.example .env
# Edit .env with your database credentials
# Mobile app
cd mobile-app
cp .env.example .env
# Edit .env with your LAN IP
cd ..psql -U postgres -c "CREATE DATABASE vanlifevibes;"
uv run python manage.py migrate
uv run python manage.py createsuperuser# Terminal 1 β Backend (bind to LAN for mobile access)
uv run python manage.py runserver 0.0.0.0:8000
# Terminal 2 β Mobile app
cd mobile-app && npx expo start --lan- API: http://localhost:8000/api/v1
- Admin Panel: http://localhost:8000/admin
- Mobile over LAN: http://<your-lan-ip>:8000/api/v1
Auth
POST /api/v1/auth/signup/β RegisterPOST /api/v1/auth/login/β LoginPOST /api/v1/auth/logout/β LogoutGET /api/v1/auth/me/β Current user
Profiles
GET /api/v1/profiles/me/β My profilePATCH /api/v1/profiles/me/β Update profileGET /api/v1/profiles/:id/β View profile
Discovery
GET /api/v1/discovery/dating/β Dating feedGET /api/v1/discovery/friends/β Friends feedPOST /api/v1/discovery/swipe/β Cast swipe
Matches
GET /api/v1/matches/β List matchesGET /api/v1/matches/:id/messages/β Match messagesPOST /api/v1/matches/:id/messages/β Send message
Events
GET /api/v1/events/β List eventsPOST /api/v1/events/β Create event
Subscription
GET /api/v1/subscription/status/β Subscription statusPOST /api/v1/webhooks/revenuecat/β RevenueCat webhook
Health
GET /api/v1/health/β Health check (used by EB)
# All backend tests
uv run python manage.py test core.tests
# Or use the helper script
./run-tests.shSee DEPLOYMENT.md for the full Elastic Beanstalk deployment guide.
If the mobile app can't reach the backend:
- Start Django bound to LAN:
uv run python manage.py runserver 0.0.0.0:8000 - Set
EXPO_PUBLIC_API_BASE_URL=http://<your-lan-ip>:8000/api/v1inmobile-app/.env - Restart Expo with cache clear:
cd mobile-app && npx expo start --lan -c - Confirm phone and laptop are on the same Wi-Fi network
- Test from phone browser:
http://<your-lan-ip>:8000/api/v1/auth/login/(a 404/405 confirms connectivity)