Inspiration
Standard maps are built for "get from A to B." When you're in a new city with a couple of hours to explore, you don't always have a destination; you want a great walk: scenic, with parks and coffee shops. No app really solved "give me a 4-mile scenic walk with viewpoints." We built Mappy to fill that gap.
What it does
Mappy is an AI-powered route planner for exploration, not navigation. You describe what you want in plain language (e.g. "5-mile scenic walk with viewpoints and speciality coffee"). The app offers three distinct routes—Scenic, Balanced, and Adventurous —with turn-by-turn directions and one-click export to Google Maps or Apple Maps. It discovers up to 100 points of interest, plans an optimisation strategy with Gemini, and builds routes that match your preferences.
How we built it
We use a 7-agent pipeline: Preference Parser (Gemini), Spatial Reasoner, POI Discoverer (Google Maps), Strategic Planner (Gemini), Waypoint Optimiser (algorithm), Route Validator (Maps API), and Route Evaluator (Gemini). The main design choice is hybrid: Gemini handles language and strategy, while deterministic code performs spatial optimisation over 100 POIs to avoid token limits and maintain low latency. Built with the Gemini API, Google Maps (Routes, Places, Geocoding), TypeScript, React, and Node. (Gemini + Google Maps)
Challenges we ran into
Fitting 100 POIs into an LLM context would blow token limits and slow things down. We solved it by having Gemini output only an optimisation strategy (weights, style, priorities), then a pure algorithm builds the actual routes. Getting structured, reliable JSON from Gemini for three different agents required consistent prompt design and JSON schema validation.
Accomplishments we're proud of
The hybrid architecture—AI for strategy, algorithms for execution—delivers quality and speed. Users get three distinct route options and human-readable summaries, not just raw scores. One-command setup (pnpm setup, pnpm dev) and optional free mode so judges and users can run it without API keys.
What we learned
Natural language for preferences works well when the LLM is constrained to structured output; combining that with algorithmic optimisation gives the best of both worlds. Clear separation between "what to optimise for" (Gemini) and "how to optimise" (code) made the system easier to reason about and tune.
What's next for Mappy
Beam search for waypoint optimisation, priority regions from the Strategic Planner, weather and time-of-day awareness, GPX export, and cycling/running modes. We’re also exploring tighter Google Maps integration and more POI types.
Gemini Integration
Mappy uses Gemini 3 in three agents of its 7-agent route pipeline. In each case we rely on structured JSON output so the rest of the system gets consistent, parseable data.
1. Preference Parser
Users type things like "5 mile scenic walk with viewpoints and coffee shops." Gemini extracts structured constraints: distance, scenic weight, safety preferences, and POI types. We call Gemini with a JSON schema so the response is always valid and ready for downstream steps.
2. Strategic Planner
Given 100 discovered POIs and the same preferences, Gemini returns an optimization strategy (POI type weights, exploration style, risk tolerance, diversity) instead of a full route. That avoids token limits and keeps one LLM call small. The strategy is then consumed by a deterministic waypoint optimizer that builds three route candidates.
3. Route Evaluator
After routes are validated with Google Maps, Gemini scores each route (scenic quality, safety, POI fit) and writes short summaries so users see more than raw numbers.
Why Gemini is central
Gemini handles the only parts that need language and judgment: interpreting natural-language preferences and deciding strategic priorities. All spatial optimization over 100 POIs is done in code for speed and scale. All three agents use Gemini's structured output and JSON schema so the integration is reliable and production-friendly.
Built With
- express.js
- gemini
- google-gemini
- google-geocoding
- google-maps
- node.js
- typescript
- vite
Log in or sign up for Devpost to join the conversation.