@tinkcarlos/skillora 0.2.0
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/.claude/skills/.temp-skill-index.md +245 -0
- package/.claude/skills/SKILL.md +264 -0
- package/.claude/skills/api-scaffolding/SKILL.md +431 -0
- package/.claude/skills/api-scaffolding/agents/backend-architect.md +282 -0
- package/.claude/skills/api-scaffolding/agents/django-pro.md +144 -0
- package/.claude/skills/api-scaffolding/agents/fastapi-pro.md +156 -0
- package/.claude/skills/api-scaffolding/agents/graphql-architect.md +146 -0
- package/.claude/skills/api-scaffolding/skills/fastapi-templates/SKILL.md +171 -0
- package/.claude/skills/api-testing-observability/SKILL.md +583 -0
- package/.claude/skills/api-testing-observability/agents/api-documenter.md +146 -0
- package/.claude/skills/api-testing-observability/commands/api-mock.md +1320 -0
- package/.claude/skills/brainstorming/SKILL.md +283 -0
- package/.claude/skills/bug-fixing/SKILL.md +382 -0
- package/.claude/skills/bug-fixing/references/backend-guide.md +132 -0
- package/.claude/skills/bug-fixing/references/bug-guide.md +354 -0
- package/.claude/skills/bug-fixing/references/bug-record-template.md +134 -0
- package/.claude/skills/bug-fixing/references/bug-records.md +88 -0
- package/.claude/skills/bug-fixing/references/code-review-gate.md +81 -0
- package/.claude/skills/bug-fixing/references/common-bugs.md +140 -0
- package/.claude/skills/bug-fixing/references/complete-workflow.md +361 -0
- package/.claude/skills/bug-fixing/references/config-driven-fixes.md +136 -0
- package/.claude/skills/bug-fixing/references/context-isolation-protocol.md +268 -0
- package/.claude/skills/bug-fixing/references/cross-surface-regression.md +120 -0
- package/.claude/skills/bug-fixing/references/database-investigation.md +129 -0
- package/.claude/skills/bug-fixing/references/dependency-and-integrity-protocol.md +369 -0
- package/.claude/skills/bug-fixing/references/fix-completeness-checklist.md +239 -0
- package/.claude/skills/bug-fixing/references/frontend-guide.md +219 -0
- package/.claude/skills/bug-fixing/references/fullstack-joint-guide.md +123 -0
- package/.claude/skills/bug-fixing/references/functional-breakage.md +117 -0
- package/.claude/skills/bug-fixing/references/ide-lint-errors-guide.md +176 -0
- package/.claude/skills/bug-fixing/references/impact-analysis.md +511 -0
- package/.claude/skills/bug-fixing/references/investigation-checklist.md +263 -0
- package/.claude/skills/bug-fixing/references/knowledge-extraction-guide.md +531 -0
- package/.claude/skills/bug-fixing/references/knowledge-workflow.md +212 -0
- package/.claude/skills/bug-fixing/references/post-edit-quality-gate.md +30 -0
- package/.claude/skills/bug-fixing/references/python-env-and-testing.md +126 -0
- package/.claude/skills/bug-fixing/references/rca-guide.md +428 -0
- package/.claude/skills/bug-fixing/references/similar-bug-patterns.md +113 -0
- package/.claude/skills/bug-fixing/references/skill-delegation-guide.md +350 -0
- package/.claude/skills/bug-fixing/references/skill-orchestration.md +155 -0
- package/.claude/skills/bug-fixing/references/testing-strategy.md +350 -0
- package/.claude/skills/bug-fixing/references/tooling-build-scripts.md +162 -0
- package/.claude/skills/bug-fixing/references/user-input-validation.md +77 -0
- package/.claude/skills/bug-fixing/references/ux-patterns.md +158 -0
- package/.claude/skills/bug-fixing/references/windows-terminal-hygiene.md +106 -0
- package/.claude/skills/bug-fixing/references/zero-regression-matrix.md +239 -0
- package/.claude/skills/bug-fixing/references/zero-risk-protocol.md +102 -0
- package/.claude/skills/bug-fixing/scripts/format_code.py +611 -0
- package/.claude/skills/bug-fixing/scripts/generate_report_template.py +74 -0
- package/.claude/skills/bug-fixing/scripts/lint_check.py +816 -0
- package/.claude/skills/bug-fixing/scripts/requirements.txt +36 -0
- package/.claude/skills/cicd-pipeline/SKILL.md +300 -0
- package/.claude/skills/code-review/SKILL.md +535 -0
- package/.claude/skills/code-review/references/anti-pattern-scan.md +102 -0
- package/.claude/skills/code-review/references/automated-analysis.md +456 -0
- package/.claude/skills/code-review/references/backend-common-issues.md +589 -0
- package/.claude/skills/code-review/references/backend-expert-guide.md +415 -0
- package/.claude/skills/code-review/references/backend-review.md +868 -0
- package/.claude/skills/code-review/references/batch-processing-strategy.md +198 -0
- package/.claude/skills/code-review/references/call-chain-analysis-protocol.md +166 -0
- package/.claude/skills/code-review/references/common-patterns.md +321 -0
- package/.claude/skills/code-review/references/configuration-review.md +425 -0
- package/.claude/skills/code-review/references/control-flow-completeness.md +114 -0
- package/.claude/skills/code-review/references/database-review.md +298 -0
- package/.claude/skills/code-review/references/dependency-and-integrity-protocol.md +313 -0
- package/.claude/skills/code-review/references/external-standards.md +51 -0
- package/.claude/skills/code-review/references/feature-review.md +329 -0
- package/.claude/skills/code-review/references/file-review-template.md +326 -0
- package/.claude/skills/code-review/references/frontend-advanced.md +654 -0
- package/.claude/skills/code-review/references/frontend-common-issues.md +482 -0
- package/.claude/skills/code-review/references/frontend-expert-guide.md +342 -0
- package/.claude/skills/code-review/references/frontend-review.md +783 -0
- package/.claude/skills/code-review/references/fullstack-consistency.md +418 -0
- package/.claude/skills/code-review/references/fullstack-review.md +477 -0
- package/.claude/skills/code-review/references/functional-completeness.md +386 -0
- package/.claude/skills/code-review/references/hidden-bugs-detection.md +473 -0
- package/.claude/skills/code-review/references/ide-lint-errors-guide.md +173 -0
- package/.claude/skills/code-review/references/infrastructure-review.md +453 -0
- package/.claude/skills/code-review/references/iteration-review.md +264 -0
- package/.claude/skills/code-review/references/job-review.md +335 -0
- package/.claude/skills/code-review/references/layered-checklist-protocol.md +157 -0
- package/.claude/skills/code-review/references/logic-completeness.md +535 -0
- package/.claude/skills/code-review/references/mandatory-checklist.md +288 -0
- package/.claude/skills/code-review/references/multi-language-guide.md +800 -0
- package/.claude/skills/code-review/references/new-project-review.md +226 -0
- package/.claude/skills/code-review/references/non-code-files-review.md +451 -0
- package/.claude/skills/code-review/references/overlooked-issues.md +657 -0
- package/.claude/skills/code-review/references/platform-specific-review.md +195 -0
- package/.claude/skills/code-review/references/precision-analysis-protocol.md +260 -0
- package/.claude/skills/code-review/references/python-patterns.md +494 -0
- package/.claude/skills/code-review/references/rca-techniques.md +362 -0
- package/.claude/skills/code-review/references/report-template.md +430 -0
- package/.claude/skills/code-review/references/resource-limits-and-degradation.md +137 -0
- package/.claude/skills/code-review/references/review-dimensions.md +311 -0
- package/.claude/skills/code-review/references/review-guide.md +202 -0
- package/.claude/skills/code-review/references/review-knowledge-workflow.md +257 -0
- package/.claude/skills/code-review/references/review-progress-tracker-protocol.md +172 -0
- package/.claude/skills/code-review/references/review-record-template.md +195 -0
- package/.claude/skills/code-review/references/skill-orchestration.md +143 -0
- package/.claude/skills/code-review/references/ui-ux-review.md +470 -0
- package/.claude/skills/containerization/SKILL.md +313 -0
- package/.claude/skills/database-migrations/agents/database-admin.md +142 -0
- package/.claude/skills/database-migrations/agents/database-optimizer.md +144 -0
- package/.claude/skills/database-migrations/commands/migration-observability.md +408 -0
- package/.claude/skills/database-migrations/commands/sql-migrations.md +492 -0
- package/.claude/skills/finishing-a-development-branch/SKILL.md +319 -0
- package/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/.claude/skills/frontend-design/SKILL.md +587 -0
- package/.claude/skills/frontend-design/references/color-consistency.md +487 -0
- package/.claude/skills/frontend-design/references/color-palettes-full.md +657 -0
- package/.claude/skills/frontend-design/references/design-system-generator.md +285 -0
- package/.claude/skills/frontend-design/references/font-pairings-full.md +705 -0
- package/.claude/skills/frontend-design/references/industry-anti-patterns.md +281 -0
- package/.claude/skills/frontend-design/references/layout-anti-patterns.md +582 -0
- package/.claude/skills/frontend-design/references/motion-patterns.md +659 -0
- package/.claude/skills/frontend-design/references/pre-delivery-checklist.md +153 -0
- package/.claude/skills/frontend-design/references/responsive-design.md +555 -0
- package/.claude/skills/frontend-design/references/style-modification-rules.md +335 -0
- package/.claude/skills/frontend-design/references/ui-styles-full.md +383 -0
- package/.claude/skills/frontend-design/references/ui-styles-rating.md +191 -0
- package/.claude/skills/frontend-design/references/ux-guidelines.md +640 -0
- package/.claude/skills/fullstack-developer/SKILL.md +512 -0
- package/.claude/skills/fullstack-developer/references/api-contract-guide.md +312 -0
- package/.claude/skills/fullstack-developer/references/api-response-patterns.md +223 -0
- package/.claude/skills/fullstack-developer/references/async-patterns.md +220 -0
- package/.claude/skills/fullstack-developer/references/bug-prevention.md +914 -0
- package/.claude/skills/fullstack-developer/references/code-quality-checklist.md +271 -0
- package/.claude/skills/fullstack-developer/references/complete-development-workflow.md +278 -0
- package/.claude/skills/fullstack-developer/references/context-isolation-protocol.md +256 -0
- package/.claude/skills/fullstack-developer/references/database-migration.md +331 -0
- package/.claude/skills/fullstack-developer/references/dependency-and-integrity-protocol.md +390 -0
- package/.claude/skills/fullstack-developer/references/development-phases.md +333 -0
- package/.claude/skills/fullstack-developer/references/expert-guide.md +214 -0
- package/.claude/skills/fullstack-developer/references/file-import-patterns.md +114 -0
- package/.claude/skills/fullstack-developer/references/graceful-degradation-patterns.md +78 -0
- package/.claude/skills/fullstack-developer/references/ide-lint-errors-guide.md +183 -0
- package/.claude/skills/fullstack-developer/references/integration-testing.md +301 -0
- package/.claude/skills/fullstack-developer/references/mock-api-patterns.md +307 -0
- package/.claude/skills/fullstack-developer/references/phase-gate-template.md +249 -0
- package/.claude/skills/fullstack-developer/references/post-edit-quality-gate.md +30 -0
- package/.claude/skills/fullstack-developer/references/python-engineering.md +79 -0
- package/.claude/skills/fullstack-developer/references/skill-orchestration.md +214 -0
- package/.claude/skills/fullstack-developer/references/skill-router-table.md +304 -0
- package/.claude/skills/fullstack-developer/references/state-sync.md +217 -0
- package/.claude/skills/fullstack-developer/references/ui-testing-checklist.md +292 -0
- package/.claude/skills/fullstack-developer/scripts/format_code.py +611 -0
- package/.claude/skills/fullstack-developer/scripts/lint_check.py +816 -0
- package/.claude/skills/fullstack-developer/scripts/requirements.txt +36 -0
- package/.claude/skills/performance-optimization/SKILL.md +250 -0
- package/.claude/skills/product-requirements/SKILL.md +357 -0
- package/.claude/skills/product-requirements/references/acceptance-criteria.md +335 -0
- package/.claude/skills/product-requirements/references/answer-first-questioning-protocol.md +299 -0
- package/.claude/skills/product-requirements/references/competitive-analysis-guide.md +183 -0
- package/.claude/skills/product-requirements/references/document-accuracy-protocol.md +253 -0
- package/.claude/skills/product-requirements/references/document-management-protocol.md +278 -0
- package/.claude/skills/product-requirements/references/external-standards.md +62 -0
- package/.claude/skills/product-requirements/references/feature-spec-template.md +359 -0
- package/.claude/skills/product-requirements/references/knowledge-acquisition-protocol.md +251 -0
- package/.claude/skills/product-requirements/references/plan-execution-protocol.md +334 -0
- package/.claude/skills/product-requirements/references/plan-generation-protocol.md +264 -0
- package/.claude/skills/product-requirements/references/prioritization-frameworks.md +80 -0
- package/.claude/skills/product-requirements/references/requirement-decomposition-protocol.md +291 -0
- package/.claude/skills/product-requirements/references/user-story-examples.md +297 -0
- package/.claude/skills/product-requirements/references/workflow-templates.md +266 -0
- package/.claude/skills/react-best-practices/SKILL.md +198 -0
- package/.claude/skills/react-best-practices/references/advanced-patterns.md +94 -0
- package/.claude/skills/react-best-practices/references/bundle-optimization.md +182 -0
- package/.claude/skills/react-best-practices/references/client-data-fetching.md +112 -0
- package/.claude/skills/react-best-practices/references/complete-guide.md +2249 -0
- package/.claude/skills/react-best-practices/references/eliminating-waterfalls.md +169 -0
- package/.claude/skills/react-best-practices/references/javascript-performance.md +256 -0
- package/.claude/skills/react-best-practices/references/rendering-performance.md +230 -0
- package/.claude/skills/react-best-practices/references/rerender-optimization.md +214 -0
- package/.claude/skills/react-best-practices/references/server-performance.md +182 -0
- package/.claude/skills/security-audit/SKILL.md +226 -0
- package/.claude/skills/shared-references/advanced-debugging-techniques.md +186 -0
- package/.claude/skills/shared-references/code-quality-checklist.md +218 -0
- package/.claude/skills/shared-references/code-review-efficiency-guide.md +125 -0
- package/.claude/skills/shared-references/mcp-dependency-compatibility-protocol.md +276 -0
- package/.claude/skills/shared-references/skill-call-graph.md +230 -0
- package/.claude/skills/shared-references/skill-orchestration-protocol.md +281 -0
- package/.claude/skills/shared-references/subagent-dispatch-templates.md +199 -0
- package/.claude/skills/skill-expert-skills/LICENSE.txt +204 -0
- package/.claude/skills/skill-expert-skills/QUICK_NAVIGATION.md +374 -0
- package/.claude/skills/skill-expert-skills/SKILL.md +247 -0
- package/.claude/skills/skill-expert-skills/docs/_index.md +91 -0
- package/.claude/skills/skill-expert-skills/references/deep-research-methodology.md +389 -0
- package/.claude/skills/skill-expert-skills/references/docs-generation-workflow.md +398 -0
- package/.claude/skills/skill-expert-skills/references/domain-expertise-protocol.md +343 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/_index.md +54 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/backend-expertise.md +517 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/bug-fixing-expertise.md +363 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/code-review-expertise.md +392 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/frontend-expertise.md +410 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge-template.md +503 -0
- package/.claude/skills/skill-expert-skills/references/examples.md +782 -0
- package/.claude/skills/skill-expert-skills/references/integration-examples.md +655 -0
- package/.claude/skills/skill-expert-skills/references/knowledge-validation-checklist.md +246 -0
- package/.claude/skills/skill-expert-skills/references/latest-knowledge-acquisition.md +461 -0
- package/.claude/skills/skill-expert-skills/references/mcp-tools-guide.md +439 -0
- package/.claude/skills/skill-expert-skills/references/official-best-practices.md +616 -0
- package/.claude/skills/skill-expert-skills/references/patterns.md +218 -0
- package/.claude/skills/skill-expert-skills/references/plugin-skills-guide.md +432 -0
- package/.claude/skills/skill-expert-skills/references/requirement-elicitation-protocol.md +290 -0
- package/.claude/skills/skill-expert-skills/references/skill-creator-SKILL.md +353 -0
- package/.claude/skills/skill-expert-skills/references/skill-templates.md +583 -0
- package/.claude/skills/skill-expert-skills/references/skills-knowledge-base.md +561 -0
- package/.claude/skills/skill-expert-skills/references/tools-guide.md +379 -0
- package/.claude/skills/skill-expert-skills/references/troubleshooting.md +378 -0
- package/.claude/skills/skill-expert-skills/references/universality-guide.md +205 -0
- package/.claude/skills/skill-expert-skills/references/writing-style-guide.md +466 -0
- package/.claude/skills/skill-expert-skills/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
- package/.claude/skills/skill-expert-skills/scripts/__pycache__/universal_validate.cpython-313.pyc +0 -0
- package/.claude/skills/skill-expert-skills/scripts/analyze_trigger.py +425 -0
- package/.claude/skills/skill-expert-skills/scripts/diff_with_official.py +188 -0
- package/.claude/skills/skill-expert-skills/scripts/init_skill.py +349 -0
- package/.claude/skills/skill-expert-skills/scripts/package_skill.py +156 -0
- package/.claude/skills/skill-expert-skills/scripts/quick_validate.py +493 -0
- package/.claude/skills/skill-expert-skills/scripts/requirements.txt +2 -0
- package/.claude/skills/skill-expert-skills/scripts/universal_validate.py +182 -0
- package/.claude/skills/skill-expert-skills/scripts/upgrade_skill.py +431 -0
- package/.claude/skills/subagent-driven-development/SKILL.md +268 -0
- package/.claude/skills/test-driven-development/SKILL.md +246 -0
- package/.claude/skills/test-driven-development/references/testing-anti-patterns.md +192 -0
- package/.claude/skills/using-git-worktrees/SKILL.md +266 -0
- package/.claude/skills/using-skillstack/SKILL.md +127 -0
- package/.claude/skills/vercel-deploy/SKILL.md +166 -0
- package/.claude/skills/vercel-deploy/scripts/deploy.sh +249 -0
- package/.claude/skills/verification-before-completion/SKILL.md +305 -0
- package/.claude/skills/writing-plans/SKILL.md +259 -0
- package/README.md +69 -0
- package/bin/cli.js +468 -0
- package/lib/init.js +333 -0
- package/package.json +29 -0
|
@@ -0,0 +1,783 @@
|
|
|
1
|
+
# Frontend Code Review - Complete Guide
|
|
2
|
+
|
|
3
|
+
Comprehensive frontend code review covering UI anomaly detection, interaction quality, performance optimization, and cross-browser compatibility.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🎯 Frontend Review Philosophy
|
|
8
|
+
|
|
9
|
+
### Core Perspective: Visual → Interaction → Performance → Code
|
|
10
|
+
|
|
11
|
+
Frontend CR ensures high-quality user experience by evaluating from multiple dimensions, **simulating real user scenarios** across devices, browsers, and network conditions.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Review Dimensions:
|
|
15
|
+
┌─────────────────────────────────────────┐
|
|
16
|
+
│ Dimension 1: Visual Quality │
|
|
17
|
+
│ - UI consistency with design │
|
|
18
|
+
│ - Layout correctness │
|
|
19
|
+
│ - Responsive behavior │
|
|
20
|
+
└─────────────────────────────────────────┘
|
|
21
|
+
↓
|
|
22
|
+
┌─────────────────────────────────────────┐
|
|
23
|
+
│ Dimension 2: Interaction Quality │
|
|
24
|
+
│ - Smooth animations │
|
|
25
|
+
│ - Responsive feedback │
|
|
26
|
+
│ - Error state handling │
|
|
27
|
+
└─────────────────────────────────────────┘
|
|
28
|
+
↓
|
|
29
|
+
┌─────────────────────────────────────────┐
|
|
30
|
+
│ Dimension 3: Performance │
|
|
31
|
+
│ - Core Web Vitals │
|
|
32
|
+
│ - Bundle size │
|
|
33
|
+
│ - Runtime efficiency │
|
|
34
|
+
└─────────────────────────────────────────┘
|
|
35
|
+
↓
|
|
36
|
+
┌─────────────────────────────────────────┐
|
|
37
|
+
│ Dimension 4: Code Quality │
|
|
38
|
+
│ - Component architecture │
|
|
39
|
+
│ - State management │
|
|
40
|
+
│ - Error handling │
|
|
41
|
+
└─────────────────────────────────────────┘
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Review Time Allocation
|
|
45
|
+
|
|
46
|
+
| PR Size | Files | Recommended Time | Focus |
|
|
47
|
+
|---------|-------|------------------|-------|
|
|
48
|
+
| Small | <5 | 15-30 min | Visual + Code |
|
|
49
|
+
| Medium | 5-15 | 30-60 min | All dimensions |
|
|
50
|
+
| Large | 15-30 | 1-2 hours | All + cross-browser |
|
|
51
|
+
| XL | >30 | 2+ hours | Consider splitting |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 🛠️ Mandatory Pre-Review Scans
|
|
56
|
+
|
|
57
|
+
### Automated Tool Checklist
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Style & Code Quality
|
|
61
|
+
npx stylelint "**/*.css" --fix # CSS linting
|
|
62
|
+
npx eslint . --max-warnings 0 # JS/TS linting
|
|
63
|
+
npx prettier --check . # Formatting
|
|
64
|
+
|
|
65
|
+
# Type Checking
|
|
66
|
+
npx tsc --noEmit # TypeScript strict mode
|
|
67
|
+
|
|
68
|
+
# Security
|
|
69
|
+
npm audit # Dependency vulnerabilities
|
|
70
|
+
npx snyk test # Deep security scan
|
|
71
|
+
|
|
72
|
+
# Performance
|
|
73
|
+
npx lighthouse-ci # Lighthouse CI (target: >90)
|
|
74
|
+
npx bundlesize # Bundle size check
|
|
75
|
+
|
|
76
|
+
# Accessibility
|
|
77
|
+
npx axe-cli http://localhost:3000 # Accessibility scan
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Tool Configuration Requirements
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
## Required Tool Configurations
|
|
84
|
+
|
|
85
|
+
### ESLint
|
|
86
|
+
- [ ] Strict mode enabled
|
|
87
|
+
- [ ] React/Vue plugin configured
|
|
88
|
+
- [ ] Import order rules
|
|
89
|
+
- [ ] No unused vars/imports
|
|
90
|
+
|
|
91
|
+
### TypeScript
|
|
92
|
+
- [ ] strict: true
|
|
93
|
+
- [ ] noImplicitAny: true
|
|
94
|
+
- [ ] strictNullChecks: true
|
|
95
|
+
|
|
96
|
+
### Stylelint
|
|
97
|
+
- [ ] Order rules
|
|
98
|
+
- [ ] No !important (or limited)
|
|
99
|
+
- [ ] Color format consistency
|
|
100
|
+
|
|
101
|
+
### Lighthouse Thresholds
|
|
102
|
+
| Metric | Minimum | Target |
|
|
103
|
+
|--------|---------|--------|
|
|
104
|
+
| Performance | 80 | 90+ |
|
|
105
|
+
| Accessibility | 90 | 100 |
|
|
106
|
+
| Best Practices | 90 | 100 |
|
|
107
|
+
| SEO | 90 | 100 |
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 👁️ UI Anomaly Detection
|
|
113
|
+
|
|
114
|
+
### Visual Inspection Checklist
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
## Visual Review Steps
|
|
118
|
+
|
|
119
|
+
### Step 1: Browser DevTools Setup
|
|
120
|
+
1. Open Elements panel
|
|
121
|
+
2. Enable device toolbar (responsive mode)
|
|
122
|
+
3. Open Computed styles panel
|
|
123
|
+
4. Enable Rendering > Paint flashing (optional)
|
|
124
|
+
|
|
125
|
+
### Step 2: Layout Inspection
|
|
126
|
+
| Check | Tool | Issue Type |
|
|
127
|
+
|-------|------|------------|
|
|
128
|
+
| Box model | DevTools Elements | Margin collapse, padding issues |
|
|
129
|
+
| Flexbox alignment | Flexbox inspector | Justify/align issues |
|
|
130
|
+
| Grid layout | Grid inspector | Track sizing, gaps |
|
|
131
|
+
| Overflow | Scroll to edges | Hidden content, scrollbars |
|
|
132
|
+
|
|
133
|
+
### Step 3: Spacing & Typography
|
|
134
|
+
| Check | Expected | Actual | Status |
|
|
135
|
+
|-------|----------|--------|--------|
|
|
136
|
+
| Font family | Inter | Inter | ✅ |
|
|
137
|
+
| Font size H1 | 32px | 30px | ⚠️ |
|
|
138
|
+
| Line height body | 1.5 | 1.5 | ✅ |
|
|
139
|
+
| Paragraph margin | 16px | 24px | ⚠️ |
|
|
140
|
+
| Button padding | 12px 24px | 12px 24px | ✅ |
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Design-Code Comparison
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
## Design vs Implementation Matrix
|
|
147
|
+
|
|
148
|
+
### Figma/Sketch Comparison
|
|
149
|
+
| Element | Design | Code | Match |
|
|
150
|
+
|---------|--------|------|-------|
|
|
151
|
+
| Primary color | #2563EB | #2563EB | ✅ |
|
|
152
|
+
| Border radius | 8px | 6px | ⚠️ |
|
|
153
|
+
| Shadow | 0 4px 6px rgba(0,0,0,0.1) | 0 2px 4px rgba(0,0,0,0.1) | ⚠️ |
|
|
154
|
+
| Icon size | 24px | 20px | ❌ |
|
|
155
|
+
|
|
156
|
+
### Spacing System
|
|
157
|
+
| Design Token | Value | Used Consistently |
|
|
158
|
+
|--------------|-------|-------------------|
|
|
159
|
+
| spacing-xs | 4px | ✅ |
|
|
160
|
+
| spacing-sm | 8px | ✅ |
|
|
161
|
+
| spacing-md | 16px | ⚠️ (12px in some places) |
|
|
162
|
+
| spacing-lg | 24px | ✅ |
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Responsive Design Verification
|
|
166
|
+
|
|
167
|
+
```markdown
|
|
168
|
+
## Responsive Breakpoints Test
|
|
169
|
+
|
|
170
|
+
### Test Devices
|
|
171
|
+
| Device | Width | Height | Test Status |
|
|
172
|
+
|--------|-------|--------|-------------|
|
|
173
|
+
| iPhone SE | 375px | 667px | ✅ |
|
|
174
|
+
| iPhone 12 | 390px | 844px | ✅ |
|
|
175
|
+
| iPad | 768px | 1024px | ⚠️ Layout issue |
|
|
176
|
+
| iPad Pro | 1024px | 1366px | ✅ |
|
|
177
|
+
| Desktop | 1440px | 900px | ✅ |
|
|
178
|
+
| Wide screen | 1920px | 1080px | ✅ |
|
|
179
|
+
|
|
180
|
+
### Common Responsive Issues
|
|
181
|
+
| Issue | Breakpoint | Fix |
|
|
182
|
+
|-------|------------|-----|
|
|
183
|
+
| Text overflow | <375px | Add text-wrap or font-size reduction |
|
|
184
|
+
| Sidebar overlap | 768px-1024px | Adjust breakpoint or add collapsible |
|
|
185
|
+
| Images stretch | >1440px | Add max-width |
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 🎭 Interaction Quality Review
|
|
191
|
+
|
|
192
|
+
### Animation & Micro-interaction
|
|
193
|
+
|
|
194
|
+
```markdown
|
|
195
|
+
## Animation Review
|
|
196
|
+
|
|
197
|
+
### Performance Metrics
|
|
198
|
+
| Animation | FPS | Duration | Easing | Status |
|
|
199
|
+
|-----------|-----|----------|--------|--------|
|
|
200
|
+
| Page transition | 60 | 300ms | ease-out | ✅ |
|
|
201
|
+
| Button hover | 58 | 150ms | ease | ✅ |
|
|
202
|
+
| Modal open | 45 | 400ms | ease-in-out | ⚠️ Jank |
|
|
203
|
+
| Infinite scroll | 55 | N/A | N/A | ⚠️ Optimize |
|
|
204
|
+
|
|
205
|
+
### Animation Best Practices
|
|
206
|
+
- [ ] Use transform/opacity only (compositor-friendly)
|
|
207
|
+
- [ ] Avoid animating width/height/top/left
|
|
208
|
+
- [ ] Use will-change sparingly
|
|
209
|
+
- [ ] Respect prefers-reduced-motion
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
```css
|
|
213
|
+
/* ❌ Janky animation - triggers layout */
|
|
214
|
+
.card {
|
|
215
|
+
transition: width 0.3s, height 0.3s;
|
|
216
|
+
}
|
|
217
|
+
.card:hover {
|
|
218
|
+
width: 120%;
|
|
219
|
+
height: 120%;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* ✅ Smooth animation - compositor only */
|
|
223
|
+
.card {
|
|
224
|
+
transition: transform 0.3s ease-out;
|
|
225
|
+
}
|
|
226
|
+
.card:hover {
|
|
227
|
+
transform: scale(1.1);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* ✅ Respect reduced motion */
|
|
231
|
+
@media (prefers-reduced-motion: reduce) {
|
|
232
|
+
.card {
|
|
233
|
+
transition: none;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Loading State Review
|
|
239
|
+
|
|
240
|
+
```markdown
|
|
241
|
+
## Loading State Checklist
|
|
242
|
+
|
|
243
|
+
### Initial Load
|
|
244
|
+
- [ ] Skeleton screen implemented
|
|
245
|
+
- [ ] Above-the-fold content prioritized
|
|
246
|
+
- [ ] Critical CSS inlined
|
|
247
|
+
- [ ] Fonts preloaded
|
|
248
|
+
|
|
249
|
+
### Data Fetching
|
|
250
|
+
- [ ] Loading indicators visible
|
|
251
|
+
- [ ] Partial content display (progressive)
|
|
252
|
+
- [ ] Timeout handling
|
|
253
|
+
- [ ] Error state fallback
|
|
254
|
+
|
|
255
|
+
### Lazy Loading
|
|
256
|
+
| Resource | Strategy | Threshold | Status |
|
|
257
|
+
|----------|----------|-----------|--------|
|
|
258
|
+
| Images below fold | Intersection Observer | 200px | ✅ |
|
|
259
|
+
| Heavy components | Dynamic import | On route | ✅ |
|
|
260
|
+
| Comments section | Scroll into view | 100px | ✅ |
|
|
261
|
+
| Ads | Viewport entry | 0px | ⚠️ CLS risk |
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Focus & Keyboard Navigation
|
|
265
|
+
|
|
266
|
+
```markdown
|
|
267
|
+
## Focus Management Review
|
|
268
|
+
|
|
269
|
+
### Tab Order Verification
|
|
270
|
+
| Element | Expected Order | Actual Order | Status |
|
|
271
|
+
|---------|----------------|--------------|--------|
|
|
272
|
+
| Logo link | 1 | 1 | ✅ |
|
|
273
|
+
| Nav items | 2-5 | 2-5 | ✅ |
|
|
274
|
+
| Search input | 6 | 8 | ❌ Wrong order |
|
|
275
|
+
| Main content | 7+ | 6 | ❌ Skip link missing |
|
|
276
|
+
|
|
277
|
+
### Focus Visibility
|
|
278
|
+
- [ ] :focus-visible styles applied
|
|
279
|
+
- [ ] Focus ring contrast sufficient (3:1 minimum)
|
|
280
|
+
- [ ] No outline: none without replacement
|
|
281
|
+
- [ ] Modal focus trap implemented
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```css
|
|
285
|
+
/* ❌ Removes focus indicator */
|
|
286
|
+
button:focus {
|
|
287
|
+
outline: none;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/* ✅ Custom focus indicator */
|
|
291
|
+
button:focus-visible {
|
|
292
|
+
outline: 2px solid var(--color-focus);
|
|
293
|
+
outline-offset: 2px;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* ✅ Skip link for keyboard users */
|
|
297
|
+
.skip-link {
|
|
298
|
+
position: absolute;
|
|
299
|
+
top: -100%;
|
|
300
|
+
left: 0;
|
|
301
|
+
background: var(--color-primary);
|
|
302
|
+
color: white;
|
|
303
|
+
padding: 8px 16px;
|
|
304
|
+
z-index: 100;
|
|
305
|
+
}
|
|
306
|
+
.skip-link:focus {
|
|
307
|
+
top: 0;
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## ⚡ Performance Deep Dive
|
|
314
|
+
|
|
315
|
+
### Memory Leak Prevention
|
|
316
|
+
|
|
317
|
+
#### Module-Level Variables (Global Cache)
|
|
318
|
+
Long-lived SPAs often accumulate data in module-level variables (outside components).
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
// ❌ Unbounded growth
|
|
322
|
+
const wsClients: Record<string, WebSocket> = {}; // Grows forever
|
|
323
|
+
|
|
324
|
+
// ✅ LRU / Cleanup Strategy
|
|
325
|
+
const MAX_CLIENTS = 5;
|
|
326
|
+
function connect(id: string) {
|
|
327
|
+
if (Object.keys(wsClients).length >= MAX_CLIENTS) {
|
|
328
|
+
// Cleanup logic
|
|
329
|
+
const oldest = getOldest(wsClients);
|
|
330
|
+
oldest.close();
|
|
331
|
+
delete wsClients[oldest.id];
|
|
332
|
+
}
|
|
333
|
+
wsClients[id] = new WebSocket(...);
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### WebSocket & Real-Time Review
|
|
338
|
+
|
|
339
|
+
| Check | Best Practice | Status |
|
|
340
|
+
|-------|---------------|--------|
|
|
341
|
+
| **Connection Limit** | Limit active connections per client (e.g., max 5) | ⚠️ |
|
|
342
|
+
| **Reconnection** | Exponential backoff (not immediate loop) | ✅ |
|
|
343
|
+
| **Heartbeat** | Client-side ping/pong to detect dead connections | ⚠️ |
|
|
344
|
+
| **Cleanup** | Close connection on component unmount / logout | ❌ |
|
|
345
|
+
| **Message Queue** | Queue messages when disconnected | ✅ |
|
|
346
|
+
|
|
347
|
+
### Core Web Vitals Targets
|
|
348
|
+
|
|
349
|
+
```markdown
|
|
350
|
+
## Core Web Vitals Review
|
|
351
|
+
|
|
352
|
+
### Current Metrics
|
|
353
|
+
| Metric | Target | Actual | Status |
|
|
354
|
+
|--------|--------|--------|--------|
|
|
355
|
+
| LCP | <2.5s | 2.8s | ⚠️ |
|
|
356
|
+
| FID | <100ms | 45ms | ✅ |
|
|
357
|
+
| CLS | <0.1 | 0.15 | ❌ |
|
|
358
|
+
| INP | <200ms | 180ms | ✅ |
|
|
359
|
+
| TTFB | <800ms | 650ms | ✅ |
|
|
360
|
+
|
|
361
|
+
### LCP Optimization Checklist
|
|
362
|
+
- [ ] Hero image preloaded
|
|
363
|
+
- [ ] Critical CSS inlined
|
|
364
|
+
- [ ] Server response <200ms
|
|
365
|
+
- [ ] No render-blocking JS
|
|
366
|
+
- [ ] Font display: swap
|
|
367
|
+
|
|
368
|
+
### CLS Causes & Fixes
|
|
369
|
+
| Cause | Current | Fix |
|
|
370
|
+
|-------|---------|-----|
|
|
371
|
+
| Images without dimensions | 3 images | Add width/height |
|
|
372
|
+
| Dynamic content insertion | Ads, banners | Reserve space |
|
|
373
|
+
| Web fonts FOUT | 2 fonts | Font display: optional |
|
|
374
|
+
| Iframe without dimensions | 1 embed | Add aspect-ratio |
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Image Optimization
|
|
378
|
+
|
|
379
|
+
```markdown
|
|
380
|
+
## Image Review
|
|
381
|
+
|
|
382
|
+
### Format Analysis
|
|
383
|
+
| Image | Current | Optimal | Savings |
|
|
384
|
+
|-------|---------|---------|---------|
|
|
385
|
+
| hero.jpg | 450KB | hero.webp 120KB | 73% |
|
|
386
|
+
| logo.png | 25KB | logo.svg 3KB | 88% |
|
|
387
|
+
| icons/*.png | 200KB | sprite.svg 15KB | 92% |
|
|
388
|
+
|
|
389
|
+
### Image Checklist
|
|
390
|
+
- [ ] WebP/AVIF with fallback
|
|
391
|
+
- [ ] Responsive srcset
|
|
392
|
+
- [ ] Lazy loading (native or IO)
|
|
393
|
+
- [ ] Explicit width/height
|
|
394
|
+
- [ ] Alt text present
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
```html
|
|
398
|
+
<!-- ❌ No optimization -->
|
|
399
|
+
<img src="hero.jpg">
|
|
400
|
+
|
|
401
|
+
<!-- ✅ Fully optimized -->
|
|
402
|
+
<picture>
|
|
403
|
+
<source srcset="hero.avif" type="image/avif">
|
|
404
|
+
<source srcset="hero.webp" type="image/webp">
|
|
405
|
+
<img
|
|
406
|
+
src="hero.jpg"
|
|
407
|
+
alt="Product showcase"
|
|
408
|
+
width="1200"
|
|
409
|
+
height="800"
|
|
410
|
+
loading="lazy"
|
|
411
|
+
decoding="async"
|
|
412
|
+
>
|
|
413
|
+
</picture>
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Bundle Size Analysis
|
|
417
|
+
|
|
418
|
+
```markdown
|
|
419
|
+
## Bundle Analysis
|
|
420
|
+
|
|
421
|
+
### Main Chunks
|
|
422
|
+
| Chunk | Size | Limit | Status |
|
|
423
|
+
|-------|------|-------|--------|
|
|
424
|
+
| main.js | 250KB | 200KB | ❌ |
|
|
425
|
+
| vendor.js | 180KB | 150KB | ❌ |
|
|
426
|
+
| styles.css | 45KB | 50KB | ✅ |
|
|
427
|
+
|
|
428
|
+
### Large Dependencies
|
|
429
|
+
| Package | Size | Used | Alternative |
|
|
430
|
+
|---------|------|------|-------------|
|
|
431
|
+
| lodash | 70KB | 3 functions | lodash-es + tree shake |
|
|
432
|
+
| moment | 65KB | Date formatting | date-fns or dayjs |
|
|
433
|
+
| chart.js | 60KB | 1 chart type | Lightweight alternative |
|
|
434
|
+
|
|
435
|
+
### Code Splitting Opportunities
|
|
436
|
+
| Route | Current | After Split | Lazy Load |
|
|
437
|
+
|-------|---------|-------------|-----------|
|
|
438
|
+
| /dashboard | 250KB | 80KB | ✅ |
|
|
439
|
+
| /settings | Bundled | 35KB | Should split |
|
|
440
|
+
| /admin | Bundled | 120KB | Must split |
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## 🌐 Cross-Browser Compatibility
|
|
446
|
+
|
|
447
|
+
### Browser Testing Matrix
|
|
448
|
+
|
|
449
|
+
```markdown
|
|
450
|
+
## Browser Compatibility
|
|
451
|
+
|
|
452
|
+
### Required Testing
|
|
453
|
+
| Browser | Version | Desktop | Mobile | Status |
|
|
454
|
+
|---------|---------|---------|--------|--------|
|
|
455
|
+
| Chrome | Latest | ✅ | ✅ | ✅ |
|
|
456
|
+
| Firefox | Latest | ✅ | ✅ | ✅ |
|
|
457
|
+
| Safari | Latest | ✅ | ✅ | ⚠️ |
|
|
458
|
+
| Edge | Latest | ✅ | ✅ | ✅ |
|
|
459
|
+
| Safari | 14+ | ✅ | ✅ | ⚠️ flexbox gap |
|
|
460
|
+
| Chrome | 90+ | ✅ | ✅ | ✅ |
|
|
461
|
+
|
|
462
|
+
### Known Compatibility Issues
|
|
463
|
+
| Feature | Support | Fallback |
|
|
464
|
+
|---------|---------|----------|
|
|
465
|
+
| CSS gap (flexbox) | Safari 14.1+ | margin hack |
|
|
466
|
+
| :has() selector | Safari 15.4+ | JS fallback |
|
|
467
|
+
| Container queries | Limited | @media queries |
|
|
468
|
+
| CSS subgrid | Firefox only | Nested grid |
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### Polyfill Strategy
|
|
472
|
+
|
|
473
|
+
```markdown
|
|
474
|
+
## Polyfill Review
|
|
475
|
+
|
|
476
|
+
### Required Polyfills
|
|
477
|
+
| Feature | Polyfill | Size | Conditional |
|
|
478
|
+
|---------|----------|------|-------------|
|
|
479
|
+
| fetch | whatwg-fetch | 3KB | ✅ |
|
|
480
|
+
| Promise | es6-promise | 6KB | ✅ |
|
|
481
|
+
| IntersectionObserver | intersection-observer | 7KB | ✅ |
|
|
482
|
+
| ResizeObserver | resize-observer-polyfill | 8KB | ✅ |
|
|
483
|
+
|
|
484
|
+
### Loading Strategy
|
|
485
|
+
```javascript
|
|
486
|
+
// ✅ Conditional polyfill loading
|
|
487
|
+
if (!('IntersectionObserver' in window)) {
|
|
488
|
+
import('intersection-observer');
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// ✅ Or use polyfill.io
|
|
492
|
+
<script src="https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver"></script>
|
|
493
|
+
```
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## 🎨 Dark Mode Review
|
|
499
|
+
|
|
500
|
+
### Theme Implementation
|
|
501
|
+
|
|
502
|
+
```markdown
|
|
503
|
+
## Dark Mode Checklist
|
|
504
|
+
|
|
505
|
+
### CSS Variables
|
|
506
|
+
- [ ] Color scheme declared (color-scheme: light dark)
|
|
507
|
+
- [ ] All colors use CSS variables
|
|
508
|
+
- [ ] Semantic naming (--color-background, not --color-white)
|
|
509
|
+
- [ ] Transition on theme change
|
|
510
|
+
|
|
511
|
+
### Media Query Support
|
|
512
|
+
- [ ] prefers-color-scheme: dark respected
|
|
513
|
+
- [ ] Manual toggle available
|
|
514
|
+
- [ ] Preference persisted (localStorage)
|
|
515
|
+
- [ ] No flash on load (FOUC prevention)
|
|
516
|
+
|
|
517
|
+
### Contrast Check
|
|
518
|
+
| Element | Light Mode | Dark Mode | WCAG |
|
|
519
|
+
|---------|------------|-----------|------|
|
|
520
|
+
| Body text | 7:1 ✅ | 6:1 ✅ | AA |
|
|
521
|
+
| Links | 4.5:1 ✅ | 3.8:1 ⚠️ | Needs fix |
|
|
522
|
+
| Disabled | 3:1 ⚠️ | 2.5:1 ❌ | Needs fix |
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
```css
|
|
526
|
+
/* ✅ Complete dark mode setup */
|
|
527
|
+
:root {
|
|
528
|
+
color-scheme: light dark;
|
|
529
|
+
|
|
530
|
+
/* Light mode (default) */
|
|
531
|
+
--color-bg: #ffffff;
|
|
532
|
+
--color-text: #1a1a1a;
|
|
533
|
+
--color-primary: #2563eb;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
@media (prefers-color-scheme: dark) {
|
|
537
|
+
:root {
|
|
538
|
+
--color-bg: #1a1a1a;
|
|
539
|
+
--color-text: #f5f5f5;
|
|
540
|
+
--color-primary: #60a5fa;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/* Manual override via data attribute */
|
|
545
|
+
[data-theme="dark"] {
|
|
546
|
+
--color-bg: #1a1a1a;
|
|
547
|
+
--color-text: #f5f5f5;
|
|
548
|
+
--color-primary: #60a5fa;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/* Smooth transition */
|
|
552
|
+
body {
|
|
553
|
+
background: var(--color-bg);
|
|
554
|
+
color: var(--color-text);
|
|
555
|
+
transition: background-color 0.3s, color 0.3s;
|
|
556
|
+
}
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## 📱 Mobile UX Review
|
|
562
|
+
|
|
563
|
+
### Touch Interaction
|
|
564
|
+
|
|
565
|
+
```markdown
|
|
566
|
+
## Touch Target Review
|
|
567
|
+
|
|
568
|
+
### Minimum Sizes
|
|
569
|
+
| Element | Current Size | Required | Status |
|
|
570
|
+
|---------|--------------|----------|--------|
|
|
571
|
+
| Buttons | 44x44px | 44x44px | ✅ |
|
|
572
|
+
| Links | 32x20px | 44x44px | ❌ |
|
|
573
|
+
| Icons | 24x24px | 44x44px | ❌ (add padding) |
|
|
574
|
+
| Checkboxes | 16x16px | 44x44px | ❌ |
|
|
575
|
+
|
|
576
|
+
### Touch Spacing
|
|
577
|
+
- [ ] 8px minimum between touch targets
|
|
578
|
+
- [ ] No hover-only interactions
|
|
579
|
+
- [ ] Touch feedback (active state)
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
### Mobile-Specific Issues
|
|
583
|
+
|
|
584
|
+
```markdown
|
|
585
|
+
## Mobile UX Checklist
|
|
586
|
+
|
|
587
|
+
### Viewport
|
|
588
|
+
- [ ] viewport meta tag correct
|
|
589
|
+
- [ ] No horizontal scroll
|
|
590
|
+
- [ ] 100vh issues handled (address bar)
|
|
591
|
+
- [ ] Safe area insets for notch
|
|
592
|
+
|
|
593
|
+
### Input Handling
|
|
594
|
+
- [ ] Appropriate input types (email, tel, number)
|
|
595
|
+
- [ ] Autocomplete attributes
|
|
596
|
+
- [ ] No zoom on input focus (font-size >= 16px)
|
|
597
|
+
- [ ] Virtual keyboard doesn't hide inputs
|
|
598
|
+
|
|
599
|
+
### Gestures
|
|
600
|
+
- [ ] Swipe actions accessible via buttons too
|
|
601
|
+
- [ ] Pull-to-refresh if applicable
|
|
602
|
+
- [ ] No interference with system gestures
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
```css
|
|
606
|
+
/* ❌ Input zoom on mobile Safari */
|
|
607
|
+
input {
|
|
608
|
+
font-size: 14px; /* Triggers zoom on focus */
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
/* ✅ Prevent zoom */
|
|
612
|
+
input {
|
|
613
|
+
font-size: 16px; /* Or larger */
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/* ✅ Handle safe areas (notch) */
|
|
617
|
+
.header {
|
|
618
|
+
padding-top: env(safe-area-inset-top);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.footer {
|
|
622
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
/* ✅ Fix 100vh on mobile */
|
|
626
|
+
.full-height {
|
|
627
|
+
height: 100vh;
|
|
628
|
+
height: 100dvh; /* Dynamic viewport height */
|
|
629
|
+
}
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
634
|
+
## 🔒 TypeScript Runtime Safety
|
|
635
|
+
|
|
636
|
+
### Import Type Usage (CRITICAL)
|
|
637
|
+
**Anti-Pattern**: Importing interfaces/types as values. This causes "does not provide an export" runtime errors in modern bundlers (Vite/esbuild).
|
|
638
|
+
|
|
639
|
+
```typescript
|
|
640
|
+
// ❌ Runtime Error Risk
|
|
641
|
+
import { MyInterface } from './types'; // Bundler looks for a value export
|
|
642
|
+
|
|
643
|
+
// ✅ Correct: Type-Only Import
|
|
644
|
+
import type { MyInterface } from './types'; // Explicitly removed at runtime
|
|
645
|
+
// OR
|
|
646
|
+
import { type MyInterface } from './types';
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
### Type Organization & Circular Dependencies
|
|
650
|
+
**Anti-Pattern**: Defining types in Service/Component files that import other Services/Components.
|
|
651
|
+
|
|
652
|
+
```typescript
|
|
653
|
+
// ❌ Circular Dependency Risk
|
|
654
|
+
// userService.ts
|
|
655
|
+
import { Order } from './orderService'; // Cycle!
|
|
656
|
+
export interface User { ... }
|
|
657
|
+
|
|
658
|
+
// ✅ Centralized Types
|
|
659
|
+
// types/index.ts or types/models.ts
|
|
660
|
+
export interface User { ... }
|
|
661
|
+
export interface Order { ... }
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
---
|
|
665
|
+
|
|
666
|
+
## 📚 Component Documentation
|
|
667
|
+
|
|
668
|
+
### Storybook Review
|
|
669
|
+
|
|
670
|
+
```markdown
|
|
671
|
+
## Component Documentation Checklist
|
|
672
|
+
|
|
673
|
+
### Storybook Coverage
|
|
674
|
+
| Component | Stories | Variants | Docs | Status |
|
|
675
|
+
|-----------|---------|----------|------|--------|
|
|
676
|
+
| Button | ✅ | 5/5 | ✅ | ✅ |
|
|
677
|
+
| Input | ✅ | 4/6 | ⚠️ | ⚠️ Missing error state |
|
|
678
|
+
| Modal | ❌ | 0/3 | ❌ | ❌ Not documented |
|
|
679
|
+
| Card | ✅ | 3/3 | ✅ | ✅ |
|
|
680
|
+
|
|
681
|
+
### Required Documentation
|
|
682
|
+
- [ ] Component description
|
|
683
|
+
- [ ] Props table with types
|
|
684
|
+
- [ ] Usage examples
|
|
685
|
+
- [ ] Accessibility notes
|
|
686
|
+
- [ ] Do's and Don'ts
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
### Props API Design
|
|
690
|
+
|
|
691
|
+
```typescript
|
|
692
|
+
// ❌ Poor props design
|
|
693
|
+
interface ButtonProps {
|
|
694
|
+
type: string; // What values?
|
|
695
|
+
size: 1 | 2 | 3; // Magic numbers
|
|
696
|
+
onClick: Function; // Too generic
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// ✅ Well-designed props
|
|
700
|
+
interface ButtonProps {
|
|
701
|
+
/** Visual variant of the button */
|
|
702
|
+
variant: 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
703
|
+
/** Size of the button */
|
|
704
|
+
size: 'sm' | 'md' | 'lg';
|
|
705
|
+
/** Whether the button is disabled */
|
|
706
|
+
disabled?: boolean;
|
|
707
|
+
/** Loading state shows spinner and disables interaction */
|
|
708
|
+
loading?: boolean;
|
|
709
|
+
/** Click handler */
|
|
710
|
+
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
711
|
+
/** Button contents */
|
|
712
|
+
children: React.ReactNode;
|
|
713
|
+
}
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
---
|
|
717
|
+
|
|
718
|
+
## 📋 Frontend Review Summary Template
|
|
719
|
+
|
|
720
|
+
```markdown
|
|
721
|
+
# Frontend Review Report
|
|
722
|
+
|
|
723
|
+
## Tool Scan Results
|
|
724
|
+
| Tool | Status | Critical | Warning |
|
|
725
|
+
|------|--------|----------|---------|
|
|
726
|
+
| ESLint | ✅ | 0 | 3 |
|
|
727
|
+
| TypeScript | ✅ | 0 | 1 |
|
|
728
|
+
| Stylelint | ⚠️ | 0 | 5 |
|
|
729
|
+
| Lighthouse | ⚠️ | Performance: 75 | - |
|
|
730
|
+
| Accessibility | ✅ | 0 | 2 |
|
|
731
|
+
| Bundle Size | ❌ | Over limit | - |
|
|
732
|
+
|
|
733
|
+
## Visual Review
|
|
734
|
+
| Check | Status | Issues |
|
|
735
|
+
|-------|--------|--------|
|
|
736
|
+
| Design match | ⚠️ | 3 spacing differences |
|
|
737
|
+
| Responsive | ⚠️ | iPad layout issue |
|
|
738
|
+
| Dark mode | ✅ | Works correctly |
|
|
739
|
+
| Typography | ✅ | Consistent |
|
|
740
|
+
|
|
741
|
+
## Interaction Review
|
|
742
|
+
| Check | Status | Issues |
|
|
743
|
+
|-------|--------|--------|
|
|
744
|
+
| Animations | ⚠️ | Modal jank at 45 FPS |
|
|
745
|
+
| Loading states | ✅ | All covered |
|
|
746
|
+
| Error states | ⚠️ | Missing retry on network error |
|
|
747
|
+
| Focus management | ❌ | Tab order incorrect |
|
|
748
|
+
|
|
749
|
+
## Performance Review
|
|
750
|
+
| Metric | Target | Actual | Status |
|
|
751
|
+
|--------|--------|--------|--------|
|
|
752
|
+
| LCP | <2.5s | 2.8s | ⚠️ |
|
|
753
|
+
| CLS | <0.1 | 0.05 | ✅ |
|
|
754
|
+
| Bundle | <200KB | 250KB | ❌ |
|
|
755
|
+
|
|
756
|
+
## Browser Compatibility
|
|
757
|
+
| Browser | Status | Issues |
|
|
758
|
+
|---------|--------|--------|
|
|
759
|
+
| Chrome | ✅ | None |
|
|
760
|
+
| Firefox | ✅ | None |
|
|
761
|
+
| Safari | ⚠️ | Flexbox gap fallback needed |
|
|
762
|
+
| Mobile Safari | ⚠️ | 100vh issue |
|
|
763
|
+
|
|
764
|
+
## Accessibility
|
|
765
|
+
| Check | Status | Issues |
|
|
766
|
+
|-------|--------|--------|
|
|
767
|
+
| Color contrast | ⚠️ | Links in dark mode |
|
|
768
|
+
| Screen reader | ✅ | Tested with VoiceOver |
|
|
769
|
+
| Keyboard | ❌ | Missing skip link |
|
|
770
|
+
| Touch targets | ⚠️ | Icons too small |
|
|
771
|
+
|
|
772
|
+
## Critical Issues (Must Fix)
|
|
773
|
+
1. **[P0]** Tab order incorrect in form
|
|
774
|
+
2. **[P0]** Bundle size exceeds limit
|
|
775
|
+
3. **[P1]** LCP exceeds target
|
|
776
|
+
|
|
777
|
+
## Recommendations
|
|
778
|
+
1. **[P1]** Add skeleton screens for better perceived performance
|
|
779
|
+
2. **[P2]** Implement code splitting for admin routes
|
|
780
|
+
3. **[P2]** Add Storybook stories for Modal component
|
|
781
|
+
4. **[P3]** Consider adding haptic feedback on mobile
|
|
782
|
+
```
|
|
783
|
+
|