Spaces:
Sleeping
title: NovaDXB
emoji: π
colorFrom: purple
colorTo: indigo
sdk: docker
pinned: false
license: mit
short_description: AI-powered Agentic Concierge for Dubai Tourists and Visitors
β¦ NOVADXB
Explore Dubai. Intelligently.
An AI agentic concierge that plans your entire Dubai trip β itinerary, budget, dining, and area recommendations β through natural conversation.
π Try the Live App Β· π Report a Bug Β· π‘ Request a Feature
π Overview
Dubai welcomes 18+ million tourists every year, yet trip planning still means scattered blog posts, outdated listicles, and guesswork about real costs.
NovaDXB is an agentic AI concierge built specifically for Dubai tourism. Rather than a simple Q&A chatbot, it's a reasoning agent equipped with specialized tools that plans complete, personalized Dubai experiences β thinking like a local concierge, not a search engine.
Tell it your budget, your travel style, and your dates β NovaDXB builds a complete itinerary with real area names, real restaurant recommendations, and real AED pricing, pulled from a curated Dubai-specific knowledge base.
β¨ Key Features
| Feature | Description |
|---|---|
| πΊοΈ Smart Itinerary Builder | Generates complete day-by-day Dubai plans with real places, timing, and costs |
| π¨ Area Recommender | Matches the best Dubai neighborhood to your budget and travel style |
| π½οΈ Dining Concierge | Restaurant recommendations from street food to fine dining, with real AED pricing |
| π° Budget Estimator | Transparent daily/total cost breakdowns across Budget, Mid, and Luxury tiers |
| π€οΈ Weather Advisor | Seasonal guidance and packing tips based on Dubai's climate patterns |
| π± Currency Converter | Quick AED conversions for major tourist currencies |
| π Local Knowledge Base | Curated insider tips and hidden gems most tourists never discover |
| π€ Agentic Reasoning | Multi-step planning β the agent decides which tools to call, not a fixed script |
π οΈ Tech Stack
| Layer | Technology |
|---|---|
| LLM | OpenAI GPT-4o-mini |
| Agent Framework | LangChain + LangGraph (ReAct agent pattern) |
| RAG Engine | LlamaIndex |
| Vector Database | Pinecone |
| Backend | Flask + Waitress (WSGI) |
| Frontend | HTML / CSS / JavaScript |
| Containerization | Docker |
| Deployment | HuggingFace Spaces |
Architecture
βββββββββββββββ ββββββββββββββββ ββββββββββββββββββββ
β Frontend β ββββΆ β Flask API β ββββΆ β LangGraph Agent β
β (HTML/CSS/JS)β β (rate-limited,β β (7 MCP tools) β
βββββββββββββββ β sanitized) β βββββββββββ¬ββββββββββ
ββββββββββββββββ β
βΌ
ββββββββββββββββββββ
β RAG Engine β
β (LlamaIndex) β
βββββββββββ¬βββββββββ
β
βΌ
ββββββββββββββββββββ
β Pinecone Vector β
β Database β
ββββββββββββββββββββ
The agent receives a user query, reasons about which tool(s) it needs (itinerary planning, budget estimation, area recommendation, etc.), retrieves grounded context from the Dubai knowledge base via RAG, and returns a specific, actionable response β never generic advice.
π Project Structure
NovaDXB/
βββ data/ # Knowledge base (RAG source documents)
β βββ areas_guide.csv # 20+ Dubai neighborhoods
β βββ attractions.csv # 30+ attractions with costs & tips
β βββ dining_guide.csv # 25+ restaurants across all budgets
β βββ practical_info.txt # Visa, transport, culture, safety
β βββ budget_logic.txt # Budget/Mid/Luxury cost breakdowns
β βββ seasonal_guide.txt # Month-by-month climate & events
β βββ hidden_gems.txt # Local insider tips
βββ static/ # Frontend assets
β βββ index.html # Chat interface
β βββ landing.html # Landing page
βββ app.py # Flask application (routes, security, rate limiting)
βββ agent.py # LangGraph ReAct agent + 7 MCP tools
βββ rag_engine.py # LlamaIndex + Pinecone RAG pipeline
βββ requirements.txt # Python dependencies
βββ Dockerfile # Container definition
βββ .env.example # Environment variable template
π Getting Started
Prerequisites
- Python 3.11+
- An OpenAI API key
- A Pinecone API key with an index created (1536 dimensions, cosine metric)
Installation
# Clone the repository
git clone https://github.com/NipunKavinda95/NovaDXB.git
cd NovaDXB
# Create a virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
Configuration
Create a .env file in the project root:
OPENAI_API_KEY=your_openai_api_key
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_INDEX_NAME=novadxb
SECRET_KEY=generate_with_python_secrets_token_hex_32
INGEST=false
Generate a secure
SECRET_KEYwith:python -c "import secrets; print(secrets.token_hex(32))"
First-Time Setup β Ingest the Knowledge Base
# Set INGEST=true in .env, then run once:
python rag_engine.py
# Set INGEST=false afterward to avoid re-ingesting on every restart
Run Locally
python app.py
Visit http://localhost:7860 to see the landing page, or http://localhost:7860/app for the chat interface.
π Security & Reliability
NovaDXB was built with production-grade practices, not just hackathon-grade ones:
- β Input sanitization β strips control characters, enforces length limits
- β Prompt-injection detection β flags and safely redirects override attempts
- β Rate limiting β per-IP sliding window, prevents abuse and runaway API costs
- β Response caching β identical queries served instantly, reduces LLM calls
- β Restricted CORS β scoped to known origins, not wide open
- β No leaked exceptions β full error details logged server-side only
- β Graceful startup handling β missing API keys fail safely, not silently
π³ Docker Deployment
docker build -t novadxb .
docker run -p 7860:7860 --env-file .env novadxb
πΊοΈ Roadmap
- Core RAG pipeline with Pinecone + LlamaIndex
- Agentic reasoning with 7 specialized tools
- Security hardening (rate limiting, sanitization, CORS)
- Live deployment on HuggingFace Spaces
- Premium split-panel UI with live itinerary visualization
- Interactive map integration
- Multi-language support
π€ Acknowledgments
Built as part of the Decoding Data Science β AI Application Building Challenge, supported by JetBrains and Google for Developers.
π¬ Connect
Nipun Kavinda β Industrial AI & MLOps Engineer, Dubai
If you found this project interesting, consider giving it a β