MeetInTheMiddle is a web application that helps users find the perfect midpoint between two locations, displaying restaurants, entertainment venues, and other points of interest at that midpoint location.
- Interactive map interface with route visualization
- Dual location input with auto-suggestions
- Points of interest panel showing venues near the midpoint
- Professional styling with engaging animations
- Responsive design for mobile and desktop
- React with TypeScript
- Vite for build tooling (web)
- Expo for mobile deployment
- Tailwind CSS for styling
- Framer Motion for animations
- Leaflet for maps (web) / React Native Maps (mobile)
- ShadCN UI components
- Node.js (v16 or higher)
- npm or yarn
-
Clone the repository
git clone https://github.com/yourusername/meet-in-the-middle.git cd meet-in-the-middle -
Install dependencies
npm install # or yarn install -
Start the development server
npm run dev # or yarn dev -
Open your browser and navigate to
http://localhost:5173
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ Location Input ├────►│ Map Interface │◄────┤ POI Panel │
│ Component │ │ Component │ │ Component │
│ │ │ │ │ │
└─────────────────┘ └────────┬────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ │
│ External APIs │
│ - Geocoding │
│ - Routing │
│ - POI Data │
│ │
└─────────────────┘
-
Install Expo CLI
npm install -g expo-cli npm install expo
-
Initialize Expo in your project
npx expo init MeetInTheMiddle # Select 'bare workflow' when prompted -
Move your React code to the Expo project
# Copy your src files to the new Expo project -
Install required Expo modules
npx expo install expo-location react-native-maps
-
Configure app.json for your app
{ "expo": { "name": "MeetInTheMiddle", "slug": "meet-in-the-middle", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icon.png", "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#ffffff" }, "updates": { "fallbackToCacheTimeout": 0 }, "assetBundlePatterns": [ "**/*" ], "ios": { "supportsTablet": true, "bundleIdentifier": "com.yourdomain.meetinthemiddle", "infoPlist": { "NSLocationWhenInUseUsageDescription": "This app needs access to your location to find the midpoint between you and your friend." } }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#FFFFFF" }, "package": "com.yourdomain.meetinthemiddle", "permissions": ["ACCESS_FINE_LOCATION"] } } }
-
Build for iOS
npx expo build:ios
-
When prompted, choose to build:
- For simulator (development)
- As an archive (for App Store)
-
Follow the Expo CLI instructions to:
- Create or select an Apple Developer account
- Generate or select certificates and provisioning profiles
-
Once the build is complete, download the .ipa file from the Expo website
-
Use Apple Transporter or App Store Connect to upload your .ipa
-
Complete App Store listing with:
- Screenshots
- App description
- Privacy policy
- Keywords
-
Build for Android
npx expo build:android
-
When prompted, choose to build:
- APK (for testing)
- AAB (for Play Store submission)
-
Once the build is complete, download the .apk or .aab file from the Expo website
-
Create a Google Play Developer account and:
- Upload your app bundle (.aab file)
- Complete store listing details
- Set up privacy policy
- Submit for review
During development, you can test your app on real devices using Expo Go:
-
Start your development server
npx expo start
-
Scan the QR code with:
- iOS: Camera app
- Android: Expo Go app
This allows you to test your app on real devices without building native binaries.
MIT
- OpenStreetMap for map data
- OSRM for routing
- Overpass API for POI data