AnangAI
Making Kingston's tourism information accessible, sustainable, and intelligent.
Inspiration
AnangAI started from a need to make Kingston's tourism information easier to find and more accessible. Existing guides were scattered, hard to search, and often missed details like accessibility and sustainability. We wanted a single place where visitors and locals could ask questions in natural language and get accurate, up-to-date answers.
Our Focus:
- Sustainable Tourism: Highlighting Green Plate–certified restaurants and local businesses
- Accessibility: Including accessibility and washroom information for all places
- Multilingual Support: Serving both English and French speakers
- Intelligent Search: Using AI to understand natural language queries
What We Learned
Technical Skills
RAG (Retrieval Augmented Generation)
Built a system that retrieves relevant data from local files and augments LLM prompts for accurate, context-aware responses
Full-Stack Development
Integrated a React frontend with a FastAPI backend, handling state, routing, and API communication
*Data Processing & Web Scraping *
Scraped data from different sources using Beautiful Soup library and normalized data from multiple sources (restaurants, places, events) with varying formats
Multilingual Architecture
Implemented i18n with React Context and JSON translation files
Smart Query Processing
Built keyword mapping, date parsing, and query specificity detection
Design & UX
- Created a ChatGPT-like interface with animated message bubbles and typing indicators
- Used Framer Motion for smooth transitions
- Designed responsive cards with consistent layouts
- Implemented visual indicators (leaf icons for certifications, accessibility icons)
How We Built It
Architecture
Frontend (React + Vite)
- React 19 with React Router for navigation
- Tailwind CSS for styling
- Framer Motion for animations
- Context API for global state (language, chat history, admin auth)
- Custom hooks for API calls and translations
Backend (FastAPI + Python)
- FastAPI REST API with CORS middleware
- RAG system using OpenRouter API (GPT-4o-mini)
- Dynamic file discovery for Food, Places, and Events folders
- Smart search with keyword mapping and date filtering
- Data normalization for accessibility and washroom information
Key Features Implemented
Intelligent Chat Interface
- Natural language processing for queries like "show me restaurants near water"
- Date-based filtering for events ("events on Feb 8")
- Certification-based prioritization (Gold > Silver > Bronze)
- URL hiding behind "Find Location" links
Dynamic Discovery Page
- Auto-generates navigation tabs from data files
- Displays entries in responsive card layouts
- Shows accessibility and washroom information with icons
Data Management
- Parses entries from multiple file formats
- Normalizes accessibility values (Full Access, Partial Access, Limited)
- Handles NULL values and edge cases
Multilingual Support
- English and French translations
- Language toggle on all pages
- LLM responses in the selected language
Local Business Registration
- Help out local business to grow by making them visible more on our website
- They can send request by filling all required info
- The info will be sent to admin and after their approval, their business will be visible on this website
Challenges We Ran Into
1. Data Normalization
Problem: Data files had inconsistent formats—some entries had "NULL" (uppercase), others had "null" (lowercase), and accessibility descriptions varied.
Solution: Built a normalization function that:
- Handles case-insensitive matching
- Extracts key phrases from longer descriptions
- Falls back to
"null"when values can't be determinedpython # Example: "Partial Access - Historic buildings vary..." → "Partial Access" if "partial access" in accessibility_lower or "partial" in accessibility_lower: entry["accessibility"] = "Partial Access"
2. Query Specificity Detection
Problem: Distinguishing between vague queries ("show me some restaurants") and specific ones ("pub near Princess Street").
Solution: Built a keyword mapping system that:
- Detects query intent (food, places, events)
- Returns samples for vague queries
- Returns full lists when requested
- Filters by location and date when specified
3. Multilingual LLM Responses
Problem: Ensuring the LLM responds in the correct language with proper translations.
Solution: Added language-specific instructions to prompts:
- Explicit translation mappings (Location → Emplacement)
- Section header translations
- Example formats in both languages
Accomplishments That We're Proud Of
- RAG Architecture: Retrieves relevant context from 100+ entries across multiple categories
- Smart Search: Handles typos, synonyms, and fuzzy matching
- Date Parsing: Extracts dates from natural language ("events on feb 8")
- Certification Prioritization: Sorts food entries by Green Plate Certification automatically
- Accessibility First: Normalizes and displays accessibility information consistently
What's Next for AnangAI
- Add more data sources (real-time event APIs)
- Implement user favorites and saved searches
- Add filtering options on the discovery page
- Expand to more languages
- Add mobile app version
Built With
Technologies: React • FastAPI • OpenRouter API • Tailwind CSS • Framer Motion • Python
Event: QHacks 2026
Built With
- fastapi
- openrouter-api
- react
- tailwind-css
Log in or sign up for Devpost to join the conversation.