Inspiration

Travel planning is historically a fragmented nightmare. You have ChatGPT open in one tab for ideas, Google Maps in another to check distances, and a spreadsheet to track it all. We wanted to close that gap. We asked: "What if your AI assistant didn't just give you a text list, but actually built a live, interactive dashboard for you?" We built GeminiGo to be the fusion of a Large Language Model's creativity and Google Maps' real-world accuracy—a workspace where "ideas" instantly become "plans."

What it does

  • GeminiGo is an intelligent travel command center.
  • AI-Powered Itineraries: Users can input natural language prompts like "Plan a 3-day romantic trip to Kyoto with a budget of $500."
  • Context-Aware Mapping: The AI doesn't just output text; it parses locations and plots them directly onto our interactive map, organizing them logically by distance and time.
  • Real-Time Discovery: As the AI suggests neighborhoods, the Discovery Feed automatically hydrates with real-time data—fetching high-res photos, star ratings, and opening hours via the Google Places API.
  • Flexible Workspace: Our 3-column interface allows users to resize their view, focusing on the itinerary text, the visual feed, or the map geography depending on their planning stage.

How we built it

  • We architected a high-performance stack to handle the complex orchestration between AI generation and map rendering:
  • Google Gemini API: The brain of the operation. We use it to parse user intent and generate structured JSON itineraries.
  • Google Places API (New): The eyes. We implemented the v1 API with Field Masking and Place IDs to verify AI suggestions against real-world locations, ensuring hallucinated places don't make it to the map.
  • Next.js & TypeScript: The backbone. We used Server Actions to handle database transactions securely and Client Components for the interactive dashboard.
  • Drizzle ORM & Postgres: To save these complex, AI-generated itineraries for future retrieval.
  • React Resizable Panels: To give the user control over their workspace layout.

Challenges we ran into

  • The "Hallucination" Gap: Large Language Models sometimes invent places or get addresses wrong.
  • Our biggest challenge was validating Gemini's output against the Google Maps database. We built a reconciliation layer that takes the AI's suggested "Name" and performs a strict text-search verification to get a valid place_id and coordinates before rendering it on the map.
  • Orchestrating Asynchronous Streams: We had to manage two different "clocks": the stream of text coming from the AI and the asynchronous loading of map markers. We solved this with a robust state machine that handles "Thinking," "Verifying," and "Rendering" phases to prevent the UI from jumping around.
  • The React Render Gap: We faced UI flickering when switching between cities. We solved this by implementing a synchronous "Active ID" check during the render phase to ensure skeletons appeared the exact millisecond the user clicked a new location.

Accomplishments that we're proud of

  • Text-to-Map Pipeline: We successfully built a flow where a sentence typed by a user turns into a tangible, clickable pin on a map within seconds.
  • Synchronized State: The way our Discovery Feed, Map Camera, and AI Chat stay perfectly in sync. If you click a place in the AI itinerary, the map flies to it and the feed loads its details.
  • Professional Polish: Integrating Snap Scrolling, Skeleton Loaders, and Dynamic Radius Calculation (based on city viewports) makes the app feel like a native tool rather than a hackathon prototype.

What we learned

  • Structured Outputs are King: We learned how to engineer prompts to force Gemini to return strict JSON schemas, making it much easier to pipe data into our UI components.
  • The Power of Field Masking: By only requesting the specific Google Maps data fields we needed (like location and photos), we significantly reduced latency and API costs.
  • Component Architecture: We learned the value of "Lifting State Up." By treating the Home Page as a conductor, we kept our Map and AI components decoupled but perfectly synchronized.

What's next for GeminiGo

  • Multiplayer Mode: Allowing friends to join a session and upvote/downvote specific stops on the AI-generated itinerary in real-time.
  • Booking Integration: Taking the "Action" step by connecting our Place Cards directly to reservation APIs (OpenTable, Expedia).
  • Route Optimization: Using the Google Routes API to automatically reorder the AI's suggestions to minimize travel time between stops.
Share this project:

Updates