ui-ux-bug-finder
Skill1 starsChanged 15 days agoMITView on GitHub
Comprehensive UI/UX design, interaction flow, responsive layout, and WCAG 2.2 AA accessibility bug finder for vibe-coded apps. Detects dead buttons, missing loading/empty/error states, mobile overflow traps, z-index collisions, and live DOM layout defects.
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 1 is distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 27
Do not flag a <div> that already carries role, tabIndex and a key handler - that is a correct retrofit.
- Very specific: line 28
Verify every modal, drawer, and dialog has a working close button, Escape key dismissal, and cleans up body scroll locks on unmount.
- Distinctive: line 32
Verify that every component performing an async fetch or mutation explicitly implements all 4 states:
- Very specific: line 34
Empty State: When a list or query returns 0 items, render a helpful empty state with a clear call-to-action instead of a blank void.
- Very specific: line 35
Error State: When a fetch or mutation fails, catch the error and display a user-friendly alert, toast, or inline field error with a retry …
- Very specific: line 40
Check layout behavior at Mobile (375x812), Tablet (768x1024), and Desktop (1440x900).
- Very specific: line 42
Ensure touch targets (buttons, nav links, close icons) are at least 44x44px on mobile screens and do not overlap with fixed bottom bars or …
- Very specific: line 46
Verify every <input>, <select>, and <textarea> is linked to a visible <label> or aria-label.
- Very specific: line 47
Verify every icon-only <button> has an aria-label and every <img /> has an alt attribute.
- Very specific: line 48
Check color contrast pairings (avoid low-contrast muted text like text-gray-300 on bg-white or text-gray-600 on bg-gray-900).
- Very specific: line 49
Ensure keyboard Tab order is logical and focus indicators (focus-visible:ring-2) are never stripped without replacement.
- Very specific: line 53
If the app is running locally and agent-browser or Playwright is installed:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
UI/UX Design & Browser QA Bug Finder
Audit frontend code and live rendered pages to catch the visual, interaction, state-management, and accessibility bugs frequently introduced during vibe coding.
5-Point UI/UX Inspection Protocol
1. Interactive Wiring & Dead Control Detection (HIGH)
- Scan all
<button>,<a>,<form>, dropdowns, and action cards across every page/route. - Flag any control with
href="#", missingonClick/type="submit", or stubbed handlers (() => {}orconsole.log).
Separate three distinct bugs - they have three different fixes:
| Pattern | Rule | Why it is wrong | Fix |
<a href="#">Terms</a> | UX-01 | Goes nowhere | Give it a real destination |
<a href="#" onClick={del}> | UX-11 | Announced as "link" so the user expects navigation; Space does not activate it; # jumps to top and pollutes history | <button type="button" onClick={del}> |
<div onClick={go}> | UX-12 | Not focusable, not keyboard operable, announced as plain text | <button type="button"> |
The principle: if it performs an action it is a button; if it navigates it is a link with a real href. Choose the right element and the browser gives you focus, Tab order, Enter and Space, and the correct role for free. Retrofitting a <div> requires role="button" and tabIndex={0} and an onKeyDown handling both Enter and Space - three things to get right instead of zero, which is why the real button is the better answer.
Do not flag a <div> that already carries role, tabIndex and a key handler - that is a correct retrofit.
- Verify every modal, drawer, and dialog has a working close button,
Escapekey dismissal, and cleans up body scroll locks on unmount.
2. Async State Matrix Completeness (HIGH / MEDIUM)
Verify that every component performing an async fetch or mutation explicitly implements all 4 states:
- Loading State: Skeleton loader or spinner shown; submit/action buttons set
disabled={isLoading}to prevent duplicate submissions. - Empty State: When a list or query returns
0items, render a helpful empty state with a clear call-to-action instead of a blank void. - Error State: When a fetch or mutation fails, catch the error and display a user-friendly alert, toast, or inline field error with a retry option (never swallow errors in an empty
catch {}). - Success Feedback: Confirm mutations give clear visual confirmation (toast, redirect, or optimistic UI update).
3. Responsive Layout & Mobile Viewport Audit (MEDIUM)
- Check layout behavior at Mobile (
375x812), Tablet (768x1024), and Desktop (1440x900). - Flag hardcoded pixel widths (
w-[600px],min-w-[500px],width: 800px), un-wrapped wide tables (overflow-x-automissing), or100vwcontainers that cause horizontal scrolling on mobile. - Ensure touch targets (buttons, nav links, close icons) are at least
44x44pxon mobile screens and do not overlap with fixed bottom bars or floating action buttons.
4. Accessibility & Keyboard Ergonomics — WCAG 2.2 AA (MEDIUM / LOW)
- Verify every
<input>,<select>, and<textarea>is linked to a visible<label>oraria-label. - Verify every icon-only
<button>has anaria-labeland every<img />has analtattribute. - Check color contrast pairings (avoid low-contrast muted text like
text-gray-300onbg-whiteortext-gray-600onbg-gray-900). - Ensure keyboard
Taborder is logical and focus indicators (focus-visible:ring-2) are never stripped without replacement.
5. Live Browser DOM Inspection (When Dev Server + Browser Tool Available)
If the app is running locally and agent-browser or Playwright is installed:
agent-browser open http://localhost:3000
agent-browser set viewport 375 812
agent-browser snapshot
agent-browser screenshot --annotate .aegis/mobile-audit.png
agent-browser set viewport 1440 900
agent-browser screenshot --annotate .aegis/desktop-audit.png
agent-browser closeInspect the accessibility tree and screenshots to verify zero overlapping elements, zero console errors, and clean visual alignment.
In this repository12 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llms-full.txtllms.txt
- llms.txtllms.txt
- ai-llm-security-shieldSkill
- architecture-threat-modelSkill
- artifact-leak-hunterSkill
- backend-reliability-scaleSkill
- payments-logic-auditorSkill
- production-preflight-gateSkill
- security-redteam-loopSkill
- vibe-aegisSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

