Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

axeVision

AI-powered web accessibility analysis. Catch WCAG violations before they ship.

Live DemoTypeScriptTurborepo


The Problem

Web accessibility is consistently treated as an afterthought. By the time violations surface through audits or complaints, the cost to fix them is exponentially higher than catching them during development. Existing tools either dump raw WCAG violation lists with zero guidance, or require expensive manual QA to interpret what they mean and how to fix them.

What axeVision Does

A lightweight Chrome extension parses the DOM of any page you are visiting into a structured content object and sends it to the backend. The backend spins up a headless Puppeteer browser, injects the captured HTML, and runs the full axe-core WCAG rule suite to generate violations. Google Gemini then takes those violations and produces human-readable explanations along with exact code fixes. Everything surfaces in a team dashboard with analytics, an AI co-pilot, real-time org chat, and version-over-version snapshot comparison.

The loop: capture in the browser → analyze on the backend → fix with AI → track as a team.


Architecture

axeVision is a Turborepo monorepo with four packages sharing TypeScript configs across the stack.

axeVision/
├── apps/
│ └── platform/ # React dashboard (Vite + Tailwind)
├── packages/
│ ├── backend/ # Node.js/Express API
│ ├── extension/ # Chrome Extension (Manifest V3)
│ └── shared/ # Shared TypeScript configs
├── docker-compose.yml
├── turbo.json
└── .github/workflows/ # CI/CD pipelines
PackageRole
ExtensionParses DOM into structured JSON, runs basic regex checks locally, sends snapshot to backend
BackendRuns full axe-core analysis via Puppeteer, orchestrates Gemini AI, manages data and real-time events
PlatformTeam dashboard for analytics, AI co-pilot, org chat, RBAC management, and snapshot history
SharedTypeScript configs shared across all packages

Features

Accessibility Analysis Captures up to 150 headings, 100 paragraphs, 75 priority links, and more into a structured content object per snapshot. Full WCAG analysis runs via axe-core injected into a Puppeteer headless browser on the backend. Issues are categorized by severity: Critical, High, Medium, and Low.

AI-Generated Code Fixes Google Gemini receives the actual violation data and generates specific, copy-paste-ready code fixes for each issue. Not generic advice.

AI Co-Pilot Chat A context-aware chatbot that builds its system prompt from the real snapshot data: the URL, issue count, severity breakdown, and issue categories pulled from the database for that specific snapshot. It maintains a rolling conversation history and answers fix-specific questions.

Snapshot History and DOM Diff Snapshots are stored as compressed binary buffers using Node's native zlib module, compressing both the HTML content and JSON metadata before writing to MongoDB. Teams can compare two snapshots side-by-side to see what changed between deployments.

Real-Time Organisation Chat Socket.io powers a full chat application at /chat with private messaging, group channels, and live typing indicators for team members within the same organisation.

Redis Caching Website lists and accessibility analysis results are cached in Redis, keeping the dashboard fast on repeated visits.

Role-Based Access Control Admin and Member roles enforced via dedicated backend middleware on protected routes. Admins manage team members and websites; members access assigned workspaces.


Tech Stack

CategoryTechnologies
LanguagesTypeScript (full-stack)
FrontendReact 18, Vite, Tailwind CSS, TanStack Query, Zustand, Recharts
BackendNode.js, Express, Mongoose, Redis, Socket.io, Puppeteer
AIGoogle Gemini API, axe-core
DatabaseMongoDB Atlas
InfrastructureDocker, Fly.io, Vercel, GitHub Actions
MonorepoTurborepo, pnpm Workspaces

Getting Started

Prerequisites

  • Node.js >= 18
  • pnpm >= 8
  • Docker
  • MongoDB connection string
  • Redis connection string
  • Google Gemini API key

Installation

git clone https://github.com/talhadevelopes/axeVision.git
cd axeVision
pnpm install
cp packages/backend/.env.example packages/backend/.env
cp apps/platform/.env.example apps/platform/.env

Fill in your environment variables in both .env files, then:

pnpm dev

Platform runs on http://localhost:5173 and the API on http://localhost:4000.

For loading the Chrome extension locally, see docs/extension.md.

Docker

docker-compose up -d

The backend is containerised and deployed to Fly.io via Docker through the GitHub Actions CI/CD pipeline.


Try the Demo

The platform is deployed at axe-vision-platform.vercel.app — optimised for desktop.

A demo account is pre-loaded with real websites, snapshots, and accessibility scan results so you can explore without setting anything up.

Email: demo@axevision.dev
Password: demo@1234

Documentation

DocumentDescription
docs/architecture.mdSystem design, data flow, and component interaction
docs/backend.mdAPI structure, Docker setup, and Fly.io deployment
docs/frontend.mdPlatform dashboard setup and Vercel deployment
docs/extension.mdChrome extension build and local installation

Contributing

Contributions are welcome.

Branching Branch off main using one of these prefixes:

  • feature/ for new functionality
  • fix/ for bug fixes
  • chore/ for tooling, config, or dependency updates

Commits One line, present tense, lowercase. Example: add redis cache invalidation on snapshot delete

Before opening a PR Run ESLint and Prettier across the affected package. PRs with linting errors will not be merged.

Pull requests Keep PRs focused on a single concern. Describe what changed and why in the PR description.

About

Smart web accessibility tool that catches WCAG violations, generates code fixes with Gemini, and provides team dashboards for collaboration.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages