skills/ux-gap-detector/SKILL.md
SaaS UX gap audit
npx skillsauth add laststance/skills ux-gap-detectorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When running this skill in Codex, translate Claude Code-only primitives before acting: AskUserQuestion -> chat/request_user_input, TodoWrite -> update_plan, Task/TaskCreate/TeamCreate/SendMessage -> spawn_agent/send_input/wait_agent when available and allowed, and EnterPlanMode/ExitPlanMode -> a concise chat plan plus explicit approval.
Resolve Read/Write/Edit/Bash/WebSearch/WebFetch to Codex file/shell/web tools, and map ~/.claude/... paths to ~/.agents/... or ~/.codex/... unless the task explicitly targets Claude Code.
When running this skill in Cursor Agent, translate Claude Code-only primitives before acting: AskUserQuestion -> AskQuestion; TodoWrite -> Cursor TodoWrite or an equivalent checklist; Task/TaskCreate/TeamCreate/SendMessage/multi-agent flows -> Cursor Task (subagents), parallel Tasks, or run_in_background when allowed (TeamCreate/SendMessage may have no exact match); EnterPlanMode/ExitPlanMode -> Plan mode (SwitchMode / CreatePlan) plus explicit user approval.
Resolve Read/Write/Edit/StrReplace/Bash/web/search/MCP via Cursor Composer or Agent equivalents. MCP names written as mcp__server__tool typically map to call_mcp_tool with configured server identifiers. Map ~/.claude/... to ~/.cursor/skills/, .cursor/skills/, and .cursor/rules/ unless the task explicitly targets Claude Code.
Detect UI/UX quality gaps in authenticated SaaS web applications through live browser interaction using the user's logged-in session via playwright-cli.
/ux-gap-detector <- interactive: asks category + URL
/ux-gap-detector --category dashboard <- audit dashboard screens
/ux-gap-detector --category data-management <- audit tables, CRUD, search/filter
Prerequisite: The user must be logged into their app in Chrome with the playwright-cli extension connected.
Before any browser interaction: invoke /dnd to load the drag-and-drop verification protocol. Required even when DnD is not yet known to be involved — ref-based drag returns false success on dnd-kit and similar libraries.
browser_screenshot to confirm the extension is activebrowser_navigate to it.
Otherwise ask the user:AskUserQuestion:
"What is your app's URL? (You must already be logged in via Chrome)"
Options:
- "http://localhost:3000"
- "http://localhost:5173"
- "http://localhost:8080"
(User can type custom URL)
AskUserQuestion:
"Which area of your app should I audit?"
Options:
- "Dashboard" (overview, widgets, charts, KPIs)
- "Data Management" (tables, lists, CRUD, search/filter)
- "Form Workflow" (multi-step forms, input validation, submission)
- "Navigation Shell" (sidebar, top-bar, command palette, breadcrumbs)
- "Settings & Profile" (user settings, preferences, account)
mkdir -p docs/ux-gap-reports/screenshots
docs/ux-gap-reports/YYYY-MM-DD-{category}.mdUsing the authenticated session, explore the app structure:
browser_screenshot to see the logged-in appbrowser_snapshot to get the accessibility treeExecute the scenarios defined in categories.md for the selected category.
For EACH step in each scenario:
browser_snapshot to get element refsbrowser_click on nav links or browser_navigatebrowser_click, browser_hoverbrowser_typebrowser_select_optionbrowser_press_keybrowser_wait (1-3 seconds for transitions)browser_screenshot after the actiondocs/ux-gap-reports/screenshots/target-{scenario}-{step}.pngUse mcp__sequential-thinking__sequentialthinking to analyze each dimension:
For each captured screenshot:
Apply the scoring rubric from scoring-rubric.md:
Overall Score = Sum of all dimensions (0-100)
Reference benchmarks (what top-tier looks like):
For each gap scored below 75:
Write the Markdown report to docs/ux-gap-reports/YYYY-MM-DD-{category}.md:
# UX Gap Report: {project-name} -- {category}
**Date**: YYYY-MM-DD
**Target**: {target-url}
**Category**: {category}
**Session**: Authenticated (user's browser profile via playwright-cli)
## Overall Score: {score}/100
| Dimension | Score | Verdict |
|-----------|-------|---------|
| Typography & Spacing | {n}/25 | {Excellent/Good/Needs Work/Poor/Critical} |
| Interactive States | {n}/25 | {verdict} |
| Content Hierarchy | {n}/25 | {verdict} |
| Loading & Error UX | {n}/25 | {verdict} |
---
## Critical Gaps (Score < 50)
### 1. {Gap Title} ({score}/{max})
**What top-tier apps do**: {description, referencing Linear/Notion/Stripe etc.}
**Your app**:

**Gap**: {Specific description}
**Fix**: {Actionable recommendation with code example}
---
## Moderate Gaps (Score 50-75)
...
## Strengths (Score > 75)
...
## Recommendations Summary
| Priority | Gap | Estimated Effort |
|----------|-----|-----------------|
| Critical | ... | ... |
| Moderate | ... | ... |
AskUserQuestion (multiSelect: true):
"Which gaps should be registered as GitHub Issues?"
Options: [list of Critical and Moderate gaps with scores]
gh issue create \
--title "UX Gap: {gap-title}" \
--label "ux-gap,priority/{level}" \
--body "$(cat <<'EOF'
## Gap Detection
**Dimension**: {dimension}
**Score**: {score}/{max}
**Detected**: {date}
## Description
{gap description}
## Screenshots
{screenshot or description}
## Recommended Fix
{actionable fix with code examples}
## Acceptance Criteria
- [ ] Gap score improves to >= 75/{max} on re-audit
EOF
)"
browser_snapshot -> get element refs
browser_click(ref) -> interact with element
browser_wait(1-2s) -> wait for transitions
browser_screenshot -> capture result
Always browser_snapshot before interacting to get fresh element refs.
| Will Do | Will NOT Do | |---------|-------------| | Use the user's authenticated session | Log into any service | | Navigate within the app via links/routes | Perform destructive actions (delete, modify data) | | Take screenshots at each step | Change app settings or preferences | | Hover/click to test interactive states | Submit real forms with production data | | Score across 4 dimensions | Access pages the user hasn't navigated to before | | Generate actionable report | Bypass any security measures | | Create GitHub Issues | Close the user's browser tabs |
testing
Cited research briefs
development
Daily coding habit prompts JP
development
React core deep-dive JP
data-ai
Copy last agent reply