GeoVisA11y is an open-source system for interactive and accessible map visualization.
This repository contains the code for the GeoVisA11y prototype, presented in our CHI'26 paper GeoVisA11y: AI-based Geovisualization QA System for Screen-Reader Users by Chu Li, Rock Pang, Arnavi Chheda-Kothary, Ather Sharif, Henok Assalif, Jeffrey Heer and Jon E. Froehlich.
@inproceedings{li2026geovisa11y,
author={Li, Chu and Pang, Rock and Chheda-Kothary, Arnavi and Sharif, Ather and Assalif, Henok and Heer, Jeffrey and Froehlich, Jon E.},
booktitle={2026 CHI Conference on Human Factors in Computing Systems (CHI)},
title={GeoVisA11y: AI-based Geovisualization QA System for Screen-Reader Users},
year={2026},
pages={1-17},
keywords={Geovisualization;Accessibility;Screen-reader;AI;QA;Visualization},
doi={https://doi.org/10.1145/3772318.3790334}}
- Frontend (
src/): React app with Mapbox GL for choropleth and dot-density map visualizations, plus a speech-enabled chatbot - Backend (
backend/): Flask API with DuckDB for spatial queries, OpenAI for natural language QA, and MongoDB for analytics logging
- Copy
.env.exampleto.envand fill in your API keys. - Place
spatial-db.dbinbackend/database/(to request this file, please email chuchuli@cs.washington.edu) - Install dependencies:
- Backend:
cd backend && pip install -r requirements.txt - Frontend:
npm install
- Backend:
Backend:
cd backend
flask runFrontend:
npm startThe app will open at http://localhost:3000
Backend logging is controlled by the level parameter in each file's logging.basicConfig() call:
backend/routes/log_routes.py— set toWARNINGby defaultbackend/routes/api.py— set toINFOby default
To see verbose debug output, change the level to logging.DEBUG:
logging.basicConfig(level=logging.DEBUG)This project is licensed under the MIT License. See LICENSE for details.
