MeetSpot

May 11, 2026 · View on GitHub

MeetSpot

MeetSpot Logo

AI Agent for Multi-Person Meeting Point Recommendations

Not just a search tool. An autonomous agent that decides the fairest meeting point for everyone.

Live Demo Video Demo

License: MIT Python 3.11+ FastAPI Build Status

English | 简体中文


Why MeetSpot?

Most location tools return results near you. MeetSpot calculates the geographic center of all participants and returns AI-ranked venues that minimize everyone's travel time.

Traditional ToolsMeetSpot
Search near your locationCalculate fair center for all
Keyword-based rankingAI-powered multi-factor scoring
Static resultsAdaptive dual-mode routing
No reasoningExplainable AI with chain-of-thought
MeetSpot Interface

Agent Architecture

MeetSpot is an AI Agent - it makes autonomous decisions based on request complexity, not just executes searches.

                              User Request

                    ┌──────────────┴──────────────┐
                    │      Complexity Router      │
                    │    (Autonomous Decision)    │
                    └──────────────┬──────────────┘

              ┌────────────────────┼────────────────────┐
              │                    │                    │
              ▼                    │                    ▼
    ┌─────────────────┐            │          ┌─────────────────┐
    │    Rule Mode    │            │          │   Agent Mode    │
    │   (2-4 sec)     │            │          │   (8-15 sec)    │
    │  Deterministic  │            │          │  LLM-Enhanced   │
    └────────┬────────┘            │          └────────┬────────┘
             │                     │                   │
             └─────────────────────┼───────────────────┘

                    ┌──────────────┴──────────────┐
                    │    5-Step Processing        │
                    │        Pipeline             │
                    └──────────────┬──────────────┘

        ┌──────────┬──────────┬────┴────┬──────────┬──────────┐
        │          │          │         │          │          │
        ▼          ▼          ▼         ▼          ▼          ▼
    Geocode    Center     POI      Ranking     HTML      Result
              Calc      Search               Gen

Intelligent Mode Selection

The Agent autonomously decides which processing mode to use:

FactorScoreExample
Location count+10/location4 locations = 40 pts
Complex keywords+15"quiet business cafe with private rooms"
Special requirements+10"parking, wheelchair accessible, WiFi"
  • Score < 40: Rule Mode (fast, deterministic, pattern-matched)
  • Score >= 40: Agent Mode (LLM reasoning, semantic understanding)

Agent Mode Scoring

Final Score = Rule Score × 0.4 + LLM Score × 0.6

The LLM analyzes semantic fit between venues and requirements, then blends with rule-based scoring. Results include Explainable AI visualization showing the agent's reasoning process.

5-Step Pipeline

StepFunctionDetails
GeocodeAddress → Coordinates90+ smart mappings (universities, landmarks)
Center CalcFair point calculationSpherical geometry for accuracy
POI SearchVenue discoveryConcurrent async search, auto-fallback
RankingMulti-factor scoringBase(30) + Popularity(20) + Distance(25) + Scenario(15) + Requirements(10)
HTML GenInteractive mapAmap JS API integration

Quick Start

# Clone and install
git clone https://github.com/calderbuild/MeetSpot.git && cd MeetSpot
pip install -r requirements.txt

# Configure (get key from https://lbs.amap.com/)
cp config/config.toml.example config/config.toml
# Edit config.toml and add your AMAP_API_KEY

# Run
python web_server.py

Open http://127.0.0.1:8000


API Reference

Main Endpoint

POST /api/find_meetspot

{
  "locations": ["Peking University", "Tsinghua University", "Renmin University"],
  "keywords": "cafe restaurant",
  "user_requirements": "parking, quiet environment"
}

Response:

{
  "success": true,
  "html_url": "/workspace/js_src/recommendation_xxx.html",
  "center": {"lat": 39.99, "lng": 116.32},
  "venues_count": 8
}

Other Endpoints

EndpointMethodDescription
/api/find_meetspot_agentPOSTForce Agent Mode (LLM reasoning)
/api/ai_chatPOSTAI customer service chat
/healthGETSystem health check
/docsGETInteractive API documentation

Screenshots

Agent Reasoning

Agent Chain-of-Thought

Interactive Map

Interactive Map View

Homepage

Homepage

Input Interface

Meeting Point Finder

More Screenshots
Full Results Page

Full Results Page (NYC example)

AI Chat

AI Assistant Chat


Tech Stack

LayerTechnologies
BackendFastAPI, Pydantic, aiohttp, SQLAlchemy 2.0, asyncio
FrontendHTML5, CSS3, Vanilla JavaScript, Boxicons
MapsAmap (Gaode) for China + Google Maps Platform for international (auto-routed by language)
AIOpenRouter (default openai/gpt-4o-mini) for semantic analysis
DeployRender, Railway, Docker, Vercel

Project Structure

MeetSpot/
├── api/
│   └── index.py                 # FastAPI application entry
├── app/
│   ├── tool/
│   │   └── meetspot_recommender.py  # Core recommendation engine
│   ├── config.py                # Configuration management
│   └── design_tokens.py         # WCAG-compliant color system
├── templates/                   # Jinja2 templates
├── public/                      # Static assets
└── workspace/js_src/            # Generated result pages

Development

# Development server with hot reload
uvicorn api.index:app --reload

# Run tests
pytest tests/ -v

# Code quality
black . && ruff check . && mypy app/

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Contact

Email: Johnrobertdestiny@gmail.com

GitHub: Issues

Blog: calderbuild.github.io

WeChat

Personal WeChat

WeChat Group

WeChat Group


Acknowledgements

Special thanks to AIGC Link for the promotions on XiaoHongShu.


License

MIT License - see LICENSE for details.


If MeetSpot helps you, please give it a star!

Star History Chart