About the project

Luna Travel started from a simple insight: exploring Google Maps alone is fun at first, but it can become boring quickly. I wanted a conversational travel companion that makes it feel like you’re traveling with someone, not just browsing a map. And to make the experience feel “real,” I thought: if we capture the moment and synthesize a photo, it can turn a virtual trip into a memory that looks tangible.

What Luna does

  • Watches the live screen context and responds in real time
  • Guides exploration with voice (via screen sharing and map context)
  • Uses tool-calls to drop pins and move the map automatically
  • Creates “travel memories” by composing user photo + Luna + destination backdrop

How it’s built (high level)

  • Frontend: React + Vite + Tailwind + @vis.gl/react-google-maps
  • Backend proxy: Node.js (Express) + WebSocket bridge with heartbeat
  • AI: Gemini Live (live multimodal chat) + Gemini 3.1 Flash Image Preview
  • Voice: Google Cloud TTS (Neural2 Korean voice)
  • Persistence: Firestore + (optional) lightweight local cache
  • Storage: Google Cloud Storage for synthesized photos

Challenges I faced

  • Getting Antigravity live chat stable took time because of outdated guidance and model confusion
  • Wiring voice intent into reliable map controls (pin, navigation) was harder than expected
  • Co-editing/code generation sometimes caused accidental deletion, forcing me to redo work
  • Latest features sometimes move faster than what the assistant knows, so I had to verify docs myself

Built With

  • express.js
  • firebase
  • firestore
  • gemini-2.5-live-api
  • gemini-3.1-flash
  • gemini-3.1-flash-lite
  • gemini-live
  • google-cloud
  • google-cloud-firestore
  • google-cloud-run
  • google-cloud-text-to-speech(tts)
  • google-maps-javascript-api
  • google-maps-platform
  • google-street-view-static-api
  • javascript
  • lucide-react
  • nano-banana
  • node.js
  • react
  • sharp
  • tailwind-css
  • typescript
  • vite
  • websocket
Share this project:

Updates

Submission history