A fair, real-time, and explainable meeting-place recommendation engine for two people.
MeetHalfway AI does more than compute a geometric midpoint. It enforces fairness through isochrone intersection (both users can reasonably reach the area), then combines live status signals, crowding/queue risk, and reputation factors into a practical and explainable recommendation.
not only considers the common factors like "where to meet" and "when to meet," but also incorporates additional criteria such as:
- Travel radius tolerance,
- Availability overlap,
- Venue popularity and density,
- Mutual voting preferences.
- Fairness by travel time: optimize the balance, not just map distance.
- Real-world decision quality: detect closures, high queue risk, and busy periods.
- End-to-end demo readiness: interactive map, ranked recommendations, and surprise mode.
- Privacy-first workflow: location data is processed in-memory only.
| Module | Design | Value |
|---|---|---|
| Geo Fairness Constraint | Isochrone intersection | Keeps candidates reachable for both sides |
| Intelligent Scoring | Fairness + rating + preference + risk penalties | Produces robust recommendations |
| Live Signals | Web retrieval + semantic extraction | Captures current open/crowd conditions |
| Engineering Resilience | Async concurrency + retries + fallbacks | Stays available under API instability |
| Visual Presentation | Streamlit + interactive map | Easy for judges to understand quickly |
- Collect two locations (address / map click / privacy-separated upload).
- Build isochrones and compute overlap area.
- Retrieve restaurant candidates and enrich with live signals.
- Output explainable scores, top picks, and map visualization.
- Frontend: Streamlit
- Geo layer: OpenRouteService / Mapbox + Shapely
- Place retrieval: Mapbox / OSM Overpass (fallback chain)
- Live signal retrieval: Tavily / DuckDuckGo (fallback chain)
- Semantic reasoning: OpenAI-compatible model (keyword fallback available)
- Concurrency: asyncio + httpx
pip install -r requirements.txtCopy .env.example to .env, then fill your own keys.
Recommended:
OPENROUTESERVICE_API_KEY
Optional enhancements:
MAPBOX_ACCESS_TOKENTAVILY_API_KEYYELP_API_KEYOPENAI_API_KEYOPENAI_API_BASEMODEL_NAME
streamlit run app_streamlit.pyapp_streamlit.py: main visual app entryapp_streamlit_new.py: new experimental app entrymeethalfway.py: core algorithm and scoringrequirements.txt: dependency list.env.example: environment template
- No real API keys are committed (
.env/ secrets files are ignored). - Local runtime traces and personal artifacts are excluded from upload.
- User coordinates are used for in-session computation only and are not persisted.
Recommended target: Streamlit Community Cloud
- Connect this repository.
- Set entry file to
app_streamlit.py. - Configure secrets in the platform settings.