qa-check
Auto-detects the project's tech stack, then audits for Accessibility, Performance, and Code Quality.
Skill by stuartshields
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/stuartshields-qa-check
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/qa-check
Tools it pre-approves 3
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Read,Grep,Glob
What's inside
- Skill name
qa-check- Description
- Auto-detects the project's tech stack, then audits for Accessibility, Performance, and Code Quality. Works across WordPress/PHP, Python, Node/JS, and static web projects.
- License
- MIT
- Allowed tools
- Read,, Grep,, Glob
- Instructions
- 257 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Skill: qa-check (Global)
## When to Use
Run `/qa-check` on any web project to audit for Accessibility (WCAG 2.2 AA), Performance, and Code Quality issues. This skill auto-detects the tech stack and adapts its checks accordingly.
Use `$ARGUMENTS` to scope the audit to a specific directory or file pattern (e.g., `/qa-check src/components/`). If empty, audit the entire project.
Do NOT fix issues - only report them. Present findings as structured Markdown tables.
## Method
### Phase 0: Stack Detection
Before running any checks, detect the project's tech stack by scanning the working directory for marker files. Report what was detected before proceeding.
#### Detection Rules
Scan in this order. A project can match **multiple** stacks (e.g., WordPress with Node build tools).
| Stack | Marker Files |
|---|---|
| **WordPress / PHP** | `wp-config.php`, `composer.json` with `"wordpress"`, `style.css` containing `Theme Name:`, `functions.php`, `wp-content/` or `content/` directory |
| **Python** | `requirements.txt`, `pyproject.toml`, `setup.py`, `setup.cfg`, `Pipfile`, `manage.py` (Django), `app.py` or `wsgi.py` (Flask) |
| **Node / JS** | `package.json` - then inspect for framework indicators: `next` (Next.js), `express` (Express), `nuxt` (Nuxt), `@angular/core` (Angular), `react` (React), `vue` (Vue), `svelte` (Svelte) |
| **Static Web** | `*.html` files in root or `src/`, `*.css` files, no backend markers detected |
#### Detection Output
Print a summary before running checks:
```
## Stack Detection
| Stack | Detected | Markers Found |
|---|---|---|
| WordPress/PHP | Yes/No | wp-config.php, style.css (Theme Name: ...) |
| Python | Yes/No | requirements.txt, manage.py |
| Node/JS | Yes/No | package.json (express, react) |
| Static Web | Yes/No | index.html, styles.css |
```
Then determine which template/view files to scan:
- **WordPress:** `*.php` in theme directory, `template-parts/`, `templates/`, `inc/`
- **Python (Flask):** `templates/**/*.html`, `app/templates/**/*.html`
- **Python (Django):** `**/templates/**/*.html`, `**/templatetags/*.py`
- **Node (Next.js):** `pages/**/*.{js,jsx,tsx}`, `app/**/*.{js,jsx,tsx}`, `components/**/*.{js,jsx,tsx}`
- **Node (Express):** `views/**/*.{ejs,pug,hbs,html}`, `public/**/*.html`
- **Node (React/Vue/Svelte):** `src/**/*.{jsx,tsx,vue,svelte}`
- **Static Web:** `*.html`, `src/**/*.html`
Also scan: all `*.css` files, all `*.js` or `*.ts` files in source directories, config files (`.env*`, `*.config.*`).
---
### Pillar 1: Accessibility (WCAG 2.2 AA)
**Goal:** Confirm output pages meet WCAG 2.2 AA requirements. These checks apply to all stacks - scan every file that produces HTML output.
| # | Check | What to Look For |
|---|---|---|
| 1 | **Semantic HTML** | `<header>`, `<main>`, `<footer>`, `<nav>` used correctly. Flag pages that use only `<div>` for major layout sections. |
| 2 | **Image alt text** | Every `<img>` must have an `alt` attribute. Empty `alt=""` is valid for decorative images. Flag any `<img>` with no `alt` at all. In PHP: check `<?php echo` img tags. In JSX: check `<img` components. |
| 3 | **Form labels** | Every `<input>`, `<select>`, `<textarea>` must have an associated `<label>` (via `for`/`id` pairing) or `aria-label`/`aria-labelledby`. Flag orphaned inputs. |
| 4 | **Link accessible names** | Every `<a>` must have visible text content, `aria-label`, or `aria-labelledby`. Flag empty links (icon-only without aria-label). Flag `<a>` with only an `<img>` child that lacks `alt`. |
| 5 | **Heading hierarchy** | No skipped heading levels (e.g., `<h1>` directly to `<h3>` without `<h2>`). Check across all templates that compose a full page. |
| 6 | **Focus styles** | Check CSS for `:focus-visible` or `:focus` rules. Flag any `outline: none` or `outline: 0` that lacks a replacement visible focus indicator. |
| 7 | **ARIA usage** | Flag misuse patterns: `role="button"` on `<a>` without `tabindex` and keyboard handler, `aria-hidden="true"` on focusable elements, invalid ARIA roles, redundant ARIA (e.g., `role="button"` on `<button>`). |
| 8 | **Colour contrast** | Flag hardcoded colour combos that appear low-contrast. Check text colour against background colour where both are set in the same rule or element. This is heuristic - flag suspicious combos for manual review. |
| 9 | **Language attribute** | `<html lang="...">` must be present in the root document. Flag if missing. |
| 10 | **Viewport meta** | `<meta name="viewport">` must be present. Flag if it contains `maximum-scale=1`, `user-scalable=no`, or `user-scalable=0` (these disable zoom). |
#### Stack-Specific A11y Checks
- **WordPress:** Check that `wp_nav_menu()` outputs use `<nav>` wrapper. Check `the_post_thumbnail()` calls for alt text support. Check `get_template_part()` partials for orphaned interactive elements.
- **React/JSX:** Check for `<img>` without `alt` prop. Check `onClick` on non-interactive elements (`<div onClick>`) without `role`, `tabIndex`, and `onKeyDown`. Check for `autoFocus` usage.
- **Vue:** Check `v-html` usage (potential a11y bypass - content may lack proper semantics). Check `:alt` bindings on images.
Report: **PASS** / **WARN** / **FAIL** per check.
---
### Pillar 2: Performance
**Goal:** Identify performance issues. Checks are adapted per detected stack.
| # | Check | What to Look For |
|---|---|---|
| 1 | **Image optimization** | `<img>` tags should have `width` and `height` attributes (CLS prevention). Below-fold images should have `loading="lazy"`. Flag large images without modern format alternatives (webp/avif). |
| 2 | **Asset loading** | Scripts should use `defer`, `async`, or `type="module"`. Flag render-blocking `<script>` tags in `<head>` without these attributes. Flag render-blocking CSS that could be deferred. |
| 3 | **Bundle size** | Check for large vendor files in public/static directories. Flag unminified JS/CSS in production paths (files > 50KB without `.min` in the name). |
| 4 | **N+1 queries** | Flag loops that contain database queries - this is a heuristic check. Look for query calls (`query`, `execute`, `cursor`, `fetchall`, `$wpdb->`, `Model.objects`, `select`, `find`) inside `for`/`foreach`/`while`/`map` blocks. |
| 5 | **Caching** | Check for cache-control patterns in server config, middleware, or headers. Flag if no caching strategy is apparent. |
| 6 | **External requests** | Scan templates for third-party URLs (`https://` to external domains) that could block rendering. Flag font services, analytics, and tracking pixels loaded synchronously. |
| 7 | **DNS prefetch / preconnect** | If external resources are used, check for `<link rel="dns-prefetch">` or `<link rel="preconnect">` hints. |
#### Stack-Specific Performance Checks
**WordPress:**
- Check for `wp_enqueue_script()` / `wp_enqueue_style()` usage vs raw `<script>` / `<link>` tags (should use enqueue system).
- Flag `query_posts()` usage - should use `WP_Query` or `get_posts()` instead.
- Flag missing `wp_cache_get()` / `wp_cache_set()` on expensive queries.
- Check if `wp_deregister_script('jquery')` is used properly (common source of breakage).
- Flag `get_posts()` / `WP_Query` calls without `'no_found_rows' => true` when pagination isn't needed.
**Python (Flask/Django):**
- Check for `select_related()` / `prefetch_related()` usage in Django views with related model access.
- Flag Flask routes that open database connections without connection pooling.
- Check for missing `@cache` decorators on expensive view functions.
**Node/JS:**
- Flag synchronous file operations (`readFileSync`, `writeFileSync`) in request handlers.
- Check for `node_modules` files accidentally served to the client.
- Flag missing `compression` middleware in Express.
Report: **PASS** / **WARN** / **FAIL** per check.
---From stuartshields/claude-setup, MIT.
More from stuartshields/claude-setup
- 0.507score
swift-concurrency-review
stuartshields
Use when reviewing Swift 5.5+ code containing `await`, `actor`, `Task { }`, `@MainActor`, `@unchecked Sendable`, cancellable timer/deadline handles, or…
SkillCFreshness: C★ 2Claude Code +9 - 0.507score
module-depth-review
stuartshields
Use when reviewing whether module boundaries earn their keep — finding shallow modules that should be consolidated into deep ones.
SkillCFreshness: C★ 2Claude Code +9 - 0.507score
debugging
stuartshields
Structured debugging protocol.
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
clean-worktrees
stuartshields
Remove stale agent worktree directories and their orphaned branches.
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
block-journey
stuartshields
Discover all files for a block or component, trace the editorial and front-end user journeys, and write a journey document to docs/journeys/.
SkillCFreshness: C★ 2Claude Code +9 - 0.502score
tool-usage
stuartshields
Recovery protocol for tool failures and search budgets.
SkillCFreshness: C★ 2Claude Code +9 - 0.482score
audit-vs-fix-discipline
stuartshields
Use when the user asks to audit, review, investigate, check, scan, "look at", or "find issues in" code — anything that sounds like a diagnostic request…
SkillCFreshness: C★ 2Claude Code +9 - 0.440score
vibe-user
stuartshields
Open an app in Playwright and explore it as a real user with no prior knowledge.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
debug-rules
stuartshields
Diagnose which rules loaded, which didn't, and why.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
figma
stuartshields
Figma-to-code workflow using MCP tools.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
playwright
stuartshields
Playwright MCP browser automation workflow.
SkillDFreshness: D★ 2Claude Code +9 - 0.440score
review-memory
stuartshields
Review auto-memory for the current project.
SkillDFreshness: D★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Mar 26, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/stuartshields/claude-setup
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from stuartshields
- 0.507score
debugging
stuartshields
Structured debugging protocol.
SkillCFreshness: C★ 2Claude Code +9 - 0.507score
module-depth-review
stuartshields
Use when reviewing whether module boundaries earn their keep — finding shallow modules that should be consolidated into deep ones.
SkillCFreshness: C★ 2Claude Code +9 - 0.507score
swift-concurrency-review
stuartshields
Use when reviewing Swift 5.5+ code containing `await`, `actor`, `Task { }`, `@MainActor`, `@unchecked Sendable`, cancellable timer/deadline handles, or…
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
clean-worktrees
stuartshields
Remove stale agent worktree directories and their orphaned branches.
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
block-journey
stuartshields
Discover all files for a block or component, trace the editorial and front-end user journeys, and write a journey document to docs/journeys/.
SkillCFreshness: C★ 2Claude Code +9 - 0.502score
tool-usage
stuartshields
Recovery protocol for tool failures and search budgets.
SkillCFreshness: C★ 2Claude Code +9
Cite this page
qa-check skill. Agent Mart. https://agentmart.dev/skills/stuartshields-qa-check (last updated 2026-10-24)