Install any skill in seconds. Free to start, no credit card required.
Get Started Free →User-invoked, cross-discipline interface review that coordinates six domain references: accessibility, layout, writing, typography, colors, and ui. Use when explicitly invoked for a holistic review of a screen, flow, feature, or product interface. Supports quick and full review modes. Triggers on better-interface, full interface review, holistic UI audit, cross-discipline design review, review the whole interface.
.claude/skills/fradser-better-interface/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 341% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 136% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 45% | 0% |
A strong interface is not six independent audits stapled together. Review the whole experience, let each domain reference own its rules, then consolidate the evidence into one prioritized verdict.
This skill owns orchestration only. Accessibility rules belong to references/accessibility/overview.md; structure to references/layout/overview.md; copy to references/writing/overview.md; type to references/typography/overview.md; color to references/colors/overview.md; visual polish and motion to references/ui/overview.md. Never duplicate or override their rules here.
Infer the screen, flow, feature, or repository scope from the request and current workspace. State the resolved scope in the output. Use full when no mode is supplied.
| Mode | Coverage | Finding cap | | --- | --- | --- | | quick | Primary user path and highest-traffic states; report only HIGH and MEDIUM issues | 5 | | full | Entire requested scope across all six domain references, including empty, loading, error, and narrow-width states when present | 15 |
If the requested scope is too large to inspect credibly, narrow it to the highest-traffic complete flow and state the boundary. Never imply uninspected surfaces were reviewed.
Identify the framework, styling system, component library, design tokens, supported viewports, and available preview or test commands. Follow the project's established Tailwind, plain CSS, CSS-in-JS, token, and component conventions.
Before reviewing, read all six domain references below. Load and apply every available reference. In quick mode, inspect all six domains but spend depth only where the primary flow has evidence. In full mode, complete each available domain review before consolidation.
Review in this order so foundational failures are not hidden by polish:
references/accessibility/overview.mdreferences/layout/overview.mdreferences/writing/overview.mdreferences/typography/overview.mdreferences/colors/overview.mdreferences/ui/overview.mdThis skill owns the final response. Apply each domain reference's principles and topic files, then consolidate into the format, shared severity, and finding cap defined in this file.
If a domain reference is unavailable, mark that domain Not reviewed, name the missing reference, and continue with the remaining domains. Do not recreate its rules from memory, substitute a neighboring domain, or claim holistic coverage.
When two references appear to cover the same issue, assign it to the reference that owns the underlying rule and mention secondary effects in the Why cell. Report it once.
Every finding cites path/to/file:line and shows the current implementation. If the review artifact has no source files, cite the exact screen and component. Do not report a code-level finding from visual appearance alone or a visual finding from source code alone when runtime behavior determines the result.
Use one shared severity scale:
HIGH: blocks a task, misleads the user, hides content or controls, causes data-loss risk, or creates a repeated systemic failure.MEDIUM: meaningfully harms comprehension, efficiency, adaptability, or consistency.LOW: isolated polish with limited task impact. Include only in full mode.Within a severity, rank by reach and leverage. A token or shared-component fix outranks the same symptom in one leaf component.
One root cause is one finding. List every confirmed location in the same row rather than producing a row per occurrence. Do not pad the report to reach the finding cap; a short review or no findings is a valid result.
Record candidates considered but deliberately rejected. A candidate is rejected when the owning reference permits the current implementation, evidence is insufficient, the project convention is intentional, or the proposed change would add complexity without user benefit.
Run safe, relevant checks available in the project. Inspect the rendered interface when runtime behavior or visual judgment matters. Report the exact command or interaction and observed result. If a check cannot be run, label it Not verified and state what remains; never convert a verification gap into a finding.
Treat a review request as read-only. Do not edit source code unless the user also asks to implement the findings. When implementation is requested, preserve the consolidated report as the change scope and re-run the relevant verification afterward.
| Mistake | Fix | | --- | --- | | Six disconnected domain reports | Consolidate into one ranked findings table | | Same issue reported by multiple references | Assign it to the reference that owns the underlying rule | | Finding with no exact location | Cite path/to/file:line and the current implementation | | Visual claim inferred only from source | Inspect the rendered state or mark it not verified | | Unlimited low-impact polish | Respect the mode cap; omit LOW findings in quick | | Silent gaps in coverage | Show which domains and states were actually inspected | | Missing owning reference silently treated as covered | Mark the domain Not reviewed and name the unavailable reference | | No rejected candidates | Include the required considered-but-rejected table | | Review silently edits code | Stay read-only unless implementation was requested | | “Approve” with pending actionable findings | Use Needs changes or Block |
Always use the following sections.
State the mode, exact scope, stack and styling conventions, and any review boundary. Then show coverage:
| Domain | Evidence inspected | Result | | --- | --- | --- | | Accessibility | Files, components, states, or checks | Findings count or Clear |
Include all six domains. Clear means inspected with no actionable finding; Not reviewed must explain why.
Use one table ordered by severity, then reach and leverage:
| # | Severity | Domain | Location | Before | After | Why | | --- | --- | --- | --- | --- | --- | --- | | 1 | HIGH | Accessibility | src/Dialog.tsx:42 | <button><XIcon /></button> | Add aria-label="Close" and hide the icon from the accessibility tree | The icon-only control has no accessible name |
Each row is one root cause. The Domain value is the owning domain (accessibility, layout, writing, typography, colors, or ui). Respect the mode's finding cap. If there are no findings, omit the table and state "No actionable interface findings."
Include 1–3 candidates in quick mode and 2–5 in full mode:
| Location | Candidate | Rejected because | | --- | --- | --- | | src/Card.tsx:28 | Increase the shadow | Existing depth matches the shared surface token; changing one card would reduce consistency |
These are real candidates inspected during the review, not invented filler. If the scope genuinely contains fewer borderline candidates, include the ones that exist and say so.
List each check or interaction, the exact command or steps, and the observed result. Separate checks that passed from checks marked Not verified.
End with exactly one:
Block — one or more HIGH findings remain.Needs changes — only MEDIUM or LOW findings remain.Approve — no actionable findings remain and the claimed coverage was verified.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 41,026 | 7,926 | -81% | 1 | 1 | 0% | 8,279 | 2,345 | -72% | 0 | 0 | — |
case-02 | fail→fail | 5,665 | 7,629 | +35% | 1 | 1 | 0% | 292 | 2,195 | +652% | 0 | 0 | — |
case-03 | fail→fail | 4,343 | 5,630 | +30% | 1 | 1 | 0% | 224 | 2,083 | +830% | 0 | 0 | — |
case-04 | pass→fail | 12,586 | 6,662 | -47% | 1 | 1 | 0% | 1,315 | 2,172 | +65% | 0 | 0 | — |
case-05 | pass→fail | 5,501 | 7,105 | +29% | 1 | 1 | 0% | 1,105 | 2,131 | +93% | 0 | 0 | — |
case-06 | pass→fail | 10,603 | 5,066 | -52% | 1 | 1 | 0% | 2,041 | 1,977 | -3% | 0 | 0 | — |
case-07 | fail→fail | 12,333 | 6,905 | -44% | 1 | 1 | 0% | 2,078 | 1,978 | -5% | 0 | 0 | — |
case-08 | fail→fail | 12,871 | 6,200 | -52% | 1 | 1 | 0% | 2,087 | 2,168 | +4% | 0 | 0 | — |
case-09 | fail→fail | 43,036 | 5,139 | -88% | 1 | 1 | 0% | 8,231 | 1,939 | -76% | 0 | 0 | — |
case-10 | fail→fail | 28,966 | 49,474 | +71% | 1 | 1 | 0% | 5,300 | 2,009 | -62% | 0 | 0 | — |
case-11 | fail→pass | 13,551 | 10,043 | -26% | 1 | 1 | 0% | 2,315 | 3,547 | +53% | 0 | 0 | — |
case-12 | fail→fail | 18,212 | 5,242 | -71% | 1 | 1 | 0% | 3,190 | 1,968 | -38% | 0 | 0 | — |
case-13 | fail→fail | 4,551 | 3,757 | -17% | 1 | 1 | 0% | 330 | 1,980 | +500% | 0 | 0 | — |
case-14 | fail→fail | 5,980 | 6,525 | +9% | 1 | 1 | 0% | 961 | 2,182 | +127% | 0 | 0 | — |
case-15 | fail→pass | 6,532 | 16,738 | +156% | 1 | 1 | 0% | 1,001 | 4,416 | +341% | 0 | 0 | — |
case-16 | fail→pass | 14,753 | 21,969 | +49% | 1 | 1 | 0% | 2,284 | 5,386 | +136% | 0 | 0 | — |
case-17 | pass→pass | 9,040 | 8,874 | -2% | 1 | 1 | 0% | 1,483 | 3,248 | +119% | 0 | 0 | — |
case-18 | fail→pass | 15,736 | 15,911 | +1% | 1 | 1 | 0% | 2,480 | 4,305 | +74% | 0 | 0 | — |
case-19 | fail→fail | 15,578 | 8,196 | -47% | 1 | 1 | 0% | 2,484 | 1,990 | -20% | 0 | 0 | — |
case-20 | fail→fail | 20,363 | 12,327 | -39% | 1 | 1 | 0% | 3,642 | 2,925 | -20% | 0 | 0 | — |
case-21 | fail→fail | 10,377 | 5,980 | -42% | 1 | 1 | 0% | 1,918 | 2,068 | +8% | 0 | 0 | — |
case-22 | fail→pass | 12,543 | 5,477 | -56% | 1 | 1 | 0% | 1,883 | 2,727 | +45% | 0 | 0 | — |
case-23 | fail→pass | 16,269 | 9,351 | -43% | 1 | 1 | 0% | 2,855 | 2,979 | +4% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 8 counted toward the lift figure. The other 15 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +13 percentage points is the difference between those two pass rates over the 8 comparable cases. 8 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.