Back to projects
#01Feb 20264 min read

MeetPoint

Calculate the optimal meeting point for a group of people on a map.

ReactGeolocation
CursorClaude

The Problem

You have 3 friends, each in a different part of the city. Where do you meet? Everyone opens Google Maps and starts suggesting places near themselves. Thirty minutes of "how about..." messages later, you still haven't decided.

MeetPoint solves this by finding the optimal meeting point -- the location that minimizes total travel time for everyone.

How It Works

Adding Participants

Each person shares their location (via GPS or by entering an address). The app supports 2 to 5 participants.

Finding the Optimal Point

For 2 people, the algorithm finds the midpoint. For 3 or more, it uses a grid search:

  1. 01Calculate the geographic center of mass of all participants
  2. 02Generate a grid of candidate points around the center
  3. 03For each candidate, query the OSRM Table API to get travel times from every participant
  4. 04Score each candidate by total travel time
  5. 05Pick the point with the lowest total

The OSRM Table API is key -- it returns a full travel-time matrix in a single request, making the grid search fast even with many candidates.

Venue Discovery

Once the optimal point is found, the app queries the Overpass API for nearby venues:

  • Cafes and restaurants
  • Parks and public spaces
  • Bars and pubs

Each venue shows the estimated travel time from every participant, so the group can pick a place that works for everyone.

Tech Stack

  • Kotlin -- Android native
  • Jetpack Compose -- Material 3 UI
  • OSRM Table API -- travel-time matrix (open source, no API key)
  • Overpass API -- venue search via OpenStreetMap
  • Play Services Location -- geolocation
  • OkHttp -- HTTP client

Design Decisions

No Map SDK

MeetPoint doesn't embed a map. Instead, it shows a clean list of venues with travel times and a "Navigate" button that opens the user's preferred maps app. This keeps the APK small and avoids map SDK licensing.

Privacy

No accounts, no server, no data collection. All computation happens on-device. API calls go directly to open-source services (OSRM and Overpass) that don't require authentication.

Grid Search vs. Optimization

I considered using iterative optimization (gradient descent on travel time), but the grid search approach is simpler, more predictable, and fast enough for 5 participants with a 100-point grid.

No track playing

331 tracks available

Queue · 0 tracks