@wipal/agent-team 1.0.4 → 1.1.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.
Files changed (124) hide show
  1. package/.claude/commands/skills/discover.md +127 -0
  2. package/.claude/commands/skills/install.md +225 -0
  3. package/.claude/commands/skills/review.md +234 -0
  4. package/.claude/commands/utils/learn.md +142 -0
  5. package/.claude/commands/utils/retrospect.md +62 -0
  6. package/.claude/commands/utils/switch.md +113 -0
  7. package/.claude/commands/utils/sync.md +183 -0
  8. package/.claude/rules/common/general-rules.md +6 -0
  9. package/.claude/rules/role-rules/dev-be-rules.md +241 -0
  10. package/.claude/rules/role-rules/dev-fe-rules.md +76 -0
  11. package/.claude/skills/SKILL-INDEX.md +24 -5
  12. package/.claude/skills/core/knowledge-graph/SKILL.md +214 -0
  13. package/.claude/skills/core/sequential-thinking/SKILL.md +112 -0
  14. package/.claude/skills/core/sequential-thinking/references/advanced.md +122 -0
  15. package/.claude/skills/core/sequential-thinking/references/examples.md +274 -0
  16. package/.claude/skills/domain/architecture/c4-architecture/SKILL.md +314 -0
  17. package/.claude/skills/domain/architecture/c4-architecture/references/advanced-patterns.md +552 -0
  18. package/.claude/skills/domain/architecture/c4-architecture/references/c4-syntax.md +492 -0
  19. package/.claude/skills/domain/architecture/c4-architecture/references/common-mistakes.md +437 -0
  20. package/.claude/skills/domain/architecture/mermaid-diagrams/SKILL.md +238 -0
  21. package/.claude/skills/domain/architecture/mermaid-diagrams/references/advanced-features.md +556 -0
  22. package/.claude/skills/domain/architecture/mermaid-diagrams/references/architecture-diagrams.md +192 -0
  23. package/.claude/skills/domain/architecture/mermaid-diagrams/references/c4-diagrams.md +410 -0
  24. package/.claude/skills/domain/architecture/mermaid-diagrams/references/class-diagrams.md +361 -0
  25. package/.claude/skills/domain/architecture/mermaid-diagrams/references/erd-diagrams.md +510 -0
  26. package/.claude/skills/domain/architecture/mermaid-diagrams/references/flowcharts.md +450 -0
  27. package/.claude/skills/domain/architecture/mermaid-diagrams/references/sequence-diagrams.md +394 -0
  28. package/.claude/skills/domain/backend/testing-be/SKILL.md +121 -17
  29. package/.claude/skills/domain/design/design-system/SKILL.md +169 -0
  30. package/.claude/skills/domain/design/html-css-output/SKILL.md +253 -0
  31. package/.claude/skills/domain/design/mockup-creation/SKILL.md +230 -0
  32. package/.claude/skills/domain/design/responsive-design/SKILL.md +207 -0
  33. package/.claude/skills/domain/design/ui-design/SKILL.md +124 -0
  34. package/.claude/skills/domain/frontend/testing-fe/SKILL.md +143 -38
  35. package/.claude/skills/domain/frontend/ui-ux-pro-max/README.md +45 -0
  36. package/.claude/skills/domain/frontend/ui-ux-pro-max/SKILL.md +404 -0
  37. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/charts.csv +26 -0
  38. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/colors.csv +97 -0
  39. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/icons.csv +101 -0
  40. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/landing.csv +31 -0
  41. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/products.csv +97 -0
  42. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/react-performance.csv +45 -0
  43. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  44. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  45. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  46. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  47. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  48. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  49. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  50. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  51. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -0
  52. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  53. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  54. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  55. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  56. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/styles.csv +68 -0
  57. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/typography.csv +58 -0
  58. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  59. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  60. package/.claude/skills/domain/frontend/ui-ux-pro-max/data/web-interface.csv +31 -0
  61. package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/core.py +253 -0
  62. package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -0
  63. package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/search.py +114 -0
  64. package/.claude/skills/domain/product/requirements-clarity/SKILL.md +340 -0
  65. package/.claude/skills/skills-registry.yaml +103 -8
  66. package/README.md +107 -33
  67. package/README.npm.md +252 -0
  68. package/TUTORIAL.md +256 -0
  69. package/bin/agent-team.js +26 -7
  70. package/config/roles.yaml +107 -0
  71. package/docs/01-architecture.md +699 -0
  72. package/docs/02-setup-guide.md +634 -0
  73. package/docs/03-skills-guide.md +628 -0
  74. package/docs/04-workflows.md +792 -0
  75. package/docs/05-model-strategy.md +550 -0
  76. package/docs/06-extend-guide.md +1226 -0
  77. package/docs/07-quick-reference.md +578 -0
  78. package/docs/08-skills-discovery.md +342 -0
  79. package/docs/README.md +134 -0
  80. package/docs/rqm.md +560 -0
  81. package/package.json +9 -3
  82. package/scripts/postinstall.js +46 -0
  83. package/src/commands/add.js +131 -67
  84. package/src/commands/init.js +419 -9
  85. package/src/commands/list.js +20 -16
  86. package/src/commands/projects.js +127 -0
  87. package/src/commands/setup-hooks.js +261 -0
  88. package/src/index.js +0 -1
  89. package/src/utils/file-utils.js +147 -50
  90. package/src/utils/global-registry.js +224 -0
  91. package/templates/CLAUDE.md.tmpl +128 -20
  92. package/templates/MEMORY.md.tmpl +119 -0
  93. package/templates/agent.md.tmpl +205 -0
  94. package/templates/code/nestjs-controller.ts.tmpl +49 -0
  95. package/templates/code/nestjs-dto.ts.tmpl +63 -0
  96. package/templates/code/nestjs-service.ts.tmpl +45 -0
  97. package/templates/code/react-component.tsx.tmpl +24 -0
  98. package/templates/code/react-hook.ts.tmpl +54 -0
  99. package/templates/code/test.spec.ts.tmpl +50 -0
  100. package/templates/code/vue-component.vue.tmpl +49 -0
  101. package/templates/code/vue-composable.ts.tmpl +54 -0
  102. package/templates/knowledge.md.tmpl +152 -17
  103. package/templates/meeting-notes.md.tmpl +110 -0
  104. package/templates/memory/hooks.memory.json +50 -0
  105. package/templates/memory/settings.memory.json +16 -0
  106. package/templates/reports/bug-report.md.tmpl +164 -0
  107. package/templates/reports/code-review.md.tmpl +201 -0
  108. package/templates/reports/sprint-report.md.tmpl +218 -0
  109. package/templates/roles/ba.md +53 -0
  110. package/templates/roles/designer.md +82 -0
  111. package/templates/roles/dev-be.md +49 -0
  112. package/templates/roles/dev-fe.md +49 -0
  113. package/templates/roles/devops.md +53 -0
  114. package/templates/roles/pm.md +49 -0
  115. package/templates/roles/qa.md +53 -0
  116. package/templates/roles/sa.md +49 -0
  117. package/templates/roles/tech-lead.md +132 -0
  118. package/templates/skills/memory/memory-status.md +78 -0
  119. package/templates/skills/memory/recall.md +160 -0
  120. package/templates/skills/memory/reflect.md +168 -0
  121. package/templates/skills/memory/remember.md +105 -0
  122. package/templates/tasks/lessons.md.tmpl +77 -0
  123. package/templates/tasks/todo.md.tmpl +53 -0
  124. package/src/commands/switch.js +0 -53
@@ -0,0 +1,207 @@
1
+ ---
2
+ name: responsive-design
3
+ description: |
4
+ Mobile-first responsive design with breakpoints and adaptive layouts.
5
+ Use when creating responsive layouts, mobile designs, or adapting for different screens.
6
+ Triggers: responsive, mobile-first, breakpoints, adaptive, mobile, tablet, desktop
7
+ version: 1.0.0
8
+ category: design
9
+ tags:
10
+ - responsive
11
+ - mobile-first
12
+ - breakpoints
13
+ - adaptive
14
+ depends_on: [ui-design]
15
+ recommends: []
16
+ used_by: []
17
+ ---
18
+
19
+ # Responsive Design Guide
20
+
21
+ Mobile-first approach to creating adaptive layouts.
22
+
23
+ ## Mobile-First Philosophy
24
+
25
+ Start with mobile styles, then add complexity for larger screens.
26
+
27
+ **Why Mobile-First:**
28
+ - Forces prioritization of content
29
+ - Simpler base styles
30
+ - Progressive enhancement
31
+ - Better performance on mobile
32
+
33
+ ## Breakpoint System
34
+
35
+ ### Standard Breakpoints
36
+
37
+ ```css
38
+ /* Mobile First (min-width) */
39
+ --breakpoint-sm: 640px; /* Small tablets */
40
+ --breakpoint-md: 768px; /* Tablets */
41
+ --breakpoint-lg: 1024px; /* Laptops */
42
+ --breakpoint-xl: 1280px; /* Desktops */
43
+ --breakpoint-2xl: 1536px; /* Large screens */
44
+ ```
45
+
46
+ ### Tailwind-style Usage
47
+
48
+ ```css
49
+ /* Base: Mobile styles */
50
+ .container {
51
+ padding: 1rem;
52
+ }
53
+
54
+ /* sm: 640px+ */
55
+ @media (min-width: 640px) {
56
+ .container {
57
+ padding: 1.5rem;
58
+ }
59
+ }
60
+
61
+ /* md: 768px+ */
62
+ @media (min-width: 768px) {
63
+ .container {
64
+ padding: 2rem;
65
+ }
66
+ }
67
+ ```
68
+
69
+ ## Layout Patterns
70
+
71
+ ### Container
72
+
73
+ ```css
74
+ .container {
75
+ width: 100%;
76
+ max-width: 1280px;
77
+ margin-left: auto;
78
+ margin-right: auto;
79
+ padding-left: 1rem;
80
+ padding-right: 1rem;
81
+ }
82
+
83
+ @media (min-width: 640px) {
84
+ .container {
85
+ padding-left: 1.5rem;
86
+ padding-right: 1.5rem;
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### Responsive Grid
92
+
93
+ ```css
94
+ .grid {
95
+ display: grid;
96
+ gap: 1rem;
97
+ grid-template-columns: 1fr;
98
+ }
99
+
100
+ @media (min-width: 640px) {
101
+ .grid {
102
+ grid-template-columns: repeat(2, 1fr);
103
+ }
104
+ }
105
+
106
+ @media (min-width: 1024px) {
107
+ .grid {
108
+ grid-template-columns: repeat(3, 1fr);
109
+ }
110
+ }
111
+ ```
112
+
113
+ ### Stack on Mobile
114
+
115
+ ```css
116
+ /* Mobile: Stack */
117
+ .flex-mobile-stack {
118
+ flex-direction: column;
119
+ gap: 1rem;
120
+ }
121
+
122
+ /* Desktop: Row */
123
+ @media (min-width: 768px) {
124
+ .flex-mobile-stack {
125
+ flex-direction: row;
126
+ gap: 2rem;
127
+ }
128
+ }
129
+ ```
130
+
131
+ ## Typography Scaling
132
+
133
+ ### Fluid Typography
134
+
135
+ ```css
136
+ /* Clamps between min and max based on viewport */
137
+ .heading {
138
+ font-size: clamp(1.5rem, 4vw, 3rem);
139
+ }
140
+ ```
141
+
142
+ ### Responsive Type Scale
143
+
144
+ | Size | Mobile | Desktop |
145
+ | ---- | ------ | ------- |
146
+ | h1 | 2rem | 3rem |
147
+ | h2 | 1.5rem | 2.25rem |
148
+ | h3 | 1.25rem | 1.5rem |
149
+ | h4 | 1.125rem | 1.25rem |
150
+ | body | 1rem | 1rem |
151
+ | small | 0.875rem | 0.875rem |
152
+
153
+ ## Image Handling
154
+
155
+ ### Responsive Images
156
+
157
+ ```html
158
+ <img
159
+ src="image.jpg"
160
+ srcset="image-320w.jpg 320w, image-640w.jpg 640w, image-1280w.jpg 1280w"
161
+ sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw"
162
+ alt="Description"
163
+ />
164
+ ```
165
+
166
+ ### Aspect Ratio
167
+
168
+ ```css
169
+ .aspect-video {
170
+ aspect-ratio: 16 / 9;
171
+ }
172
+
173
+ .aspect-square {
174
+ aspect-ratio: 1 / 1;
175
+ }
176
+ ```
177
+
178
+ ## Touch Considerations
179
+
180
+ ### Touch Targets
181
+
182
+ ```css
183
+ /* Minimum 44x44px for touch */
184
+ .touch-target {
185
+ min-height: 44px;
186
+ min-width: 44px;
187
+ padding: 0.75rem 1rem;
188
+ }
189
+ ```
190
+
191
+ ### Touch vs Mouse Interactions
192
+
193
+ | Touch | Mouse |
194
+ | ----- | ----- |
195
+ | Tap | Click |
196
+ | Long press | Right click |
197
+ | Swipe | Scroll |
198
+ | Pinch | Scroll zoom |
199
+
200
+ ## Testing Checklist
201
+
202
+ - [ ] Test at 320px, 375px, 768px, 1024px, 1440px
203
+ - [ ] Touch targets at least 44x44px
204
+ - [ ] Text readable without zoom on mobile
205
+ - [ ] No horizontal scroll on mobile
206
+ - [ ] Images scale appropriately
207
+ - [ ] Forms usable on touch devices
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: ui-design
3
+ description: |
4
+ UI design principles for creating professional, accessible interfaces.
5
+ Use when designing user interfaces, creating design systems, or reviewing UI.
6
+ Triggers: design, ui, interface, visual, user interface
7
+ version: 1.0.0
8
+ category: design
9
+ tags:
10
+ - ui-design
11
+ - accessibility
12
+ - visual-design
13
+ - user-interface
14
+ depends_on: []
15
+ recommends: []
16
+ used_by: [design-system]
17
+ ---
18
+
19
+ # UI Design Principles
20
+
21
+ Core principles for creating professional, accessible user interfaces.
22
+
23
+ ## Visual Hierarchy
24
+
25
+ - **Size**: Larger elements draw more attention
26
+ - **Color**: Bright/warm colors advance, cool/dark colors recede
27
+ - **Contrast**: High contrast creates focal points
28
+ - **Spacing**: White space guides the eye
29
+ - **Typography**: Weight and size differentiate importance
30
+
31
+ ## Layout Principles
32
+
33
+ ### Grid Systems
34
+ - Use consistent grid (12-column common)
35
+ - Maintain alignment across elements
36
+ - Create rhythm through repetition
37
+
38
+ ### Spacing Scale
39
+ ```
40
+ xs: 4px
41
+ sm: 8px
42
+ md: 16px
43
+ lg: 24px
44
+ xl: 32px
45
+ 2xl: 48px
46
+ ```
47
+
48
+ ### Visual Balance
49
+ - Distribute visual weight evenly
50
+ - Use symmetry for stability, asymmetry for interest
51
+ - Avoid orphan elements
52
+
53
+ ## Color Application
54
+
55
+ ### Primary Actions
56
+ - One primary color for main CTAs
57
+ - High contrast with background
58
+ - Consistent across all screens
59
+
60
+ ### Semantic Colors
61
+ - **Success**: Green (#10B981)
62
+ - **Warning**: Yellow (#F59E0B)
63
+ - **Error**: Red (#EF4444)
64
+ - **Info**: Blue (#3B82F6)
65
+
66
+ ### Accessibility
67
+ - Minimum 4.5:1 contrast ratio for text
68
+ - 3:1 for large text (18px+ or 14px+ bold)
69
+ - Never rely on color alone for meaning
70
+
71
+ ## Typography
72
+
73
+ ### Font Pairing
74
+ - Maximum 2 font families
75
+ - Pair contrasting styles (serif + sans-serif)
76
+ - Ensure readability at all sizes
77
+
78
+ ### Type Scale
79
+ ```
80
+ xs: 12px
81
+ sm: 14px
82
+ base: 16px
83
+ lg: 18px
84
+ xl: 20px
85
+ 2xl: 24px
86
+ 3xl: 30px
87
+ 4xl: 36px
88
+ 5xl: 48px
89
+ ```
90
+
91
+ ### Line Height
92
+ - Body text: 1.5 - 1.75
93
+ - Headings: 1.2 - 1.4
94
+ - Captions: 1.4
95
+
96
+ ## Interactive Elements
97
+
98
+ ### Buttons
99
+ - Minimum 44x44px touch target
100
+ - Clear hover/focus states
101
+ - Disabled state visually distinct
102
+ - Loading state when async
103
+
104
+ ### Form Inputs
105
+ - Visible labels (not placeholder-only)
106
+ - Clear error states
107
+ - Helper text for complex inputs
108
+ - Consistent input heights
109
+
110
+ ### Links
111
+ - Underline or clear visual distinction
112
+ - Different visited state optional
113
+ - Hover state feedback
114
+
115
+ ## Accessibility Checklist
116
+
117
+ - [ ] Color contrast meets WCAG 2.1 AA
118
+ - [ ] Focus states visible
119
+ - [ ] Touch targets minimum 44x44px
120
+ - [ ] Form inputs have labels
121
+ - [ ] Error messages clear and specific
122
+ - [ ] Interactive elements keyboard accessible
123
+ - [ ] Images have alt text
124
+ - [ ] Heading hierarchy logical
@@ -1,42 +1,45 @@
1
1
  ---
2
2
  name: testing-fe
3
3
  description: |
4
- Frontend testing with Vitest, Testing Library, Playwright. Use when: writing
5
- unit tests, integration tests, component tests, E2E tests, or when user
6
- mentions "test", "vitest", "jest", "testing library", "playwright", "cypress".
7
- Test behavior, not implementation.
8
- version: 1.0.0
4
+ Frontend testing from developer perspective: Unit Tests, Integration Tests,
5
+ Functional Tests, Component/UI Tests. Use when writing tests for your own
6
+ code. NOT for E2E/QA testing (that's QA domain). Test behavior, not implementation.
7
+ version: 1.1.0
9
8
  category: frontend
10
9
  tags:
11
10
  - testing
11
+ - unit-test
12
+ - integration-test
13
+ - functional-test
14
+ - component-test
12
15
  - vitest
13
16
  - testing-library
14
- - playwright
15
17
  depends_on:
16
18
  - code-review
17
19
  recommends: []
18
- used_by: []
20
+ used_by:
21
+ - dev-fe
19
22
  ---
20
23
 
21
- # Skill: Testing FE
24
+ # Skill: Testing FE (Developer Perspective)
22
25
 
23
26
  ## Core Principle
24
- **Test behavior, not implementation.** Users don't care about your code structure—they care if it works.
27
+ **Test behavior, not implementation.** As a developer, you test YOUR code to ensure it works correctly. E2E testing is QA's responsibility.
25
28
 
26
- ## Testing Trophy
29
+ ## Testing Pyramid (Developer Focus)
27
30
 
28
31
  ```
29
-
30
- /E2E\ Few, slow, expensive
31
- /─────\
32
- / API \ Some, medium speed
33
- /─────────\
34
- / Integration \ Many, fast
35
- /───────────────\
36
- / Unit Tests \ Many, very fast
37
- /───────────────────\
32
+
33
+ /API\ Some, medium speed (Integration)
34
+ /─────\
35
+ /Component\ Many, fast (Component/UI)
36
+ /───────────\
37
+ / Unit \ Many, very fast
38
+ /───────────────\
38
39
  ```
39
40
 
41
+ **Note:** E2E testing is NOT included - that's QA/Tester domain, not developer responsibility.
42
+
40
43
  ## Hard Rules
41
44
 
42
45
  1. **NEVER test implementation** - Test user behavior
@@ -44,8 +47,39 @@ used_by: []
44
47
  3. **ALWAYS use userEvent** - Not fireEvent
45
48
  4. **ALWAYS wait for async** - findBy*, waitFor
46
49
  5. **ALWAYS clean up** - No state leakage
50
+ 6. **NO E2E tests** - That's QA domain, not dev responsibility
51
+
52
+ ## Unit Testing
53
+
54
+ Test individual functions, hooks, and utilities in isolation.
55
+
56
+ ```tsx
57
+ // useCounter.test.ts
58
+ import { renderHook, act } from '@testing-library/react';
59
+ import { describe, it, expect } from 'vitest';
60
+ import { useCounter } from './useCounter';
61
+
62
+ describe('useCounter', () => {
63
+ it('initializes with default value', () => {
64
+ const { result } = renderHook(() => useCounter());
65
+ expect(result.current.count).toBe(0);
66
+ });
67
+
68
+ it('increments count', () => {
69
+ const { result } = renderHook(() => useCounter());
70
+
71
+ act(() => {
72
+ result.current.increment();
73
+ });
47
74
 
48
- ## Component Testing (Vitest + Testing Library)
75
+ expect(result.current.count).toBe(1);
76
+ });
77
+ });
78
+ ```
79
+
80
+ ## Component/UI Testing (Vitest + Testing Library)
81
+
82
+ Test how components render and respond to user interaction.
49
83
 
50
84
  ```tsx
51
85
  // Button.test.tsx
@@ -80,6 +114,93 @@ describe('Button', () => {
80
114
  });
81
115
  ```
82
116
 
117
+ ## Integration Testing
118
+
119
+ Test how multiple components work together.
120
+
121
+ ```tsx
122
+ // LoginForm.test.tsx
123
+ import { render, screen, waitFor } from '@testing-library/react';
124
+ import userEvent from '@testing-library/user-event';
125
+ import { describe, it, expect, vi } from 'vitest';
126
+ import { LoginForm } from './LoginForm';
127
+
128
+ describe('LoginForm Integration', () => {
129
+ it('submits form with valid credentials', async () => {
130
+ const onSubmit = vi.fn();
131
+ const user = userEvent.setup();
132
+
133
+ render(<LoginForm onSubmit={onSubmit} />);
134
+
135
+ await user.type(screen.getByLabelText(/email/i), 'test@example.com');
136
+ await user.type(screen.getByLabelText(/password/i), 'password123');
137
+ await user.click(screen.getByRole('button', { name: /sign in/i }));
138
+
139
+ await waitFor(() => {
140
+ expect(onSubmit).toHaveBeenCalledWith({
141
+ email: 'test@example.com',
142
+ password: 'password123',
143
+ });
144
+ });
145
+ });
146
+
147
+ it('shows validation errors', async () => {
148
+ const user = userEvent.setup();
149
+
150
+ render(<LoginForm onSubmit={vi.fn()} />);
151
+
152
+ await user.click(screen.getByRole('button', { name: /sign in/i }));
153
+
154
+ expect(await screen.findByText(/email is required/i)).toBeInTheDocument();
155
+ expect(screen.getByText(/password is required/i)).toBeInTheDocument();
156
+ });
157
+ });
158
+ ```
159
+
160
+ ## Functional Testing
161
+
162
+ Test complete features from user perspective (without browser).
163
+
164
+ ```tsx
165
+ // ShoppingCart.test.tsx
166
+ import { render, screen } from '@testing-library/react';
167
+ import userEvent from '@testing-library/user-event';
168
+ import { describe, it, expect } from 'vitest';
169
+ import { ShoppingCart } from './ShoppingCart';
170
+
171
+ describe('ShoppingCart Functional Tests', () => {
172
+ it('adds item and updates total', async () => {
173
+ const user = userEvent.setup();
174
+
175
+ render(<ShoppingCart />);
176
+
177
+ // Add first item
178
+ await user.click(screen.getByRole('button', { name: /add product a/i }));
179
+
180
+ expect(screen.getByText(/total: \$10.00/i)).toBeInTheDocument();
181
+ expect(screen.getByText(/1 item/i)).toBeInTheDocument();
182
+
183
+ // Add second item
184
+ await user.click(screen.getByRole('button', { name: /add product b/i }));
185
+
186
+ expect(screen.getByText(/total: \$25.00/i)).toBeInTheDocument();
187
+ expect(screen.getByText(/2 items/i)).toBeInTheDocument();
188
+ });
189
+
190
+ it('removes item and updates total', async () => {
191
+ const user = userEvent.setup();
192
+
193
+ render(<ShoppingCart />);
194
+
195
+ await user.click(screen.getByRole('button', { name: /add product a/i }));
196
+ await user.click(screen.getByRole('button', { name: /remove product a/i }));
197
+
198
+ expect(screen.getByText(/total: \$0.00/i)).toBeInTheDocument();
199
+ expect(screen.getByText(/0 items/i)).toBeInTheDocument();
200
+ });
201
+ });
202
+ ```
203
+
83
204
  ## Async Testing
84
205
 
85
206
  ```tsx
@@ -127,6 +248,7 @@ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
127
248
  | Not waiting for async | findBy*, waitFor |
128
249
  | Testing implementation | Test user behavior |
129
250
  | Brittle selectors | Use accessible queries |
251
+ | Writing E2E tests | That's QA domain |
130
252
 
131
253
  ## Query Priority
132
254
 
@@ -145,24 +267,6 @@ screen.getByTitle(/close/i);
145
267
  screen.getByTestId('submit-button');
146
268
  ```
147
269
 
148
- ## E2E Testing (Playwright)
149
-
150
- ```typescript
151
- // example.spec.ts
152
- import { test, expect } from '@playwright/test';
153
-
154
- test('user can login', async ({ page }) => {
155
- await page.goto('/login');
156
-
157
- await page.fill('[name="email"]', 'test@example.com');
158
- await page.fill('[name="password"]', 'password123');
159
- await page.click('button[type="submit"]');
160
-
161
- await expect(page).toHaveURL('/dashboard');
162
- await expect(page.locator('h1')).toContainText('Welcome');
163
- });
164
- ```
165
-
166
270
  ## Vitest Config
167
271
 
168
272
  ```typescript
@@ -191,3 +295,4 @@ export default defineConfig({
191
295
  - [ ] Waits for async with findBy/waitFor
192
296
  - [ ] Mocks external dependencies
193
297
  - [ ] Coverage reports generated
298
+ - [ ] NO E2E tests (that's QA domain)
@@ -0,0 +1,45 @@
1
+ # UI/UX Pro Max Skill
2
+
3
+ Source: https://github.com/nextlevelbuilder/ui-ux-pro-max-skill
4
+
5
+ ## Version Update
6
+
7
+ To update this skill to the latest version:
8
+
9
+ ```bash
10
+ cd /tmp
11
+ git clone --depth 1 https://github.com/nextlevelbuilder/ui-ux-pro-max-skill.git
12
+ cd ui-ux-pro-max-skill
13
+
14
+ # Update skill files
15
+ cp .claude/skills/ui-ux-pro-max/SKILL.md /path/to/project/.claude/skills/domain/frontend/ui-ux-pro-max/
16
+ cp src/ui-ux-pro-max/scripts/*.py /path/to/project/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/
17
+ cp src/ui-ux-pro-max/data/*.csv /path/to/project/.claude/skills/domain/frontend/ui-ux-pro-max/data/
18
+ cp -r src/ui-ux-pro-max/data/stacks/* /path/to/project/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/
19
+ ```
20
+
21
+ ## Requirements
22
+
23
+ - Python 3.x (for search script)
24
+
25
+ ## Usage
26
+
27
+ The skill activates automatically when working on UI/UX tasks. It provides:
28
+
29
+ - 67 UI styles (Glassmorphism, Claymorphism, Minimalism, etc.)
30
+ - 96 color palettes
31
+ - 57 font pairings
32
+ - 99 UX guidelines
33
+ - 25 chart types
34
+ - 100 industry-specific reasoning rules
35
+ - 13 tech stack guidelines (React, Next.js, Vue, Svelte, SwiftUI, etc.)
36
+
37
+ ## Search Script
38
+
39
+ ```bash
40
+ # Generate design system
41
+ python3 .claude/skills/domain/frontend/ui-ux-pro-max/scripts/search.py "fintech" --design-system
42
+
43
+ # Search by domain
44
+ python3 .claude/skills/domain/frontend/ui-ux-pro-max/scripts/search.py "glassmorphism" --domain style
45
+ ```