A revolutionary social platform for van lifers, RV travelers, and digital nomads. Unlike traditional dating apps that show people nearby, Nomadic App matches users based on where their paths will intersect in the future.
Predictive path matching: "You and Sarah will both be near Moab in 3 days - want to climb together?"
- Node.js (v20.19.4 or higher recommended)
- Expo CLI
- Expo Go app on your phone (iOS/Android)
- Supabase account
-
Install dependencies:
npm install
-
Configure Supabase:
a. Create a new Supabase project at https://supabase.com
b. Run the SQL schema from the project documentation to set up your database tables
c. Create a storage bucket called "profiles" (make it public for MVP)
d. Copy
.env.exampleto.envand add your Supabase credentials:cp .env.example .env
Then edit
.envwith your actual values from Supabase Dashboard > Settings > API -
Start the development server:
npm start
-
Run on your device:
- Scan the QR code with Expo Go (Android) or Camera app (iOS)
- Make sure your phone and computer are on the same WiFi network
- ✅ User authentication (email/password)
- ✅ Profile creation with van photos
- ✅ Route input system
- ✅ Map visualization of routes
- ✅ Route intersection algorithm
- ✅ Swipe interface (Tinder-like)
- ✅ Real-time messaging
- ✅ Match notifications
- ✅ Window of opportunity countdown
nomadic-app/
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── RouteInput.tsx
│ │ └── SwipeCard.tsx
│ ├── screens/ # App screens
│ │ ├── AuthScreen.tsx
│ │ ├── ProfileSetupScreen.tsx
│ │ ├── HomeScreen.tsx
│ │ ├── SwipeScreen.tsx
│ │ ├── MapScreen.tsx
│ │ ├── MessagesScreen.tsx
│ │ └── ChatScreen.tsx
│ ├── navigation/ # Navigation setup
│ │ └── AppNavigator.tsx
│ ├── services/ # Backend services
│ │ ├── supabase.ts
│ │ ├── auth.ts
│ │ ├── database.ts
│ │ ├── storage.ts
│ │ └── matching.ts
│ ├── utils/ # Helper functions
│ │ ├── types.ts
│ │ └── routeCalculations.ts
│ ├── contexts/ # React contexts
│ │ └── AuthContext.tsx
│ └── constants/ # App constants
│ └── theme.ts
├── App.js # Root component
└── package.json
- Frontend: React Native with Expo
- Navigation: React Navigation
- Maps: React Native Maps
- Backend: Supabase (PostgreSQL + Auth + Storage + Real-time)
- State Management: React Context API
- Geospatial: Turf.js
- Date/Time: date-fns
The app uses Supabase with the following main tables:
profiles- User profilesroutes- Travel routespotential_matches- Calculated route intersectionslikes- User likesmatches- Mutual matchesmessages- Chat messages
See the full schema in the project documentation.
- Create an account with email/password
- Set up your profile (name, age, bio, van type, photos, interests)
- Create a route (start location, end location, dates)
- Click "Find Matches" to calculate route intersections
- Go to Swipe tab to see potential matches
- Swipe right to like, left to pass
- When both users like each other, you'll get a match
- Go to Messages to chat with your matches
User 1:
- Start: Denver, CO (39.7392, -104.9903)
- End: Moab, UT (38.5733, -109.5498)
- Dates: 2026-03-01 to 2026-03-15
User 2:
- Start: Salt Lake City, UT (40.7608, -111.8910)
- End: Arches National Park, UT (38.7331, -109.5925)
- Dates: 2026-03-05 to 2026-03-20
These routes should intersect and create a match!
Create a .env file with:
EXPO_PUBLIC_SUPABASE_URL=your-supabase-url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
- Video intro cards
- Advanced compatibility algorithm
- Push notifications
- Safety check-in system
- Route editing
- Profile editing
- Real-time location tracking
- Google Places API integration
- Date picker UI
This is a prototype/MVP. Feel free to fork and enhance!
MIT License
- Make sure you've created a
.envfile with your Supabase credentials - Restart the Expo development server after adding environment variables
- Make sure you've granted location permissions
- Check that your route has valid coordinates
- Ensure your Supabase "profiles" storage bucket exists and is public
- Check that you've granted camera roll permissions
- Make sure you've created a route first
- Ensure there are other users with routes that intersect yours
- Check that date ranges overlap
For issues or questions, please refer to the project documentation.
Built with ❤️ for the nomadic community