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
Log in or sign up for Devpost to join the conversation.