@su-record/vibe 2.8.24 → 2.8.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/config.d.ts +17 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +207 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +2 -0
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +78 -54
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +13 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +280 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +33 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +1 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
- package/dist/cli/setup/GlobalInstaller.js +7 -7
- package/dist/cli/setup/GlobalInstaller.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +18 -12
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/infra/lib/ContextCompressor.d.ts.map +1 -1
- package/dist/infra/lib/ContextCompressor.js +10 -4
- package/dist/infra/lib/ContextCompressor.js.map +1 -1
- package/dist/infra/lib/ProjectCache.d.ts +2 -2
- package/dist/infra/lib/ProjectCache.d.ts.map +1 -1
- package/dist/infra/lib/ProjectCache.js +4 -3
- package/dist/infra/lib/ProjectCache.js.map +1 -1
- package/dist/infra/lib/utils.d.ts +24 -0
- package/dist/infra/lib/utils.d.ts.map +1 -1
- package/dist/infra/lib/utils.js +41 -0
- package/dist/infra/lib/utils.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts +3 -0
- package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.js +11 -1
- package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.test.d.ts +5 -0
- package/dist/infra/orchestrator/SmartRouter.test.d.ts.map +1 -0
- package/dist/infra/orchestrator/SmartRouter.test.js +457 -0
- package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -0
- package/dist/tools/convention/analyzeComplexity.d.ts.map +1 -1
- package/dist/tools/convention/analyzeComplexity.js +18 -10
- package/dist/tools/convention/analyzeComplexity.js.map +1 -1
- package/dist/tools/convention/checkCouplingCohesion.d.ts.map +1 -1
- package/dist/tools/convention/checkCouplingCohesion.js +14 -6
- package/dist/tools/convention/checkCouplingCohesion.js.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.d.ts.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
- package/dist/tools/semantic/findReferences.d.ts.map +1 -1
- package/dist/tools/semantic/findReferences.js +13 -13
- package/dist/tools/semantic/findReferences.js.map +1 -1
- package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
- package/dist/tools/semantic/findSymbol.js +12 -13
- package/dist/tools/semantic/findSymbol.js.map +1 -1
- package/dist/tools/semantic/lsp.d.ts.map +1 -1
- package/dist/tools/semantic/lsp.js +22 -14
- package/dist/tools/semantic/lsp.js.map +1 -1
- package/hooks/hooks.json +29 -0
- package/hooks/scripts/__tests__/keyword-detector.test.js +199 -0
- package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -0
- package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -0
- package/hooks/scripts/auto-commit.js +65 -0
- package/hooks/scripts/auto-format.js +64 -0
- package/hooks/scripts/auto-test.js +81 -0
- package/hooks/scripts/code-check.js +139 -0
- package/hooks/scripts/command-log.js +32 -0
- package/hooks/scripts/context-save.js +60 -6
- package/hooks/scripts/hud-status.js +32 -2
- package/hooks/scripts/llm-orchestrate.js +95 -17
- package/hooks/scripts/pr-test-gate.js +52 -0
- package/package.json +1 -1
- package/skills/agents-md/rubrics/what-to-keep.md +49 -0
- package/skills/agents-md/templates/agents-md.md +36 -0
- package/skills/arch-guard/agents/detector.md +48 -0
- package/skills/arch-guard/agents/reporter.md +48 -0
- package/skills/arch-guard/agents/rule-generator.md +49 -0
- package/skills/arch-guard/agents/violation-checker.md +51 -0
- package/skills/arch-guard/frameworks/clean-architecture.md +108 -0
- package/skills/arch-guard/frameworks/solid.md +102 -0
- package/skills/arch-guard/scripts/check-boundaries.js +90 -0
- package/skills/arch-guard/templates/arch-rules.json +47 -0
- package/skills/arch-guard/templates/violation-report.md +53 -0
- package/skills/brand-assets/rubrics/asset-checklist.md +98 -0
- package/skills/brand-assets/templates/brand-guide.md +161 -0
- package/skills/capability-loop/agents/capability-designer.md +61 -0
- package/skills/capability-loop/agents/failure-analyst.md +55 -0
- package/skills/capability-loop/agents/implementer.md +50 -0
- package/skills/capability-loop/agents/tester.md +53 -0
- package/skills/capability-loop/templates/capability-spec.md +118 -0
- package/skills/capability-loop/templates/failure-analysis.md +118 -0
- package/skills/characterization-test/agents/behavior-capturer.md +50 -0
- package/skills/characterization-test/agents/coverage-checker.md +54 -0
- package/skills/characterization-test/agents/reporter.md +50 -0
- package/skills/characterization-test/agents/test-writer.md +49 -0
- package/skills/characterization-test/rubrics/coverage-criteria.md +53 -0
- package/skills/characterization-test/templates/test-template.ts +101 -0
- package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -0
- package/skills/claude-md-guide/templates/claude-md.md +54 -0
- package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -0
- package/skills/commerce-patterns/templates/product-schema.md +85 -0
- package/skills/commit-push-pr/agents/change-analyzer.md +55 -0
- package/skills/commit-push-pr/agents/message-writer.md +50 -0
- package/skills/commit-push-pr/agents/pr-writer.md +58 -0
- package/skills/commit-push-pr/agents/reviewer.md +52 -0
- package/skills/commit-push-pr/rubrics/commit-message.md +73 -0
- package/skills/commit-push-pr/templates/pr-body.md +63 -0
- package/skills/context7-usage/rubrics/when-to-use.md +50 -0
- package/skills/create-prd/agents/edge-case-finder.md +48 -0
- package/skills/create-prd/agents/prioritizer.md +60 -0
- package/skills/create-prd/agents/requirements-writer.md +48 -0
- package/skills/create-prd/agents/researcher.md +55 -0
- package/skills/create-prd/agents/reviewer.md +54 -0
- package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -0
- package/skills/create-prd/frameworks/rice-scoring.md +97 -0
- package/skills/create-prd/orchestrator.md +70 -0
- package/skills/create-prd/rubrics/completeness.md +58 -0
- package/skills/create-prd/templates/prd.md +139 -0
- package/skills/design-audit/agents/a11y-auditor.md +43 -0
- package/skills/design-audit/agents/performance-auditor.md +46 -0
- package/skills/design-audit/agents/responsive-auditor.md +46 -0
- package/skills/design-audit/agents/scorer.md +47 -0
- package/skills/design-audit/agents/slop-detector.md +47 -0
- package/skills/design-audit/frameworks/core-web-vitals.md +107 -0
- package/skills/design-audit/frameworks/wcag-checklist.md +64 -0
- package/skills/design-audit/orchestrator.md +64 -0
- package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -0
- package/skills/design-audit/rubrics/scoring.md +63 -0
- package/skills/design-audit/templates/report.md +88 -0
- package/skills/design-critique/rubrics/ux-heuristics.md +143 -0
- package/skills/design-critique/templates/critique-report.md +86 -0
- package/skills/design-distill/templates/design-system.md +132 -0
- package/skills/design-normalize/rubrics/token-naming.md +117 -0
- package/skills/design-normalize/templates/token-audit.md +89 -0
- package/skills/design-polish/rubrics/polish-checklist.md +68 -0
- package/skills/design-polish/templates/polish-report.md +64 -0
- package/skills/design-teach/rubrics/brand-personality.md +73 -0
- package/skills/design-teach/templates/design-context.json +36 -0
- package/skills/e2e-commerce/templates/test-scenarios.md +170 -0
- package/skills/event-comms/templates/email-invite.md +99 -0
- package/skills/event-comms/templates/sns-post.md +133 -0
- package/skills/event-ops/rubrics/contingency.md +85 -0
- package/skills/event-ops/templates/d-day-checklist.md +65 -0
- package/skills/event-planning/rubrics/timeline.md +70 -0
- package/skills/event-planning/templates/event-plan.md +91 -0
- package/skills/exec-plan/agents/decomposer.md +47 -0
- package/skills/exec-plan/agents/dependency-mapper.md +44 -0
- package/skills/exec-plan/agents/estimator.md +43 -0
- package/skills/exec-plan/agents/validator.md +55 -0
- package/skills/exec-plan/orchestrator.md +70 -0
- package/skills/exec-plan/rubrics/complexity-scoring.md +75 -0
- package/skills/exec-plan/templates/plan.md +147 -0
- package/skills/git-worktree/rubrics/when-to-use.md +55 -0
- package/skills/handoff/agents/context-summarizer.md +51 -0
- package/skills/handoff/agents/document-writer.md +63 -0
- package/skills/handoff/agents/state-collector.md +53 -0
- package/skills/handoff/agents/verifier.md +48 -0
- package/skills/handoff/rubrics/completeness.md +62 -0
- package/skills/handoff/templates/handoff.md +107 -0
- package/skills/parallel-research/agents/best-practices.md +43 -0
- package/skills/parallel-research/agents/codebase-patterns.md +46 -0
- package/skills/parallel-research/agents/framework-docs.md +45 -0
- package/skills/parallel-research/agents/security-advisory.md +46 -0
- package/skills/parallel-research/agents/synthesizer.md +52 -0
- package/skills/parallel-research/experts/best-practices.md +50 -0
- package/skills/parallel-research/experts/codebase-patterns.md +70 -0
- package/skills/parallel-research/experts/framework-docs.md +65 -0
- package/skills/parallel-research/experts/security-advisory.md +69 -0
- package/skills/parallel-research/orchestrator.md +65 -0
- package/skills/parallel-research/templates/synthesis.md +101 -0
- package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -0
- package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -0
- package/skills/priority-todos/rubrics/prioritization.md +70 -0
- package/skills/priority-todos/templates/todo-board.md +59 -0
- package/skills/seo-checklist/frameworks/structured-data.md +153 -0
- package/skills/seo-checklist/rubrics/content-seo.md +42 -0
- package/skills/seo-checklist/rubrics/technical-seo.md +48 -0
- package/skills/techdebt/agents/analyzer.md +50 -0
- package/skills/techdebt/agents/fixer.md +41 -0
- package/skills/techdebt/agents/reviewer.md +47 -0
- package/skills/techdebt/agents/scanner.md +44 -0
- package/skills/techdebt/orchestrator.md +70 -0
- package/skills/techdebt/rubrics/severity.md +51 -0
- package/skills/techdebt/scripts/scan.js +90 -0
- package/skills/techdebt/templates/report.md +86 -0
- package/skills/tool-fallback/rubrics/fallback-chain.md +58 -0
- package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -0
- package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -0
- package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -0
- package/skills/user-personas/rubrics/research-methods.md +56 -0
- package/skills/user-personas/templates/persona.md +89 -0
- package/skills/vercel-react-best-practices/rubrics/performance.md +82 -0
- package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -0
- package/skills/vibe-docs/SKILL.md +171 -0
- package/skills/vibe-docs/templates/architecture.md +80 -0
- package/skills/vibe-docs/templates/readme.md +84 -0
- package/skills/vibe-docs/templates/release-notes.md +74 -0
- package/skills/vibe-figma/SKILL.md +122 -206
- package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -0
- package/skills/vibe-figma/templates/figma-handoff.md +96 -0
- package/skills/vibe-figma-analyze/rubrics/analysis-dimensions.md +53 -0
- package/skills/vibe-figma-codegen/rubrics/code-quality.md +54 -0
- package/skills/vibe-figma-consolidate/templates/consolidation-report.md +95 -0
- package/skills/vibe-figma-convert/SKILL.md +13 -175
- package/skills/vibe-figma-convert/rubrics/conversion-rules.md +83 -0
- package/skills/vibe-figma-convert/templates/component.md +152 -0
- package/skills/vibe-figma-extract/rubrics/image-rules.md +67 -0
- package/skills/vibe-figma-frame/rubrics/frame-selection.md +55 -0
- package/skills/vibe-figma-pipeline/rubrics/pipeline-stages.md +96 -0
- package/skills/vibe-figma-rules/rubrics/naming-conventions.md +70 -0
- package/skills/vibe-figma-style/rubrics/style-mapping.md +100 -0
- package/skills/video-production/rubrics/quality-checklist.md +58 -0
- package/skills/video-production/templates/production-plan.md +104 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: core-web-vitals
|
|
3
|
+
type: framework
|
|
4
|
+
applies-to: [design-audit]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Core Web Vitals — Reference Card
|
|
8
|
+
|
|
9
|
+
## The Three Metrics
|
|
10
|
+
|
|
11
|
+
| Metric | Measures | Good | Needs Improvement | Poor |
|
|
12
|
+
|--------|----------|------|-------------------|------|
|
|
13
|
+
| **LCP** — Largest Contentful Paint | Loading performance | ≤2.5s | 2.5s–4.0s | >4.0s |
|
|
14
|
+
| **INP** — Interaction to Next Paint | Responsiveness (replaces FID) | ≤200ms | 200ms–500ms | >500ms |
|
|
15
|
+
| **CLS** — Cumulative Layout Shift | Visual stability | ≤0.1 | 0.1–0.25 | >0.25 |
|
|
16
|
+
|
|
17
|
+
> **INP replaced FID** as a Core Web Vital in March 2024.
|
|
18
|
+
|
|
19
|
+
## LCP — Largest Contentful Paint
|
|
20
|
+
|
|
21
|
+
**What triggers LCP**: `<img>`, `<video>` poster, background-image via CSS, block-level text.
|
|
22
|
+
|
|
23
|
+
### Common Causes of Poor LCP
|
|
24
|
+
|
|
25
|
+
| Cause | Fix |
|
|
26
|
+
|-------|-----|
|
|
27
|
+
| Render-blocking resources | Move scripts to `defer`/`async`, inline critical CSS |
|
|
28
|
+
| Slow server response (TTFB >600ms) | CDN, edge caching, preconnect hints |
|
|
29
|
+
| LCP image not preloaded | Add `<link rel="preload" as="image">` for hero image |
|
|
30
|
+
| LCP image lazy-loaded | Remove `loading="lazy"` from above-fold images |
|
|
31
|
+
| Large uncompressed images | Use WebP/AVIF, set `srcset`, compress ≤200KB for hero |
|
|
32
|
+
|
|
33
|
+
```html
|
|
34
|
+
<!-- Good: preload LCP image, no lazy loading above fold -->
|
|
35
|
+
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high">
|
|
36
|
+
<img src="/hero.webp" alt="Hero" fetchpriority="high" width="1200" height="600">
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## INP — Interaction to Next Paint
|
|
40
|
+
|
|
41
|
+
**What triggers INP**: Click, tap, keyboard input — measures time until next frame paint.
|
|
42
|
+
|
|
43
|
+
### Common Causes of Poor INP
|
|
44
|
+
|
|
45
|
+
| Cause | Fix |
|
|
46
|
+
|-------|-----|
|
|
47
|
+
| Long JS tasks (>50ms) blocking main thread | Break into chunks with `scheduler.yield()` |
|
|
48
|
+
| Heavy event handlers | Debounce input, defer non-critical work |
|
|
49
|
+
| Synchronous layout thrash | Batch DOM reads/writes, use `requestAnimationFrame` |
|
|
50
|
+
| Large React re-renders on interaction | `useMemo`, `useCallback`, virtualize long lists |
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
// Good: yield back to browser between chunks
|
|
54
|
+
async function processLargeList(items: Item[]): Promise<void> {
|
|
55
|
+
for (const chunk of chunkArray(items, 50)) {
|
|
56
|
+
processChunk(chunk);
|
|
57
|
+
await scheduler.yield(); // let browser paint between chunks
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## CLS — Cumulative Layout Shift
|
|
63
|
+
|
|
64
|
+
**What causes shifts**: Elements inserted above existing content, images/iframes without dimensions, fonts swapping.
|
|
65
|
+
|
|
66
|
+
### Common Causes of Poor CLS
|
|
67
|
+
|
|
68
|
+
| Cause | Fix |
|
|
69
|
+
|-------|-----|
|
|
70
|
+
| Images without `width`/`height` | Always set explicit dimensions or `aspect-ratio` |
|
|
71
|
+
| Dynamic content injection (ads, banners) | Reserve space with `min-height` placeholders |
|
|
72
|
+
| Web fonts causing FOUT/FOIT | Use `font-display: swap` + preload key fonts |
|
|
73
|
+
| Animations using `top`/`left`/`margin` | Use `transform` instead (compositor-only) |
|
|
74
|
+
|
|
75
|
+
```css
|
|
76
|
+
/* Good: reserve space before image loads */
|
|
77
|
+
.hero-image {
|
|
78
|
+
aspect-ratio: 16 / 9;
|
|
79
|
+
width: 100%;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* Good: compositor-only animation (no layout shift) */
|
|
83
|
+
.slide-in {
|
|
84
|
+
transform: translateX(-100%);
|
|
85
|
+
transition: transform 0.3s ease;
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Measurement Tools
|
|
90
|
+
|
|
91
|
+
| Tool | Purpose |
|
|
92
|
+
|------|---------|
|
|
93
|
+
| Chrome DevTools → Performance | Record and analyze LCP/CLS waterfall |
|
|
94
|
+
| Lighthouse | Automated audit with recommendations |
|
|
95
|
+
| PageSpeed Insights | Field data (CrUX) + lab data combined |
|
|
96
|
+
| Web Vitals extension | Real-time metric overlay in browser |
|
|
97
|
+
| `web-vitals` npm package | Measure in production JS |
|
|
98
|
+
|
|
99
|
+
## Audit Checklist
|
|
100
|
+
|
|
101
|
+
- [ ] LCP element identified (DevTools → Performance → Timings)
|
|
102
|
+
- [ ] LCP image preloaded and not lazy-loaded
|
|
103
|
+
- [ ] All images have explicit `width` + `height` (or `aspect-ratio`)
|
|
104
|
+
- [ ] No layout-shifting animations using positional properties
|
|
105
|
+
- [ ] Fonts preloaded with `font-display: swap`
|
|
106
|
+
- [ ] No long tasks >50ms in interaction handlers
|
|
107
|
+
- [ ] Third-party scripts loaded with `async`/`defer`
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wcag-checklist
|
|
3
|
+
type: framework
|
|
4
|
+
applies-to: [design-audit]
|
|
5
|
+
standard: WCAG 2.1 AA
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# WCAG 2.1 AA — Key Criteria Reference Card
|
|
9
|
+
|
|
10
|
+
## Perceivable
|
|
11
|
+
|
|
12
|
+
| Criterion | Level | Requirement | Test |
|
|
13
|
+
|-----------|-------|-------------|------|
|
|
14
|
+
| 1.1.1 Non-text Content | A | All images have `alt` text | Check `<img>` for `alt` attribute |
|
|
15
|
+
| 1.3.1 Info and Relationships | A | Structure conveyed via markup (headings, lists, labels) | Heading hierarchy is logical |
|
|
16
|
+
| 1.3.3 Sensory Characteristics | A | Instructions don't rely on shape/color/location alone | "Click the red button" → add label |
|
|
17
|
+
| 1.4.1 Use of Color | A | Color not the only means of conveying information | Error state uses icon + color |
|
|
18
|
+
| 1.4.3 Contrast (Minimum) | AA | Text ≥ 4.5:1, large text ≥ 3:1 | Use contrast checker |
|
|
19
|
+
| 1.4.4 Resize Text | AA | Text resizable to 200% without loss of content | Test at 200% browser zoom |
|
|
20
|
+
| 1.4.10 Reflow | AA | Content reflows at 320px width without horizontal scroll | Test at 320px viewport |
|
|
21
|
+
| 1.4.11 Non-text Contrast | AA | UI components ≥ 3:1 against adjacent colors | Buttons, inputs, focus rings |
|
|
22
|
+
| 1.4.12 Text Spacing | AA | No content loss with: line-height 1.5, letter-spacing 0.12em | Apply via user stylesheet |
|
|
23
|
+
| 1.4.13 Content on Hover | AA | Hover/focus content dismissible, hoverable, persistent | Tooltips must stay on hover |
|
|
24
|
+
|
|
25
|
+
## Operable
|
|
26
|
+
|
|
27
|
+
| Criterion | Level | Requirement | Test |
|
|
28
|
+
|-----------|-------|-------------|------|
|
|
29
|
+
| 2.1.1 Keyboard | A | All functionality available via keyboard | Tab through all interactions |
|
|
30
|
+
| 2.1.2 No Keyboard Trap | A | Focus not trapped (except modals — must have escape) | Press Escape in all overlays |
|
|
31
|
+
| 2.4.1 Bypass Blocks | A | Skip-to-content link or landmark navigation | First focusable = skip link |
|
|
32
|
+
| 2.4.3 Focus Order | A | Focus order preserves meaning and operability | Tab order matches visual flow |
|
|
33
|
+
| 2.4.4 Link Purpose | A | Link purpose clear from link text or context | Avoid "click here", "read more" |
|
|
34
|
+
| 2.4.6 Headings and Labels | AA | Headings and labels are descriptive | No generic "Section 1" headings |
|
|
35
|
+
| 2.4.7 Focus Visible | AA | Keyboard focus indicator is visible | No `outline: none` without replacement |
|
|
36
|
+
|
|
37
|
+
## Understandable
|
|
38
|
+
|
|
39
|
+
| Criterion | Level | Requirement | Test |
|
|
40
|
+
|-----------|-------|-------------|------|
|
|
41
|
+
| 3.1.1 Language of Page | A | `lang` attribute on `<html>` | Check `<html lang="en">` |
|
|
42
|
+
| 3.2.1 On Focus | A | Focus doesn't trigger context change | No auto-submit on focus |
|
|
43
|
+
| 3.2.2 On Input | A | Input change doesn't auto-navigate without warning | Select menus don't auto-submit |
|
|
44
|
+
| 3.3.1 Error Identification | A | Errors identified and described in text | Not just red border — include message |
|
|
45
|
+
| 3.3.2 Labels or Instructions | A | Labels or instructions for user input | All form fields labeled |
|
|
46
|
+
| 3.3.3 Error Suggestion | AA | Suggest fixes when known (e.g., format hints) | "Use format MM/DD/YYYY" |
|
|
47
|
+
| 3.3.4 Error Prevention | AA | Legal/financial submissions reversible or confirmable | Confirm before delete |
|
|
48
|
+
|
|
49
|
+
## Robust
|
|
50
|
+
|
|
51
|
+
| Criterion | Level | Requirement | Test |
|
|
52
|
+
|-----------|-------|-------------|------|
|
|
53
|
+
| 4.1.1 Parsing | A | Valid HTML (no duplicate IDs, proper nesting) | Run HTML validator |
|
|
54
|
+
| 4.1.2 Name, Role, Value | A | UI components have accessible name, role, state | All custom widgets have ARIA |
|
|
55
|
+
| 4.1.3 Status Messages | AA | Status messages programmatically determinable | `role="status"` or `aria-live` |
|
|
56
|
+
|
|
57
|
+
## Quick Color Contrast Thresholds
|
|
58
|
+
|
|
59
|
+
| Text Type | Minimum Ratio |
|
|
60
|
+
|-----------|--------------|
|
|
61
|
+
| Normal text (<18pt / <14pt bold) | 4.5:1 |
|
|
62
|
+
| Large text (≥18pt / ≥14pt bold) | 3:1 |
|
|
63
|
+
| UI components (borders, icons) | 3:1 |
|
|
64
|
+
| Decorative / disabled elements | No requirement |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-audit-orchestrator
|
|
3
|
+
type: orchestrator
|
|
4
|
+
agents: [a11y-auditor, performance-auditor, responsive-auditor, slop-detector, scorer]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Design Audit Orchestrator
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
### Phase 1: Launch Dimension Auditors
|
|
12
|
+
- **Agent**: a11y-auditor, performance-auditor, responsive-auditor, slop-detector
|
|
13
|
+
- **Input**: Target files or component paths + optional design-context.json
|
|
14
|
+
- **Output**: Per-dimension findings `{dimension, findings[], severity}` scored 0–4
|
|
15
|
+
- **Parallel**: yes — all 4 auditors run simultaneously
|
|
16
|
+
|
|
17
|
+
### Phase 2: Aggregate Scores
|
|
18
|
+
- **Agent**: scorer
|
|
19
|
+
- **Input**: All 4 dimension results from Phase 1
|
|
20
|
+
- **Output**: Score table (per-dimension + overall), severity-tagged finding list (P0–P3)
|
|
21
|
+
- **Parallel**: no — requires all dimension results
|
|
22
|
+
|
|
23
|
+
### Phase 3: Generate Report
|
|
24
|
+
- **Agent**: orchestrator (self)
|
|
25
|
+
- **Input**: Scored results from Phase 2
|
|
26
|
+
- **Output**: Prioritized report with P0→P3 sections and per-dimension summaries
|
|
27
|
+
- **Parallel**: no
|
|
28
|
+
|
|
29
|
+
### Phase 4: Suggest Next Skill
|
|
30
|
+
- **Agent**: orchestrator (self)
|
|
31
|
+
- **Input**: Overall score and dominant failure dimension from Phase 3
|
|
32
|
+
- **Output**: Recommended next skill (`/design-normalize`, `/design-critique`, `/design-polish`)
|
|
33
|
+
- **Parallel**: no
|
|
34
|
+
|
|
35
|
+
## DAG (Dependency Graph)
|
|
36
|
+
|
|
37
|
+
```mermaid
|
|
38
|
+
graph TD
|
|
39
|
+
A[Phase 1a: a11y-auditor] --> E[Phase 2: Scorer]
|
|
40
|
+
B[Phase 1b: performance-auditor] --> E
|
|
41
|
+
C[Phase 1c: responsive-auditor] --> E
|
|
42
|
+
D[Phase 1d: slop-detector] --> E
|
|
43
|
+
E --> F[Phase 3: Generate Report]
|
|
44
|
+
F --> G[Phase 4: Next Skill Suggestion]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Error Handling
|
|
48
|
+
|
|
49
|
+
| Phase | Failure Mode | Strategy |
|
|
50
|
+
|-------|-------------|----------|
|
|
51
|
+
| Phase 1 | Auditor finds no applicable items (e.g., no images for perf) | Return score 4 (N/A treated as pass) |
|
|
52
|
+
| Phase 1 | Target file unreadable | Skip file, log warning, continue with others |
|
|
53
|
+
| Phase 1 | design-context.json missing | Proceed with defaults, note missing context |
|
|
54
|
+
| Phase 2 | <2 dimension scores returned | Warn user, compute partial overall score |
|
|
55
|
+
| Phase 3 | 0 findings across all dimensions | Output "No issues found" report — do not suppress |
|
|
56
|
+
| Phase 4 | Score at boundary of multiple next-skill suggestions | Present all applicable options ranked by score |
|
|
57
|
+
|
|
58
|
+
## Scalability Modes
|
|
59
|
+
|
|
60
|
+
| Mode | When | Agents Used |
|
|
61
|
+
|------|------|-------------|
|
|
62
|
+
| Full | Normal operation | All 4 auditors + scorer |
|
|
63
|
+
| Reduced | Single-concern audit | Target auditor only (e.g., a11y-auditor alone) |
|
|
64
|
+
| Single | Quick slop check | slop-detector only — fast AI-pattern scan |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# AI Slop Detection — Pattern Reference
|
|
2
|
+
|
|
3
|
+
Patterns that indicate AI-generated defaults rather than deliberate design decisions. Each entry describes the visual signature and why it signals slop.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Pattern 1: Cyan/Neon-on-Dark Accent
|
|
8
|
+
|
|
9
|
+
**Visual signature**: Electric cyan (`#00D8FF`, `#22D3EE`) or neon green/purple as the sole accent color on a dark gray or near-black background. Often applied to buttons, badges, and chart lines simultaneously.
|
|
10
|
+
|
|
11
|
+
**Why it's slop**: This palette is the default "tech/SaaS" output for most AI image and code generators. It signals no brand research was done.
|
|
12
|
+
|
|
13
|
+
**Legitimate exception**: Cyberpunk-themed games, developer tools with a deliberate retro-terminal aesthetic, or products with documented brand guidelines using these colors.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Pattern 2: Purple-to-Blue Gradient Hero
|
|
18
|
+
|
|
19
|
+
**Visual signature**: A full-bleed hero section or page background using a diagonal or radial gradient from `#7C3AED` (purple) to `#2563EB` (blue). Often combined with white or light text and a "glow" effect.
|
|
20
|
+
|
|
21
|
+
**Why it's slop**: The most overused AI-generated hero background across all categories and industries. Applied without regard for brand personality.
|
|
22
|
+
|
|
23
|
+
**Legitimate exception**: Brand explicitly uses purple and blue as primary colors with documented rationale.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Pattern 3: Hero Metric Template
|
|
28
|
+
|
|
29
|
+
**Visual signature**: An oversized number (60–80px font, often bold or gradient-colored) with a tiny label below it (`"Active Users"`, `"Revenue"`, `"Uptime"`). Three or four of these arranged in a row as the primary dashboard view.
|
|
30
|
+
|
|
31
|
+
**Why it's slop**: It's a structural template, not a data visualization decision. Used regardless of whether the numbers are meaningful or whether the user needs them front and center.
|
|
32
|
+
|
|
33
|
+
**Legitimate exception**: Real-time operational dashboards where these metrics are the primary user task.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Pattern 4: Identical 3-Up Card Grid
|
|
38
|
+
|
|
39
|
+
**Visual signature**: Exactly three cards in a horizontal row, each containing an icon (top-left or centered), a short bold title, and 1–2 lines of description text. Repeated verbatim as a features section, benefits section, or team section.
|
|
40
|
+
|
|
41
|
+
**Why it's slop**: The 3-up grid is the default content-filling pattern for every AI-generated landing page. It imposes a visual structure regardless of whether the content benefits from comparison.
|
|
42
|
+
|
|
43
|
+
**Legitimate exception**: Content is genuinely comparative (pricing tiers, product variants), or the grid contains more than 3 genuinely distinct items.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Pattern 5: Default Glassmorphism
|
|
48
|
+
|
|
49
|
+
**Visual signature**: Cards and panels with `backdrop-filter: blur(12px)`, a semi-transparent white or colored background (`rgba(255,255,255,0.1)`), and a subtle border (`rgba(255,255,255,0.2)`). Applied as the primary surface treatment across all cards.
|
|
50
|
+
|
|
51
|
+
**Why it's slop**: Glassmorphism is a specific aesthetic that requires a layered background to function visually. AI applies it universally as a "modern" default, often on solid-color backgrounds where it produces no effect.
|
|
52
|
+
|
|
53
|
+
**Legitimate exception**: OS-style UIs, media applications with rich background imagery, or products where glass surfaces are part of a coherent aesthetic system.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Pattern 6: Bounce/Elastic Functional Animation
|
|
58
|
+
|
|
59
|
+
**Visual signature**: UI elements that overshoot their final position with `cubic-bezier` bounce or spring easing during state transitions — modals sliding in with elastic overshoot, buttons that wobble on hover, list items that bounce into view.
|
|
60
|
+
|
|
61
|
+
**Why it's slop**: Bounce easing communicates playfulness. Applied to functional transitions (modals, form submissions, navigation) it creates a tonally inconsistent experience and feels unpolished in professional contexts.
|
|
62
|
+
|
|
63
|
+
**Legitimate exception**: Mobile games, children's apps, or products with an explicitly playful brand personality where the animation reinforces brand voice.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Pattern 7: Inter/Roboto as Lazy Default
|
|
68
|
+
|
|
69
|
+
**Visual signature**: Inter or Roboto used as both heading and body font across a product with no visible typography hierarchy differentiation. No font scale customization — using default weights and sizes from the framework.
|
|
70
|
+
|
|
71
|
+
**Why it's slop**: These fonts are excellent but are chosen by AI because they are safe and system-default-adjacent. Font selection should reflect brand personality and audience expectations.
|
|
72
|
+
|
|
73
|
+
**Legitimate exception**: Products that have explicitly evaluated their font options and chosen Inter/Roboto for legibility, neutrality, or performance reasons — with documented rationale.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Pattern 8: Gradient Text on Metrics/Statistics
|
|
78
|
+
|
|
79
|
+
**Visual signature**: Key numbers, statistics, or headings rendered with a linear gradient applied to the text itself (`background-clip: text; -webkit-text-fill-color: transparent`), typically the same purple-to-blue or cyan-to-blue range.
|
|
80
|
+
|
|
81
|
+
**Why it's slop**: Gradient text is visually noisy and reduces readability. It is applied wholesale by AI to make numbers "pop" without considering whether the visual effect serves the data's meaning.
|
|
82
|
+
|
|
83
|
+
**Legitimate exception**: Brand wordmarks, decorative headings where legibility is secondary to visual impact, or hero statements where the gradient is part of a consistent typographic system.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Design Audit — Detailed Scoring Rubric
|
|
2
|
+
|
|
3
|
+
Each dimension scored 0–4. Score the lowest applicable level that matches observed issues.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Accessibility (a11y)
|
|
8
|
+
|
|
9
|
+
| Score | Criteria |
|
|
10
|
+
|-------|----------|
|
|
11
|
+
| **4** | All interactive elements keyboard-reachable; ARIA roles correct; contrast ≥ 4.5:1 everywhere; all images have meaningful alt text; every form input has a label; focus indicators visible; `aria-live` on dynamic regions; skip-to-content present |
|
|
12
|
+
| **3** | 1–2 minor issues: e.g., one icon missing `aria-label`, or skip link absent on a simple page |
|
|
13
|
+
| **2** | Multiple issues but no complete blockers: e.g., some form inputs unlabeled, focus order inconsistent in one section |
|
|
14
|
+
| **1** | Significant gaps: contrast failures on primary text, keyboard traps present, or no ARIA on custom widgets |
|
|
15
|
+
| **0** | Critical failures: interactive elements unreachable by keyboard, no contrast at all on key text, or screen reader produces nonsense navigation |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. Performance
|
|
20
|
+
|
|
21
|
+
| Score | Criteria |
|
|
22
|
+
|-------|----------|
|
|
23
|
+
| **4** | All below-fold images lazy-loaded with `srcset` and modern formats; ≤3 font files with `font-display: swap`; critical CSS inlined; JS code-split at routes; no layout shift on media; no duplicate deps |
|
|
24
|
+
| **3** | 1–2 minor gaps: e.g., one non-critical image missing `loading="lazy"`, or a fourth font file loaded |
|
|
25
|
+
| **2** | Several issues: missing lazy load on multiple images, no `font-display`, or a blocking script in `<head>` |
|
|
26
|
+
| **1** | Major issues: no image optimization at all, large unneeded CSS framework fully loaded, or significant layout shifts |
|
|
27
|
+
| **0** | Critical: blocking JS on `<head>` delays render, images 5× larger than necessary, LCP asset entirely unoptimized |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. Responsive
|
|
32
|
+
|
|
33
|
+
| Score | Criteria |
|
|
34
|
+
|-------|----------|
|
|
35
|
+
| **4** | Mobile-first breakpoints; all touch targets ≥ 44×44px; no horizontal scroll at any viewport; typography scales cleanly; container queries used where appropriate; navigation adapts correctly |
|
|
36
|
+
| **3** | 1–2 small gaps: e.g., one touch target slightly under 44px, or minor horizontal overflow on a niche breakpoint |
|
|
37
|
+
| **2** | Several issues: some touch targets too small, typography doesn't scale, navigation doesn't adapt on mobile |
|
|
38
|
+
| **1** | Layout broken at common breakpoints; horizontal scroll present; fixed-width elements causing overflow |
|
|
39
|
+
| **0** | Completely non-responsive: desktop layout forced on mobile, content unreadable at 375px |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 4. Theming
|
|
44
|
+
|
|
45
|
+
| Score | Criteria |
|
|
46
|
+
|-------|----------|
|
|
47
|
+
| **4** | All colors via CSS custom properties; dark mode supported or explicitly opted out with documentation; spacing, radius, and shadows all use design tokens; component variants use data attributes or classes only |
|
|
48
|
+
| **3** | 1–3 hardcoded values in low-visibility areas; no inline styles on primary surfaces |
|
|
49
|
+
| **2** | Multiple hardcoded values scattered through components; some spacing arbitrary; dark mode partial or inconsistent |
|
|
50
|
+
| **1** | Most values hardcoded; design tokens exist but rarely used; inline styles prevalent |
|
|
51
|
+
| **0** | No token system; all values inline or in scattered magic numbers; dark mode completely absent if required |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 5. AI Slop Detection
|
|
56
|
+
|
|
57
|
+
| Score | Criteria |
|
|
58
|
+
|-------|----------|
|
|
59
|
+
| **4** | No AI template patterns; color scheme, typography, and layout reflect deliberate brand choices; animations serve function; design feels intentional and specific to this product |
|
|
60
|
+
| **3** | 1 pattern present but with partial justification (e.g., gradient used sparingly, not as the dominant aesthetic) |
|
|
61
|
+
| **2** | 2–3 patterns present; design leans on AI defaults without clear brand rationale |
|
|
62
|
+
| **1** | 4–5 patterns present; the overall aesthetic is indistinguishable from generic AI-generated UI |
|
|
63
|
+
| **0** | Full AI slop template: neon/cyan accents, purple-blue gradient hero, glassmorphism cards, 3-up icon grids, Inter font, gradient metric text — all present simultaneously |
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Design Audit Report: {{TARGET}}
|
|
2
|
+
|
|
3
|
+
**Date**: {{DATE}}
|
|
4
|
+
**Auditor**: {{AUDITOR}}
|
|
5
|
+
**Scope**: {{SCOPE_DESCRIPTION}}
|
|
6
|
+
**Design Context**: {{CONTEXT_SOURCE}} (design-context.json / defaults)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Scores
|
|
11
|
+
|
|
12
|
+
| Dimension | Score | Grade | Key Issues |
|
|
13
|
+
|-----------|-------|-------|------------|
|
|
14
|
+
| Accessibility | {{A11Y_SCORE}}/4 | {{A11Y_GRADE}} | {{A11Y_SUMMARY}} |
|
|
15
|
+
| Performance | {{PERF_SCORE}}/4 | {{PERF_GRADE}} | {{PERF_SUMMARY}} |
|
|
16
|
+
| Responsive | {{RESP_SCORE}}/4 | {{RESP_GRADE}} | {{RESP_SUMMARY}} |
|
|
17
|
+
| Theming | {{THEME_SCORE}}/4 | {{THEME_GRADE}} | {{THEME_SUMMARY}} |
|
|
18
|
+
| AI Slop | {{SLOP_SCORE}}/4 | {{SLOP_GRADE}} | {{SLOP_SUMMARY}} |
|
|
19
|
+
| **Overall** | **{{TOTAL_SCORE}}/20** | **{{TOTAL_PCT}}%** | |
|
|
20
|
+
|
|
21
|
+
Grade scale: 4=Excellent, 3=Good, 2=Moderate, 1=Major Issues, 0=Critical
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Findings
|
|
26
|
+
|
|
27
|
+
### P0 — Blocker (breaks functionality)
|
|
28
|
+
|
|
29
|
+
{{#P0_FINDINGS}}
|
|
30
|
+
- [{{DIMENSION}}] {{DESCRIPTION}} — `{{FILE}}:{{LINE}}`
|
|
31
|
+
{{/P0_FINDINGS}}
|
|
32
|
+
{{#NO_P0}}
|
|
33
|
+
- None
|
|
34
|
+
{{/NO_P0}}
|
|
35
|
+
|
|
36
|
+
### P1 — Critical (significant UX impact)
|
|
37
|
+
|
|
38
|
+
{{#P1_FINDINGS}}
|
|
39
|
+
- [{{DIMENSION}}] {{DESCRIPTION}} — `{{FILE}}:{{LINE}}`
|
|
40
|
+
{{/P1_FINDINGS}}
|
|
41
|
+
{{#NO_P1}}
|
|
42
|
+
- None
|
|
43
|
+
{{/NO_P1}}
|
|
44
|
+
|
|
45
|
+
### P2 — Important (noticeable quality gap)
|
|
46
|
+
|
|
47
|
+
{{#P2_FINDINGS}}
|
|
48
|
+
- [{{DIMENSION}}] {{DESCRIPTION}} — `{{FILE}}:{{LINE}}`
|
|
49
|
+
{{/P2_FINDINGS}}
|
|
50
|
+
{{#NO_P2}}
|
|
51
|
+
- None
|
|
52
|
+
{{/NO_P2}}
|
|
53
|
+
|
|
54
|
+
### P3 — Minor (polish opportunity)
|
|
55
|
+
|
|
56
|
+
{{#P3_FINDINGS}}
|
|
57
|
+
- [{{DIMENSION}}] {{DESCRIPTION}} — `{{FILE}}:{{LINE}}`
|
|
58
|
+
{{/P3_FINDINGS}}
|
|
59
|
+
{{#NO_P3}}
|
|
60
|
+
- None
|
|
61
|
+
{{/NO_P3}}
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Recommendations
|
|
66
|
+
|
|
67
|
+
{{#RECOMMENDATIONS}}
|
|
68
|
+
{{INDEX}}. {{RECOMMENDATION}}
|
|
69
|
+
{{/RECOMMENDATIONS}}
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Next Steps
|
|
74
|
+
|
|
75
|
+
| Condition | Recommended Skill |
|
|
76
|
+
|-----------|-------------------|
|
|
77
|
+
| Design system inconsistencies found | `/design-normalize` |
|
|
78
|
+
| UX/usability concerns noted | `/design-critique` |
|
|
79
|
+
| Score ≥ 16/20, minor polish only | `/design-polish` |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Audit Metadata
|
|
84
|
+
|
|
85
|
+
- Files scanned: {{FILE_COUNT}}
|
|
86
|
+
- Total findings: {{TOTAL_FINDINGS}} (P0: {{P0_COUNT}}, P1: {{P1_COUNT}}, P2: {{P2_COUNT}}, P3: {{P3_COUNT}})
|
|
87
|
+
- Platform: {{PLATFORM}}
|
|
88
|
+
- Stack: {{STACK}}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Nielsen's 10 Usability Heuristics — Code Review Adaptation
|
|
2
|
+
|
|
3
|
+
Scoring per heuristic: 0 (violated) → 4 (excellent). Focus on what is observable in the code.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## H1 — Visibility of System Status
|
|
8
|
+
|
|
9
|
+
**What to look for in code**: Loading states on async actions, progress indicators, state-driven class/attribute changes, `aria-live` regions for dynamic content.
|
|
10
|
+
|
|
11
|
+
| Score | Code Evidence |
|
|
12
|
+
|-------|---------------|
|
|
13
|
+
| **4** | Every async action has a loading state; progress shown for multi-step ops; dynamic regions use `aria-live` |
|
|
14
|
+
| **3** | Most async actions covered; 1 operation missing feedback |
|
|
15
|
+
| **2** | Loading states on primary actions only; secondary actions have no feedback |
|
|
16
|
+
| **1** | Only a spinner on page load; form submissions and mutations give no feedback |
|
|
17
|
+
| **0** | No loading states anywhere; UI freezes silently on async calls |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## H2 — Match Between System and Real World
|
|
22
|
+
|
|
23
|
+
**What to look for**: Label copy, icon choices, terminology in component props and display text, logical grouping of related items.
|
|
24
|
+
|
|
25
|
+
| Score | Code Evidence |
|
|
26
|
+
|-------|---------------|
|
|
27
|
+
| **4** | All labels use user-facing language (not internal field names); icons are universally understood; groupings match mental models |
|
|
28
|
+
| **3** | Mostly natural language; 1–2 developer-facing terms exposed in UI |
|
|
29
|
+
| **2** | Mixed: some labels match user expectations, others use internal/technical terminology |
|
|
30
|
+
| **1** | Predominantly technical labels (`user_id`, `ts`, `ref_code`) in visible UI |
|
|
31
|
+
| **0** | Raw API field names or database column names exposed directly to users |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## H3 — User Control and Freedom
|
|
36
|
+
|
|
37
|
+
**What to look for**: Cancel buttons on dialogs and forms, undo functionality, ability to navigate back, escape-to-close on modals.
|
|
38
|
+
|
|
39
|
+
| Score | Code Evidence |
|
|
40
|
+
|-------|---------------|
|
|
41
|
+
| **4** | Undo available for destructive actions; all modals closeable via Escape; cancel on all multi-step flows |
|
|
42
|
+
| **3** | Most paths have exits; one flow lacks a clear back/cancel |
|
|
43
|
+
| **2** | Cancel exists on modals but destructive actions (delete, submit) have no undo |
|
|
44
|
+
| **1** | No undo; several flows trap the user until completion |
|
|
45
|
+
| **0** | Irreversible destructive actions with no confirmation or recovery path |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## H4 — Consistency and Standards
|
|
50
|
+
|
|
51
|
+
**What to look for**: Reuse of shared components, consistent prop naming, same action always produces same UI response, platform conventions followed.
|
|
52
|
+
|
|
53
|
+
| Score | Code Evidence |
|
|
54
|
+
|-------|---------------|
|
|
55
|
+
| **4** | Shared component library used throughout; same action triggers same visual pattern; follows platform HIG |
|
|
56
|
+
| **3** | 1–2 inconsistencies (e.g., one custom button not using Button component) |
|
|
57
|
+
| **2** | Some shared components but several one-off implementations for identical patterns |
|
|
58
|
+
| **1** | Each page re-implements its own UI patterns; no shared components |
|
|
59
|
+
| **0** | Same action produces visually different results on different screens |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## H5 — Error Prevention
|
|
64
|
+
|
|
65
|
+
**What to look for**: Input validation (inline, not just on submit), confirmation dialogs on destructive actions, disabled states on invalid forms, input constraints (maxLength, type, pattern).
|
|
66
|
+
|
|
67
|
+
| Score | Code Evidence |
|
|
68
|
+
|-------|---------------|
|
|
69
|
+
| **4** | Inline validation; destructive actions confirmed; submit disabled until valid; input types constrain input |
|
|
70
|
+
| **3** | Confirmation dialogs present; validation on submit but not inline |
|
|
71
|
+
| **2** | Some validation; destructive actions have confirmation but forms don't validate until submit |
|
|
72
|
+
| **1** | No inline validation; destructive actions unconstrained |
|
|
73
|
+
| **0** | No validation or confirmation; data loss possible without warning |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## H6 — Recognition Rather Than Recall
|
|
78
|
+
|
|
79
|
+
**What to look for**: Breadcrumbs, visible current state in navigation, contextual help text, search suggestions, recently used items.
|
|
80
|
+
|
|
81
|
+
| Score | Code Evidence |
|
|
82
|
+
|-------|---------------|
|
|
83
|
+
| **4** | Current location always visible; options surfaced in context; search includes suggestions |
|
|
84
|
+
| **3** | Navigation shows current state; options visible on primary flows |
|
|
85
|
+
| **2** | Some affordances; secondary flows require user to remember where they are |
|
|
86
|
+
| **1** | No breadcrumbs; navigation doesn't indicate current section; users must recall paths |
|
|
87
|
+
| **0** | Deep nested flows with no orientation cues |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## H7 — Flexibility and Efficiency
|
|
92
|
+
|
|
93
|
+
**What to look for**: Keyboard shortcuts, bulk actions, saved defaults, power-user paths that bypass multi-step flows.
|
|
94
|
+
|
|
95
|
+
| Score | Code Evidence |
|
|
96
|
+
|-------|---------------|
|
|
97
|
+
| **4** | Keyboard shortcuts for primary actions; bulk selection; smart defaults pre-populated |
|
|
98
|
+
| **3** | Good defaults; 1–2 keyboard shortcuts on critical actions |
|
|
99
|
+
| **2** | No shortcuts; forms have some defaults but key fields are always blank |
|
|
100
|
+
| **1** | Every task requires the same number of steps regardless of user expertise |
|
|
101
|
+
| **0** | Power users actively slowed down (e.g., forced onboarding on repeat visits) |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## H8 — Aesthetic and Minimalist Design
|
|
106
|
+
|
|
107
|
+
**What to look for**: Signal-to-noise ratio in rendered output; unnecessary decorative elements; information density relative to task complexity.
|
|
108
|
+
|
|
109
|
+
| Score | Code Evidence |
|
|
110
|
+
|-------|---------------|
|
|
111
|
+
| **4** | Every visible element serves a task or provides necessary context; no decorative noise |
|
|
112
|
+
| **3** | Mostly clean; 1–2 decorative elements that could be removed without loss |
|
|
113
|
+
| **2** | Several decorative elements that compete with primary content |
|
|
114
|
+
| **1** | UI is visually busy; primary actions compete with decoration |
|
|
115
|
+
| **0** | Information overload; users cannot identify primary action without significant scanning |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## H9 — Help Users Recognize and Recover from Errors
|
|
120
|
+
|
|
121
|
+
**What to look for**: Error message copy (specific, human-readable, with next steps), error placement (near the problem), error state styling.
|
|
122
|
+
|
|
123
|
+
| Score | Code Evidence |
|
|
124
|
+
|-------|---------------|
|
|
125
|
+
| **4** | Errors are specific, placed next to the problem, and suggest a fix; styled distinctly |
|
|
126
|
+
| **3** | Clear error messages; placed correctly; fix suggestion sometimes missing |
|
|
127
|
+
| **2** | Error messages exist but are generic ("Something went wrong") or placed in a toast far from the issue |
|
|
128
|
+
| **1** | Raw error codes or API messages exposed to users |
|
|
129
|
+
| **0** | No error states; failures silently ignored or produce white screens |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## H10 — Help and Documentation
|
|
134
|
+
|
|
135
|
+
**What to look for**: Tooltips on complex fields, onboarding flows for new users, empty states with guidance, contextual help links.
|
|
136
|
+
|
|
137
|
+
| Score | Code Evidence |
|
|
138
|
+
|-------|---------------|
|
|
139
|
+
| **4** | Tooltips on non-obvious fields; empty states guide next action; onboarding present for new users |
|
|
140
|
+
| **3** | Empty states with calls-to-action; tooltips on some complex fields |
|
|
141
|
+
| **2** | Generic empty states ("No data found") without guidance |
|
|
142
|
+
| **1** | No tooltips, empty state guidance, or onboarding |
|
|
143
|
+
| **0** | Confusing UI with no help and no path to documentation |
|