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 determined python # 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
Share this project:

Updates