Inspiration
Sometimes you know what a place should be like without knowing where to find it. You want an apartment near groceries, a park, and a bus stop. Or you have an old vacation photo but can’t remember where you took it.
Our idea started with a video of a streamer tracking down a location using map data. We were excited by what he could find, but getting those answers meant writing specialized code and understanding how the map organized its information.
We wanted to make that possible without the technical background. You should be able to describe what you’re looking for, not learn a programming language to find it.
What if you could just talk to a map?
What it does
MapMind finds places based on what you describe, not just their names. Tell it what should be nearby, what you want to avoid, or which landmarks you’re looking for. It searches map data and brings back a plain-English answer with results on an interactive map.
Here are some questions you can ask:
- Find your next apartment: “Show me apartment buildings in Blacksburg within 500 meters of a grocery store, a park, and a bus stop.” MapMind checks for all three around each building, rather than showing unrelated places scattered across town.
- Plan an outdoor trip: “Find campgrounds in Hot Springs National Park within 1 kilometer of a trailhead and a drinking water point.” Combine the things that matter to your trip in one search.
- Compare your options: “Which dorm has the most cafés within 800 meters?” Go beyond finding places to comparing what’s around them.
- Put a memory back on the map: Describe landmarks from an old vacation photo and search within a city for possible matches. MapMind works from your description and available map details. It doesn’t analyze the photo itself.
Results depend on available OpenStreetMap data. Distances are not approximate and straight-line, not walking distances.
Key Features
- A map connected to the conversation: Click a place in the answer, and the map jumps to it.
- Follow-ups that remember your search: Add another requirement without retyping the original question.
- Visible progress: See which location MapMind chose, which details it checked, and what search it ran.
How we built it
MapMind searches OpenStreetMap, a database of mapped places and their details. The model figures out what you’re looking for, and the app searches the map data to find places that match.
- SvelteKit, TypeScript, and Leaflet: Power the app, chat interface, and interactive map.
- Qwen: Interprets requests, plans searches, and handles follow-up questions.
- Zod and compiler: Validate the model's structured query plans and translate them into OverpassQL to search OpenStreetMap data.
- Overpass API, Nominatim, and taginfo: Retrieve map data, look up place names, and check how commonly different map labels are used.
- Server-sent events: Stream each step to the browser while the search runs.
Challenges we ran into
- AI-generated queries can contain errors. We use structured plan validation and a custom translator to reduce query-generation errors
- Map labels aren’t always obvious. A label can exist but rarely be used. We check popularity and suggest alternatives when the model guesses wrong.
- Some questions need more than a database search. Comparing nearby places and checking opening hours required extra processing after retrieving the data.
- Broad searches can become expensive. We added area limits, result caps, and timeouts to keep requests manageable and respect public APIs.
Accomplishments that we're proud of
- Making complex location searches conversational: Users can combine several requirements in one question and refine the results through follow-ups.
- Checking every nearby requirement: A building only qualifies when every requested category has a real match within the specified distance.
What we learned
- AI doesn’t need to do every step. Letting the model interpret requests while code handles query generation gave each part a clear responsibility.
- Missing/inaccurate data is a problem Inconsistent labels and incomplete opening hours impact searches.
Built With
- bun
- css
- docker
- html5
- javascript
- json
- nginx
- openstreetmap
- overpassql
- qwen
- svelte
- typescript
Log in or sign up for Devpost to join the conversation.