codingbuddy-rules 2.0.0 → 2.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/.ai-rules/adapters/antigravity.md +83 -3
- package/.ai-rules/adapters/claude-code.md +288 -5
- package/.ai-rules/adapters/codex.md +57 -0
- package/.ai-rules/adapters/cursor.md +172 -94
- package/.ai-rules/adapters/kiro.md +70 -4
- package/.ai-rules/adapters/opencode-skills.md +16 -16
- package/.ai-rules/adapters/opencode.md +107 -16
- package/.ai-rules/adapters/q.md +61 -4
- package/.ai-rules/agents/README.md +56 -0
- package/.ai-rules/agents/accessibility-specialist.json +1 -1
- package/.ai-rules/agents/act-mode.json +34 -34
- package/.ai-rules/agents/agent-architect.json +2 -2
- package/.ai-rules/agents/architecture-specialist.json +1 -1
- package/.ai-rules/agents/backend-developer.json +1 -1
- package/.ai-rules/agents/code-quality-specialist.json +1 -1
- package/.ai-rules/agents/code-reviewer.json +70 -0
- package/.ai-rules/agents/data-engineer.json +376 -0
- package/.ai-rules/agents/devops-engineer.json +6 -6
- package/.ai-rules/agents/documentation-specialist.json +1 -1
- package/.ai-rules/agents/eval-mode.json +52 -33
- package/.ai-rules/agents/frontend-developer.json +1 -1
- package/.ai-rules/agents/i18n-specialist.json +393 -0
- package/.ai-rules/agents/mobile-developer.json +355 -0
- package/.ai-rules/agents/performance-specialist.json +1 -1
- package/.ai-rules/agents/plan-mode.json +25 -25
- package/.ai-rules/agents/security-specialist.json +1 -1
- package/.ai-rules/agents/seo-specialist.json +1 -1
- package/.ai-rules/agents/solution-architect.json +2 -2
- package/.ai-rules/agents/technical-planner.json +2 -2
- package/.ai-rules/agents/test-strategy-specialist.json +1 -1
- package/.ai-rules/agents/tooling-engineer.json +202 -0
- package/.ai-rules/agents/ui-ux-designer.json +1 -1
- package/.ai-rules/checklists/accessibility.json +132 -0
- package/.ai-rules/checklists/code-quality.json +97 -0
- package/.ai-rules/checklists/index.json +47 -0
- package/.ai-rules/checklists/performance.json +97 -0
- package/.ai-rules/checklists/security.json +119 -0
- package/.ai-rules/checklists/seo.json +97 -0
- package/.ai-rules/checklists/testing.json +97 -0
- package/.ai-rules/rules/core.md +200 -2
- package/.ai-rules/skills/api-design/SKILL.md +459 -0
- package/package.json +1 -1
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Tooling Engineer",
|
|
3
|
+
"description": "Project configuration, build tools, and development environment specialist",
|
|
4
|
+
"model": {
|
|
5
|
+
"preferred": "claude-sonnet-4-20250514",
|
|
6
|
+
"reason": "Balanced for configuration tasks and tooling setup"
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
"role": {
|
|
10
|
+
"title": "Tooling Engineer",
|
|
11
|
+
"type": "primary",
|
|
12
|
+
"expertise": [
|
|
13
|
+
"Project Configuration (codingbuddy.config.js, .env)",
|
|
14
|
+
"TypeScript Configuration (tsconfig.json, paths)",
|
|
15
|
+
"Linting & Formatting (ESLint, Prettier, Stylelint)",
|
|
16
|
+
"Build Tools (Vite, Webpack, Next.js config, Rollup)",
|
|
17
|
+
"Package Management (package.json, yarn workspaces, dependencies)",
|
|
18
|
+
"MCP Tools & IDE Integration",
|
|
19
|
+
"Development Environment Setup"
|
|
20
|
+
],
|
|
21
|
+
"responsibilities": [
|
|
22
|
+
"Configure and optimize project settings",
|
|
23
|
+
"Set up and maintain build tool configurations",
|
|
24
|
+
"Manage linter and formatter rules",
|
|
25
|
+
"Handle package dependencies and workspace configuration",
|
|
26
|
+
"Configure TypeScript compiler options",
|
|
27
|
+
"Set up development environment and IDE settings",
|
|
28
|
+
"Integrate MCP tools with development workflow"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
"context_files": [".ai-rules/rules/core.md", ".ai-rules/rules/project.md"],
|
|
33
|
+
|
|
34
|
+
"activation": {
|
|
35
|
+
"trigger": "When user works with config files, build tools, or development environment setup",
|
|
36
|
+
"explicit_patterns": [
|
|
37
|
+
"설정 파일",
|
|
38
|
+
"config file",
|
|
39
|
+
"tsconfig",
|
|
40
|
+
"eslint",
|
|
41
|
+
"prettier",
|
|
42
|
+
"package.json",
|
|
43
|
+
"vite.config",
|
|
44
|
+
"next.config",
|
|
45
|
+
"webpack",
|
|
46
|
+
"빌드 설정",
|
|
47
|
+
"build config",
|
|
48
|
+
"tooling-engineer로"
|
|
49
|
+
],
|
|
50
|
+
"mandatory_checklist": {
|
|
51
|
+
"schema_compliance": {
|
|
52
|
+
"rule": "Configuration changes MUST maintain valid schema structure",
|
|
53
|
+
"verification_key": "schema_compliance"
|
|
54
|
+
},
|
|
55
|
+
"backward_compatible": {
|
|
56
|
+
"rule": "Changes MUST NOT break existing configurations or build processes",
|
|
57
|
+
"verification_key": "backward_compatible"
|
|
58
|
+
},
|
|
59
|
+
"documentation": {
|
|
60
|
+
"rule": "Non-obvious configuration options MUST be documented with comments",
|
|
61
|
+
"verification_key": "documentation"
|
|
62
|
+
},
|
|
63
|
+
"validation": {
|
|
64
|
+
"rule": "Configuration changes MUST be validated (lint, typecheck, build)",
|
|
65
|
+
"verification_key": "validation"
|
|
66
|
+
},
|
|
67
|
+
"language": {
|
|
68
|
+
"rule": "MUST respond in Korean as specified in communication.language",
|
|
69
|
+
"verification_key": "language"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"verification_guide": {
|
|
73
|
+
"schema_compliance": "Run schema validation if available (e.g., tsc --showConfig for tsconfig)",
|
|
74
|
+
"backward_compatible": "Check existing tests pass, verify no breaking changes to build output",
|
|
75
|
+
"documentation": "Add inline comments explaining non-obvious settings",
|
|
76
|
+
"validation": "Run yarn lint, yarn typecheck, yarn build after changes",
|
|
77
|
+
"language": "All response text in Korean"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
"workflow": {
|
|
82
|
+
"config_modification": {
|
|
83
|
+
"approach": "Incremental change with validation",
|
|
84
|
+
"applies_to": "Modifying existing configuration files",
|
|
85
|
+
"steps": [
|
|
86
|
+
"1. Analyze current configuration and understand existing settings",
|
|
87
|
+
"2. Identify the specific change needed",
|
|
88
|
+
"3. Make minimal, targeted changes",
|
|
89
|
+
"4. Add comments for non-obvious settings",
|
|
90
|
+
"5. Validate changes (lint, typecheck, build)",
|
|
91
|
+
"6. Test that existing functionality still works"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"tool_setup": {
|
|
95
|
+
"approach": "Best practices implementation",
|
|
96
|
+
"applies_to": "Setting up new tools or configurations",
|
|
97
|
+
"steps": [
|
|
98
|
+
"1. Research current best practices for the tool",
|
|
99
|
+
"2. Check project's existing patterns and conventions",
|
|
100
|
+
"3. Create configuration following project standards",
|
|
101
|
+
"4. Add necessary dependencies to package.json",
|
|
102
|
+
"5. Document setup in comments or README",
|
|
103
|
+
"6. Verify integration with existing toolchain"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"dependency_management": {
|
|
107
|
+
"approach": "Safe updates with compatibility check",
|
|
108
|
+
"applies_to": "Managing package dependencies",
|
|
109
|
+
"steps": [
|
|
110
|
+
"1. Check current dependency versions and constraints",
|
|
111
|
+
"2. Research compatibility between packages",
|
|
112
|
+
"3. Update package.json with appropriate version ranges",
|
|
113
|
+
"4. Run install and verify lock file changes",
|
|
114
|
+
"5. Test that all features still work",
|
|
115
|
+
"6. Document any breaking changes or migration steps"
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
"config_patterns": {
|
|
121
|
+
"typescript": {
|
|
122
|
+
"tsconfig.json": "TypeScript compiler configuration",
|
|
123
|
+
"paths": "Module path aliases for cleaner imports",
|
|
124
|
+
"strict_mode": "Always enable strict mode for type safety"
|
|
125
|
+
},
|
|
126
|
+
"linting": {
|
|
127
|
+
"eslint.config.js": "ESLint flat config (modern approach)",
|
|
128
|
+
"prettier": "Code formatting rules",
|
|
129
|
+
"integration": "Ensure ESLint and Prettier work together"
|
|
130
|
+
},
|
|
131
|
+
"build_tools": {
|
|
132
|
+
"vite.config.ts": "Vite bundler configuration",
|
|
133
|
+
"next.config.js": "Next.js framework configuration",
|
|
134
|
+
"webpack.config.js": "Webpack bundler configuration"
|
|
135
|
+
},
|
|
136
|
+
"package_management": {
|
|
137
|
+
"package.json": "Dependencies, scripts, and metadata",
|
|
138
|
+
"workspaces": "Monorepo workspace configuration",
|
|
139
|
+
"engines": "Node.js version requirements"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
"best_practices": {
|
|
144
|
+
"general": [
|
|
145
|
+
"Use specific versions or version ranges (^, ~) appropriately",
|
|
146
|
+
"Keep configuration files minimal and well-documented",
|
|
147
|
+
"Follow project conventions over personal preferences",
|
|
148
|
+
"Validate changes before committing",
|
|
149
|
+
"Consider cross-platform compatibility"
|
|
150
|
+
],
|
|
151
|
+
"typescript": [
|
|
152
|
+
"Enable strict mode for better type safety",
|
|
153
|
+
"Use path aliases for cleaner imports",
|
|
154
|
+
"Configure appropriate target and module settings",
|
|
155
|
+
"Include necessary type definitions"
|
|
156
|
+
],
|
|
157
|
+
"linting": [
|
|
158
|
+
"Use ESLint flat config for modern projects",
|
|
159
|
+
"Configure rules that match team conventions",
|
|
160
|
+
"Integrate with Prettier for formatting",
|
|
161
|
+
"Set up pre-commit hooks for enforcement"
|
|
162
|
+
],
|
|
163
|
+
"build": [
|
|
164
|
+
"Optimize for development and production separately",
|
|
165
|
+
"Configure appropriate source maps",
|
|
166
|
+
"Set up tree-shaking and code splitting",
|
|
167
|
+
"Consider bundle size implications"
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
"code_quality_checklist": [
|
|
172
|
+
"Configuration is valid and parseable",
|
|
173
|
+
"All settings are documented or self-explanatory",
|
|
174
|
+
"No breaking changes to existing functionality",
|
|
175
|
+
"Build process completes successfully",
|
|
176
|
+
"Lint and typecheck pass",
|
|
177
|
+
"Development workflow still works correctly"
|
|
178
|
+
],
|
|
179
|
+
|
|
180
|
+
"communication": {
|
|
181
|
+
"language": "en",
|
|
182
|
+
"style": "Technical and precise, focusing on configuration details",
|
|
183
|
+
"approach": [
|
|
184
|
+
"Start by understanding the current configuration state",
|
|
185
|
+
"Explain the purpose and impact of changes",
|
|
186
|
+
"Provide context for non-obvious settings",
|
|
187
|
+
"Verify changes work before completing"
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
"reference": {
|
|
192
|
+
"project_rules": ".ai-rules/rules/",
|
|
193
|
+
"config_schema_reference": "See project's package.json and existing configs",
|
|
194
|
+
"official_docs": {
|
|
195
|
+
"typescript": "https://www.typescriptlang.org/tsconfig",
|
|
196
|
+
"eslint": "https://eslint.org/docs/latest/use/configure/configuration-files",
|
|
197
|
+
"prettier": "https://prettier.io/docs/configuration",
|
|
198
|
+
"vite": "https://vite.dev/config/",
|
|
199
|
+
"nextjs": "https://nextjs.org/docs/app/api-reference/config/next-config-js"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "accessibility",
|
|
3
|
+
"icon": "♿",
|
|
4
|
+
"description": "Accessibility (a11y) review items for WCAG 2.1 AA compliance",
|
|
5
|
+
"categories": [
|
|
6
|
+
{
|
|
7
|
+
"name": "forms",
|
|
8
|
+
"triggers": {
|
|
9
|
+
"files": [
|
|
10
|
+
"**/form/**",
|
|
11
|
+
"**/input/**",
|
|
12
|
+
"**/login/**",
|
|
13
|
+
"**/signup/**",
|
|
14
|
+
"**/contact/**"
|
|
15
|
+
],
|
|
16
|
+
"imports": ["react-hook-form", "formik", "@radix-ui/react-form"],
|
|
17
|
+
"patterns": ["<form", "<input", "<select", "<textarea", "onSubmit"]
|
|
18
|
+
},
|
|
19
|
+
"items": [
|
|
20
|
+
{
|
|
21
|
+
"id": "a11y-form-001",
|
|
22
|
+
"text": "Associate labels with form inputs using htmlFor/id",
|
|
23
|
+
"priority": "critical",
|
|
24
|
+
"reason": "Screen readers need label association to announce field purpose",
|
|
25
|
+
"reference": "WCAG 1.3.1"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "a11y-form-002",
|
|
29
|
+
"text": "Provide clear error messages with aria-describedby",
|
|
30
|
+
"priority": "high",
|
|
31
|
+
"reason": "Users need to understand what went wrong"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "a11y-form-003",
|
|
35
|
+
"text": "Mark required fields with aria-required",
|
|
36
|
+
"priority": "medium",
|
|
37
|
+
"reason": "Assistive technologies should announce required fields"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "a11y-form-004",
|
|
41
|
+
"text": "Ensure form can be submitted with keyboard (Enter key)",
|
|
42
|
+
"priority": "high",
|
|
43
|
+
"reason": "Keyboard-only users must be able to submit forms"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "interactive_elements",
|
|
49
|
+
"triggers": {
|
|
50
|
+
"files": [
|
|
51
|
+
"**/button/**",
|
|
52
|
+
"**/modal/**",
|
|
53
|
+
"**/dialog/**",
|
|
54
|
+
"**/dropdown/**",
|
|
55
|
+
"**/menu/**",
|
|
56
|
+
"**/components/**"
|
|
57
|
+
],
|
|
58
|
+
"imports": [
|
|
59
|
+
"@radix-ui/*",
|
|
60
|
+
"@headlessui/*",
|
|
61
|
+
"react-aria",
|
|
62
|
+
"react-modal"
|
|
63
|
+
],
|
|
64
|
+
"patterns": ["onClick", "onKeyDown", "role=", "aria-", "<button", "<a "]
|
|
65
|
+
},
|
|
66
|
+
"items": [
|
|
67
|
+
{
|
|
68
|
+
"id": "a11y-interactive-001",
|
|
69
|
+
"text": "Ensure all interactive elements are keyboard accessible",
|
|
70
|
+
"priority": "critical",
|
|
71
|
+
"reason": "Not all users can use a mouse",
|
|
72
|
+
"reference": "WCAG 2.1.1"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "a11y-interactive-002",
|
|
76
|
+
"text": "Provide visible focus indicators",
|
|
77
|
+
"priority": "critical",
|
|
78
|
+
"reason": "Keyboard users need to see where focus is",
|
|
79
|
+
"reference": "WCAG 2.4.7"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "a11y-interactive-003",
|
|
83
|
+
"text": "Use semantic HTML elements (button, a) instead of div with onClick",
|
|
84
|
+
"priority": "high",
|
|
85
|
+
"reason": "Semantic elements have built-in accessibility"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "a11y-interactive-004",
|
|
89
|
+
"text": "Manage focus when opening/closing modals",
|
|
90
|
+
"priority": "high",
|
|
91
|
+
"reason": "Focus should move to modal and return when closed"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "content",
|
|
97
|
+
"triggers": {
|
|
98
|
+
"files": ["**/page/**", "**/layout/**", "**/*.tsx", "**/*.jsx"],
|
|
99
|
+
"imports": ["next/image", "next/link"],
|
|
100
|
+
"patterns": ["<img", "<Image", "<h1", "<h2", "<main", "<nav", "<aside"]
|
|
101
|
+
},
|
|
102
|
+
"items": [
|
|
103
|
+
{
|
|
104
|
+
"id": "a11y-content-001",
|
|
105
|
+
"text": "Provide alt text for all meaningful images",
|
|
106
|
+
"priority": "critical",
|
|
107
|
+
"reason": "Screen reader users cannot see images",
|
|
108
|
+
"reference": "WCAG 1.1.1"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "a11y-content-002",
|
|
112
|
+
"text": "Use proper heading hierarchy (h1 > h2 > h3)",
|
|
113
|
+
"priority": "high",
|
|
114
|
+
"reason": "Headings provide document structure for navigation"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "a11y-content-003",
|
|
118
|
+
"text": "Ensure sufficient color contrast (4.5:1 for text)",
|
|
119
|
+
"priority": "high",
|
|
120
|
+
"reason": "Low contrast text is hard to read",
|
|
121
|
+
"reference": "WCAG 1.4.3"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "a11y-content-004",
|
|
125
|
+
"text": "Use landmark regions (main, nav, aside, footer)",
|
|
126
|
+
"priority": "medium",
|
|
127
|
+
"reason": "Landmarks help screen reader users navigate"
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "code-quality",
|
|
3
|
+
"icon": "📏",
|
|
4
|
+
"description": "Code quality and maintainability review items",
|
|
5
|
+
"categories": [
|
|
6
|
+
{
|
|
7
|
+
"name": "general",
|
|
8
|
+
"triggers": {
|
|
9
|
+
"files": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
|
|
10
|
+
"imports": [],
|
|
11
|
+
"patterns": []
|
|
12
|
+
},
|
|
13
|
+
"items": [
|
|
14
|
+
{
|
|
15
|
+
"id": "cq-gen-001",
|
|
16
|
+
"text": "Use explicit TypeScript types (avoid 'any')",
|
|
17
|
+
"priority": "high",
|
|
18
|
+
"reason": "Type safety catches errors at compile time"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "cq-gen-002",
|
|
22
|
+
"text": "Keep functions small (10-20 lines max)",
|
|
23
|
+
"priority": "medium",
|
|
24
|
+
"reason": "Small functions are easier to understand and test"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "cq-gen-003",
|
|
28
|
+
"text": "Use meaningful variable and function names",
|
|
29
|
+
"priority": "high",
|
|
30
|
+
"reason": "Code should be self-documenting"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "cq-gen-004",
|
|
34
|
+
"text": "Remove dead code and unused imports",
|
|
35
|
+
"priority": "medium",
|
|
36
|
+
"reason": "Dead code adds confusion and maintenance burden"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "solid_principles",
|
|
42
|
+
"triggers": {
|
|
43
|
+
"files": ["**/service/**", "**/util/**", "**/lib/**", "**/core/**"],
|
|
44
|
+
"imports": [],
|
|
45
|
+
"patterns": ["class ", "interface ", "abstract "]
|
|
46
|
+
},
|
|
47
|
+
"items": [
|
|
48
|
+
{
|
|
49
|
+
"id": "cq-solid-001",
|
|
50
|
+
"text": "Single Responsibility: Each module has one reason to change",
|
|
51
|
+
"priority": "high",
|
|
52
|
+
"reason": "Focused modules are easier to maintain"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "cq-solid-002",
|
|
56
|
+
"text": "Dependency Inversion: Depend on abstractions, not concretions",
|
|
57
|
+
"priority": "medium",
|
|
58
|
+
"reason": "Makes code more flexible and testable"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "cq-solid-003",
|
|
62
|
+
"text": "DRY: Eliminate code duplication",
|
|
63
|
+
"priority": "high",
|
|
64
|
+
"reason": "Duplicated code means duplicated bugs"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "error_handling",
|
|
70
|
+
"triggers": {
|
|
71
|
+
"files": ["**/api/**", "**/service/**", "**/handler/**"],
|
|
72
|
+
"imports": [],
|
|
73
|
+
"patterns": ["try", "catch", "throw", "Error", "Promise"]
|
|
74
|
+
},
|
|
75
|
+
"items": [
|
|
76
|
+
{
|
|
77
|
+
"id": "cq-error-001",
|
|
78
|
+
"text": "Handle all error cases explicitly",
|
|
79
|
+
"priority": "high",
|
|
80
|
+
"reason": "Unhandled errors crash applications"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "cq-error-002",
|
|
84
|
+
"text": "Provide meaningful error messages",
|
|
85
|
+
"priority": "medium",
|
|
86
|
+
"reason": "Good error messages help debugging"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "cq-error-003",
|
|
90
|
+
"text": "Use custom error types for domain errors",
|
|
91
|
+
"priority": "low",
|
|
92
|
+
"reason": "Enables specific error handling"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"domains": [
|
|
4
|
+
{
|
|
5
|
+
"id": "security",
|
|
6
|
+
"name": "Security",
|
|
7
|
+
"icon": "🔒",
|
|
8
|
+
"file": "security.json",
|
|
9
|
+
"description": "Security-related review items (authentication, input validation, data protection)"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "accessibility",
|
|
13
|
+
"name": "Accessibility",
|
|
14
|
+
"icon": "♿",
|
|
15
|
+
"file": "accessibility.json",
|
|
16
|
+
"description": "WCAG 2.1 AA compliance items (forms, interactive elements, content)"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "performance",
|
|
20
|
+
"name": "Performance",
|
|
21
|
+
"icon": "⚡",
|
|
22
|
+
"file": "performance.json",
|
|
23
|
+
"description": "Performance optimization items (rendering, loading, data fetching)"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "testing",
|
|
27
|
+
"name": "Testing",
|
|
28
|
+
"icon": "🧪",
|
|
29
|
+
"file": "testing.json",
|
|
30
|
+
"description": "Testing strategy items (unit, component, API testing)"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "code-quality",
|
|
34
|
+
"name": "Code Quality",
|
|
35
|
+
"icon": "📏",
|
|
36
|
+
"file": "code-quality.json",
|
|
37
|
+
"description": "Code quality items (TypeScript, SOLID principles, error handling)"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "seo",
|
|
41
|
+
"name": "SEO",
|
|
42
|
+
"icon": "🔍",
|
|
43
|
+
"file": "seo.json",
|
|
44
|
+
"description": "SEO optimization items (metadata, structure, links)"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "performance",
|
|
3
|
+
"icon": "⚡",
|
|
4
|
+
"description": "Performance optimization review items",
|
|
5
|
+
"categories": [
|
|
6
|
+
{
|
|
7
|
+
"name": "rendering",
|
|
8
|
+
"triggers": {
|
|
9
|
+
"files": ["**/components/**", "**/page/**", "**/*.tsx", "**/*.jsx"],
|
|
10
|
+
"imports": ["react", "next", "useMemo", "useCallback", "memo"],
|
|
11
|
+
"patterns": ["useState", "useEffect", "useMemo", "useCallback", "memo("]
|
|
12
|
+
},
|
|
13
|
+
"items": [
|
|
14
|
+
{
|
|
15
|
+
"id": "perf-render-001",
|
|
16
|
+
"text": "Memoize expensive calculations with useMemo",
|
|
17
|
+
"priority": "medium",
|
|
18
|
+
"reason": "Prevents unnecessary recalculations on re-render"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "perf-render-002",
|
|
22
|
+
"text": "Use useCallback for callback props to child components",
|
|
23
|
+
"priority": "medium",
|
|
24
|
+
"reason": "Prevents unnecessary child re-renders"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "perf-render-003",
|
|
28
|
+
"text": "Avoid inline object/array creation in JSX",
|
|
29
|
+
"priority": "low",
|
|
30
|
+
"reason": "New references cause unnecessary re-renders"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "perf-render-004",
|
|
34
|
+
"text": "Use React.memo for pure presentational components",
|
|
35
|
+
"priority": "low",
|
|
36
|
+
"reason": "Skip re-renders when props haven't changed"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "loading",
|
|
42
|
+
"triggers": {
|
|
43
|
+
"files": ["**/page/**", "**/layout/**", "**/app/**"],
|
|
44
|
+
"imports": ["next/dynamic", "next/image", "react-lazy-load"],
|
|
45
|
+
"patterns": ["dynamic(", "lazy(", "Suspense", "loading"]
|
|
46
|
+
},
|
|
47
|
+
"items": [
|
|
48
|
+
{
|
|
49
|
+
"id": "perf-load-001",
|
|
50
|
+
"text": "Use code splitting with dynamic imports",
|
|
51
|
+
"priority": "high",
|
|
52
|
+
"reason": "Reduces initial bundle size"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "perf-load-002",
|
|
56
|
+
"text": "Optimize images (WebP, proper sizing, lazy loading)",
|
|
57
|
+
"priority": "high",
|
|
58
|
+
"reason": "Images are often the largest assets"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "perf-load-003",
|
|
62
|
+
"text": "Implement loading skeletons for async content",
|
|
63
|
+
"priority": "medium",
|
|
64
|
+
"reason": "Improves perceived performance"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "data_fetching",
|
|
70
|
+
"triggers": {
|
|
71
|
+
"files": ["**/api/**", "**/hook/**", "**/query/**"],
|
|
72
|
+
"imports": ["@tanstack/react-query", "swr", "axios"],
|
|
73
|
+
"patterns": ["useQuery", "useSWR", "fetch(", "getServerSideProps"]
|
|
74
|
+
},
|
|
75
|
+
"items": [
|
|
76
|
+
{
|
|
77
|
+
"id": "perf-data-001",
|
|
78
|
+
"text": "Implement proper caching strategy",
|
|
79
|
+
"priority": "high",
|
|
80
|
+
"reason": "Reduces unnecessary network requests"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "perf-data-002",
|
|
84
|
+
"text": "Use stale-while-revalidate pattern where appropriate",
|
|
85
|
+
"priority": "medium",
|
|
86
|
+
"reason": "Shows cached data while fetching fresh data"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "perf-data-003",
|
|
90
|
+
"text": "Paginate or virtualize large lists",
|
|
91
|
+
"priority": "high",
|
|
92
|
+
"reason": "Rendering thousands of items kills performance"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|