Dashboard
Manage and review accessibility, visual, and security audit reports. {{ (dashReports || []).filter(r => r.scanType === 'accessibility').length }} accessibility reports {{ (dashReports || []).filter(r => r.scanType === 'keyboard-screen-reader').length }} KBSR reports {{ (dashReports || []).filter(r => r.scanType === 'visual-regression').length }} visual reports {{ (dashReports || []).filter(r => r.scanType === 'custom-workflow').length }} custom workflows {{ (dashReports || []).filter(r => r.scanType === 'security').length }} security reports {{ (dashReports || []).filter(r => r.scanType === 'performance').length }} performance reports {{ (filteredDashReports || []).length }} of {{ (dashReports || []).length }} reports · {{ (dashReports || []).filter(r=>r.status==='running').length }} running
No reports yet
Run your first scan and results will appear here.
No matches
No reports match the selected filter.
Loading report...
Accessibility Summary
{{ isVisualOnlyCustomReport ? 'Visual Scan Report' : 'Results Summary' }}
{{ kbsrErroredEntries.length }} URL{{ kbsrErroredEntries.length !== 1 ? 's' : '' }} could not be scanned
These pages errored before any keyboard or screen reader data could be collected, so they have no findings below. Resolve the cause (often authentication or a navigation timeout) and re-run.
| Severity | Issue | Rule ID | Details | Description |
|---|---|---|---|---|
| {{ issue.severity || 'Medium' }} |
{{ issue.title || 'Issue' }}
|
{{ issue.category || 'Keyboard Navigation' }} |
{{ kbsrIssueSummaryText(issue) }} |
| Severity | Category | Issue | Occurrences | Step | Selector |
|---|---|---|---|---|---|
| {{ issue.severity || 'Medium' }} | {{ issue.category || 'Keyboard Navigation' }} |
{{ issue.title || 'Issue' }}
{{ issue.description }}
Details
Affected locations
{{ ii + 1 }}.
{{ instance.stepIndex ? `Step ${instance.stepIndex}` : 'Structural' }}
Not captured
Current output
{{ issue.currentOutput }}
Expected output
{{ issue.expectedOutput }}
Fix
{{ issue.fix }}
{{ issue.snippet }}
|
{{ issue.occurrences || 1 }} | {{ issue.stepIndex ? issue.stepIndex : 'Structural' }} | Not captured |
Results Summary
Loading screenshots...
Visual Scan Summary
Authentication
Manage per-site auth profiles (HTTP Basic credentials and custom headers), auto-matched to requests by domain.
Manual Session
Capture and manage browser sessions (cookies + local storage) for login-only flows.
Activity & Logs
Live scan status and recent server messages — useful for tracking errors without server access.
Running scans {{ activityRunning.length }}
Use as Extension
Download and install QA Insight as a Chrome browser extension
qa-insight-extension.zip file to a folder on your computer.
chrome://extensions or go to Menu ? More Tools ? Extensions.
qa-insight-extension folder you extracted in Step 1.
{{ serverOrigin }}.
Scheduled Jobs
{{ scheduledJobs.length }} scheduled scan{{ scheduledJobs.length !== 1 ? 's' : '' }}
No scheduled jobs
Go to New Scan ? Run Audit ? Schedule to set one up.
Comparisons
{{ filteredComparisons.length + filteredPendingComparisons.length }} comparison{{ (filteredComparisons.length + filteredPendingComparisons.length) !== 1 ? 's' : '' }} · {{ filteredPendingComparisons.length }} active
No comparisons yet
Select two reports of the same type on the Dashboard and click Compare.
No matches
No comparisons match the selected filter.
Running comparison...
Performance Comparison
Steady-state (warm) Lighthouse score, baseline → current. A page is a regression when the warm score drops by 5+ points on any device.
URL Mismatches ({{ compareResult.urlMismatches.length }})
{{ isKbsrComparison ? 'KBSR Comparison' : compareResult.scanType === 'security' ? 'Security Comparison' : 'Accessibility Comparison' }}
New issues introduced since the baseline scan. Issues present in both the baseline and current scans. Issues resolved since the baseline scan.
| Issue | Pages | {{ isKbsrComparison ? 'Issues' : 'Nodes' }} |
|---|---|---|
|
{{ rule.description }} {{ rule.ruleId }}
|
{{ rule.urls?.length || 0 }} | {{ rule.totalNodes }} |
{{ paneTab === 'regressions' ? 'No new issues introduced since the baseline.' : paneTab === 'notFixed' ? 'No issues carried over from the baseline.' : 'No issues were resolved.' }}
Pages found in only one of the two reports, so they could not be compared.
| URL | Present in | Issues |
|---|---|---|
| {{ row.side }} | {{ row.issues }} issues — |
All pages matched between the two reports.
Targeting
Define the scope of your audit by providing a sitemap or a list of specific URLs.
Session Batches
Create batches of URLs that require different user roles or login states.
✓ {{ batch.homepagePopulated }} URL{{ batch.homepagePopulated !== 1 ? 's' : '' }} populated — edit as needed
Use a Previous Crawl
{{ entry.filename }}
Scan Type
Choose what kind of audit to run on your URLs. Each scan type produces a separate report.
Active Groups ({{ groupList.length }})
Review & Configure
{{ estimatedUrls }} URL{{ estimatedUrls !== 1 ? 's' : '' }} selected across {{ selectedGroupCount }} group{{ selectedGroupCount !== 1 ? 's' : '' }} · {{ configSummary }}
What axe-core reports
Each page is audited by the axe-core engine. Results are grouped by impact level and deduplicated across viewports.
WCAG Standard
Choose which version and conformance level to test against.
What the scan checks
Playwright drives a real browser using the Tab key only — no mouse. Each focusable element is visited and inspected.
Device
Run the keyboard & screen-reader pass on one device. Desktop runs the full keyboard traversal; a tablet or phone runs the touch/structural pass with that device's emulation.
Viewports
Every page is scanned at both a Desktop and a Mobile viewport to catch responsive accessibility issues (WCAG 2.1 SC 1.4.10 Reflow).
Review
Confirm what this scan will run before you start.
What this scan captures
Playwright renders each page in a real browser and takes pixel-perfect screenshots at every viewport you configure.
Capture
Choose the device class, viewport, and browser. Screenshots are captured locally and saved to SmartUI.
Captured locally on this server, then uploaded to SmartUI.
Captured locally via Playwright device emulation, then uploaded to the SmartUI CLI project. iOS profiles render on WebKit (Safari engine); Android on Chromium.
Viewports {{ vrCfg.viewports.length }}
Each page is captured at every viewport. DPR and emulation are set automatically from width.
Quick add
Element Filters
Control which elements appear in captured screenshots. Auto-saved per site when you run.
Screenshot specific sections separately instead of the full page - e.g. header, main, footer. Leave empty for full-page capture.
For better coverage, split instead of capturing the full page - add header, main, and footer as separate regions. This avoids scroll-stitching artefacts and gives you a clean diff per section.
Hidden in every screenshot - chat widgets, cookie banners, overlays. Enter or , to add.
What gets checked
The scan spiders same-origin pages from your selected URLs and runs each check below on every response.
URL discovery
Crawl the site from your selected URLs, or scan only the URLs you provided.
Crawl limits
Preview which URLs the spider discovers before scanning. Adjust the limits, run the preview, then keep only the URLs you want.
Seeds: {{ securityCrawlPreviewSummary.seeds }} · Discovered: {{ securityCrawlPreviewSummary.discovered }} · Skipped: {{ securityCrawlPreviewSummary.skipped }}
Run scan will scan exactly these {{ securityDiscoveredSelected.length }} URL{{ securityDiscoveredSelected.length === 1 ? '' : 's' }} in list mode — no re-crawl.
Scan Mode
Choose passive checks for normal runs, or active testing for approved lower environments.
Performance (Lighthouse)
Google Lighthouse Performance score + Core Web Vitals per URL.
Devices
Results Summary
{{ v.description }}
AI Solution Ready{{ v.id }}
- {{ u.count }} {{ isKbsrReport ? 'issue' : 'element' }}{{ u.count !== 1 ? 's' : '' }}
- Show less +{{ v.affectedUrls.length - 3 }} more URL{{ v.affectedUrls.length - 3 !== 1 ? 's' : '' }}