Gala.AI is a RAG-powered travel assistant for exploring Cebu, Philippines. Ask it about destinations, food, festivals, or budget tips, and it answers using a curated Cebu tourism knowledge base, then automatically pins any mentioned places on an interactive map.
🔗 Live demo: gala-ai.netlify.app
- RAG-grounded answers — retrieves relevant chunks from a Cebu tourism knowledge base via FAISS similarity search before generating a response, keeping answers factual instead of relying purely on the model's general knowledge.
- Interactive map — automatically detects place names mentioned in the assistant's replies and drops color-coded pins for them on a live Leaflet map, each with a category and a quick tip.
- Auto-parsed itineraries — when a response contains a day-by-day plan, it's automatically reformatted into a structured itinerary card instead of a wall of text.
- Live weather widget — pulls current conditions and a short forecast so travel suggestions can factor in the weather.
- Multi-chat sidebar — save and revisit previous conversations, similar to a typical chat app.
- Light/dark mode
cebu_tourism.txt(the knowledge base) is split into overlapping chunks and embedded locally usingsentence-transformers(all-MiniLM-L6-v2), no external embedding API needed.- Embeddings are indexed with FAISS for fast similarity search.
- On each message, the top-matching chunks are retrieved and injected into the system prompt as context.
- Groq (running Llama 3.3 70B) generates the final response grounded in that retrieved context.
- The frontend scans the response for known place names and, if any are found, renders them on the map and/or as an itinerary card.
Frontend: React, Vite, Axios, Leaflet Backend: FastAPI, Groq API, FAISS, Sentence-Transformers Deployment: Netlify (frontend), Hugging Face Spaces (backend)
cd backend
pip install -r requirements.txtCreate a .env file in backend/ with:
GROQ_API_KEY=your_groq_api_key
Then start the server:
uvicorn main:app --reload --port 8000cd frontend
npm install
npm run devThe app runs on http://localhost:5173 and expects the backend at http://localhost:8000 (update BACKEND in frontend/src/constants.js if you're pointing at a different backend URL, e.g. your own deployed instance).