oxycode-skills 1.0.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/LICENSE +21 -0
- package/README.md +143 -0
- package/index.js +17 -0
- package/package.json +49 -0
- package/skills/anti-slop/README.md +106 -0
- package/skills/anti-slop/SKILL.md +311 -0
- package/skills/anti-slop/examples/before-after.md +380 -0
- package/skills/anti-slop/references/quality-rubric.md +313 -0
- package/skills/anti-slop/references/slop-patterns.md +433 -0
- package/skills/component-architect/README.md +186 -0
- package/skills/component-architect/SKILL.md +644 -0
- package/skills/component-architect/examples/component-patterns.md +569 -0
- package/skills/component-architect/references/atomic-design.md +516 -0
- package/skills/design-audit/README.md +114 -0
- package/skills/design-audit/SKILL.md +305 -0
- package/skills/design-audit/examples/audit-report.md +424 -0
- package/skills/design-audit/references/scoring-rubric.md +498 -0
- package/skills/design-md/README.md +106 -0
- package/skills/design-md/SKILL.md +262 -0
- package/skills/design-md/examples/bad-design.md +195 -0
- package/skills/design-md/examples/good-design.md +250 -0
- package/skills/design-md/references/design-md-spec.md +267 -0
- package/skills/design-md/scripts/validate.sh +134 -0
- package/skills/ui-builder/README.md +169 -0
- package/skills/ui-builder/SKILL.md +357 -0
- package/skills/ui-builder/examples/dashboard.md +323 -0
- package/skills/ui-builder/examples/landing-page.md +396 -0
- package/skills/ui-builder/references/component-patterns.md +396 -0
- package/skills/ui-builder/references/layout-system.md +423 -0
- package/skills/ui-builder/references/polish-checklist.md +221 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
# Layout System Reference
|
|
2
|
+
|
|
3
|
+
## Grid System
|
|
4
|
+
|
|
5
|
+
### Basic Grid
|
|
6
|
+
```tsx
|
|
7
|
+
// 2 columns
|
|
8
|
+
<div className="grid grid-cols-2 gap-4">
|
|
9
|
+
<div>Column 1</div>
|
|
10
|
+
<div>Column 2</div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
// 3 columns
|
|
14
|
+
<div className="grid grid-cols-3 gap-4">
|
|
15
|
+
<div>Column 1</div>
|
|
16
|
+
<div>Column 2</div>
|
|
17
|
+
<div>Column 3</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
// 4 columns
|
|
21
|
+
<div className="grid grid-cols-4 gap-4">
|
|
22
|
+
<div>Column 1</div>
|
|
23
|
+
<div>Column 2</div>
|
|
24
|
+
<div>Column 3</div>
|
|
25
|
+
<div>Column 4</div>
|
|
26
|
+
</div>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Responsive Grid
|
|
30
|
+
```tsx
|
|
31
|
+
// 1 col mobile, 2 col tablet, 3 col desktop
|
|
32
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
33
|
+
{items.map(item => (
|
|
34
|
+
<Card key={item.id} {...item} />
|
|
35
|
+
))}
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
// 1 col mobile, 2 col tablet, 4 col desktop
|
|
39
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
40
|
+
{items.map(item => (
|
|
41
|
+
<Card key={item.id} {...item} />
|
|
42
|
+
))}
|
|
43
|
+
</div>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Grid with Span
|
|
47
|
+
```tsx
|
|
48
|
+
// Full width + 2 columns
|
|
49
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-4">
|
|
50
|
+
<div className="lg:col-span-2">Main content</div>
|
|
51
|
+
<div>Sidebar</div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
// Full width + 3 columns
|
|
55
|
+
<div className="grid grid-cols-1 lg:grid-cols-4 gap-4">
|
|
56
|
+
<div className="lg:col-span-3">Main content</div>
|
|
57
|
+
<div>Sidebar</div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
// 2 columns + full width
|
|
61
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
62
|
+
<div>Column 1</div>
|
|
63
|
+
<div>Column 2</div>
|
|
64
|
+
<div className="lg:col-span-2">Full width</div>
|
|
65
|
+
</div>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Auto Grid
|
|
69
|
+
```tsx
|
|
70
|
+
// Auto-fit columns
|
|
71
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
|
|
72
|
+
{items.map(item => (
|
|
73
|
+
<Card key={item.id} {...item} />
|
|
74
|
+
))}
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
// Auto-fill with min-width
|
|
78
|
+
<div className="grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] gap-4">
|
|
79
|
+
{items.map(item => (
|
|
80
|
+
<Card key={item.id} {...item} />
|
|
81
|
+
))}
|
|
82
|
+
</div>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Flexbox Patterns
|
|
86
|
+
|
|
87
|
+
### Basic Flex
|
|
88
|
+
```tsx
|
|
89
|
+
// Horizontal
|
|
90
|
+
<div className="flex">
|
|
91
|
+
<div>Item 1</div>
|
|
92
|
+
<div>Item 2</div>
|
|
93
|
+
<div>Item 3</div>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
// Vertical
|
|
97
|
+
<div className="flex flex-col">
|
|
98
|
+
<div>Item 1</div>
|
|
99
|
+
<div>Item 2</div>
|
|
100
|
+
<div>Item 3</div>
|
|
101
|
+
</div>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Flex with Gap
|
|
105
|
+
```tsx
|
|
106
|
+
// Horizontal with gap
|
|
107
|
+
<div className="flex gap-4">
|
|
108
|
+
<div>Item 1</div>
|
|
109
|
+
<div>Item 2</div>
|
|
110
|
+
<div>Item 3</div>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
// Vertical with gap
|
|
114
|
+
<div className="flex flex-col gap-4">
|
|
115
|
+
<div>Item 1</div>
|
|
116
|
+
<div>Item 2</div>
|
|
117
|
+
<div>Item 3</div>
|
|
118
|
+
</div>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Flex Alignment
|
|
122
|
+
```tsx
|
|
123
|
+
// Center items
|
|
124
|
+
<div className="flex items-center justify-center">
|
|
125
|
+
<div>Centered content</div>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
// Space between
|
|
129
|
+
<div className="flex items-center justify-between">
|
|
130
|
+
<div>Left</div>
|
|
131
|
+
<div>Right</div>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
// Space around
|
|
135
|
+
<div className="flex items-center justify-around">
|
|
136
|
+
<div>Item 1</div>
|
|
137
|
+
<div>Item 2</div>
|
|
138
|
+
<div>Item 3</div>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
// Space evenly
|
|
142
|
+
<div className="flex items-center justify-evenly">
|
|
143
|
+
<div>Item 1</div>
|
|
144
|
+
<div>Item 2</div>
|
|
145
|
+
<div>Item 3</div>
|
|
146
|
+
</div>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Flex Wrap
|
|
150
|
+
```tsx
|
|
151
|
+
// Wrap items
|
|
152
|
+
<div className="flex flex-wrap gap-2">
|
|
153
|
+
{tags.map(tag => (
|
|
154
|
+
<span key={tag} className="px-3 py-1 bg-zinc-100 rounded-full text-sm">
|
|
155
|
+
{tag}
|
|
156
|
+
</span>
|
|
157
|
+
))}
|
|
158
|
+
</div>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Flex with Grow
|
|
162
|
+
```tsx
|
|
163
|
+
// Items grow to fill space
|
|
164
|
+
<div className="flex gap-4">
|
|
165
|
+
<div className="flex-1">Fixed width</div>
|
|
166
|
+
<div className="flex-1">Fixed width</div>
|
|
167
|
+
<div className="flex-1">Fixed width</div>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
// Different grow amounts
|
|
171
|
+
<div className="flex gap-4">
|
|
172
|
+
<div className="flex-1">1x</div>
|
|
173
|
+
<div className="flex-2">2x</div>
|
|
174
|
+
<div className="flex-1">1x</div>
|
|
175
|
+
</div>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Spacing Patterns
|
|
179
|
+
|
|
180
|
+
### Padding
|
|
181
|
+
```tsx
|
|
182
|
+
// All sides
|
|
183
|
+
<div className="p-4">All sides</div>
|
|
184
|
+
|
|
185
|
+
// Horizontal only
|
|
186
|
+
<div className="px-4">Horizontal</div>
|
|
187
|
+
|
|
188
|
+
// Vertical only
|
|
189
|
+
<div className="py-4">Vertical</div>
|
|
190
|
+
|
|
191
|
+
// Individual sides
|
|
192
|
+
<div className="pt-4 pr-4 pb-4 pl-4">Individual</div>
|
|
193
|
+
|
|
194
|
+
// Responsive padding
|
|
195
|
+
<div className="p-4 md:p-6 lg:p-8">Responsive</div>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Margin
|
|
199
|
+
```tsx
|
|
200
|
+
// All sides
|
|
201
|
+
<div className="m-4">All sides</div>
|
|
202
|
+
|
|
203
|
+
// Horizontal only
|
|
204
|
+
<div className="mx-auto">Centered</div>
|
|
205
|
+
|
|
206
|
+
// Vertical only
|
|
207
|
+
<div className="my-4">Vertical</div>
|
|
208
|
+
|
|
209
|
+
// Auto margins
|
|
210
|
+
<div className="ml-auto">Push right</div>
|
|
211
|
+
<div className="mr-auto">Push left</div>
|
|
212
|
+
<div className="mx-auto">Center</div>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Gap
|
|
216
|
+
```tsx
|
|
217
|
+
// Flex gap
|
|
218
|
+
<div className="flex gap-4">Flex gap</div>
|
|
219
|
+
|
|
220
|
+
// Grid gap
|
|
221
|
+
<div className="grid grid-cols-3 gap-4">Grid gap</div>
|
|
222
|
+
|
|
223
|
+
// Responsive gap
|
|
224
|
+
<div className="flex gap-2 md:gap-4 lg:gap-6">Responsive gap</div>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Sizing Patterns
|
|
228
|
+
|
|
229
|
+
### Width
|
|
230
|
+
```tsx
|
|
231
|
+
// Fixed width
|
|
232
|
+
<div className="w-64">Fixed 256px</div>
|
|
233
|
+
|
|
234
|
+
// Full width
|
|
235
|
+
<div className="w-full">Full width</div>
|
|
236
|
+
|
|
237
|
+
// Screen width
|
|
238
|
+
<div className="w-screen">Screen width</div>
|
|
239
|
+
|
|
240
|
+
// Min/max width
|
|
241
|
+
<div className="min-w-0 max-w-md">Min/max</div>
|
|
242
|
+
|
|
243
|
+
// Percentage
|
|
244
|
+
<div className="w-1/2">50%</div>
|
|
245
|
+
<div className="w-1/3">33%</div>
|
|
246
|
+
<div className="w-2/3">66%</div>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Height
|
|
250
|
+
```tsx
|
|
251
|
+
// Fixed height
|
|
252
|
+
<div className="h-64">Fixed 256px</div>
|
|
253
|
+
|
|
254
|
+
// Full height
|
|
255
|
+
<div className="h-full">Full height</div>
|
|
256
|
+
|
|
257
|
+
// Screen height
|
|
258
|
+
<div className="h-screen">Screen height</div>
|
|
259
|
+
|
|
260
|
+
// Min height
|
|
261
|
+
<div className="min-h-screen">Min screen</div>
|
|
262
|
+
|
|
263
|
+
// Max height
|
|
264
|
+
<div className="max-h-96">Max 384px</div>
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Responsive Sizing
|
|
268
|
+
```tsx
|
|
269
|
+
// Responsive width
|
|
270
|
+
<div className="w-full md:w-1/2 lg:w-1/3">Responsive width</div>
|
|
271
|
+
|
|
272
|
+
// Responsive height
|
|
273
|
+
<div className="h-64 md:h-96 lg:h-screen">Responsive height</div>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Common Layouts
|
|
277
|
+
|
|
278
|
+
### Holy Grail Layout
|
|
279
|
+
```tsx
|
|
280
|
+
<div className="flex flex-col min-h-screen">
|
|
281
|
+
<header className="h-16 border-b border-zinc-200">Header</header>
|
|
282
|
+
|
|
283
|
+
<div className="flex flex-1">
|
|
284
|
+
<aside className="w-64 border-r border-zinc-200">Sidebar</aside>
|
|
285
|
+
|
|
286
|
+
<main className="flex-1 p-6">Main content</main>
|
|
287
|
+
|
|
288
|
+
<aside className="w-64 border-l border-zinc-200">Right sidebar</aside>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<footer className="h-16 border-t border-zinc-200">Footer</footer>
|
|
292
|
+
</div>
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Sidebar Layout
|
|
296
|
+
```tsx
|
|
297
|
+
<div className="flex h-screen">
|
|
298
|
+
<aside className="w-64 border-r border-zinc-200">Sidebar</aside>
|
|
299
|
+
<main className="flex-1 p-6">Main content</main>
|
|
300
|
+
</div>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Content with Sidebar
|
|
304
|
+
```tsx
|
|
305
|
+
<div className="flex gap-6">
|
|
306
|
+
<main className="flex-1">Main content</main>
|
|
307
|
+
<aside className="w-80">Sidebar</aside>
|
|
308
|
+
</div>
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Two Column Layout
|
|
312
|
+
```tsx
|
|
313
|
+
<div className="grid grid-cols-2 gap-6">
|
|
314
|
+
<div>Column 1</div>
|
|
315
|
+
<div>Column 2</div>
|
|
316
|
+
</div>
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Three Column Layout
|
|
320
|
+
```tsx
|
|
321
|
+
<div className="grid grid-cols-3 gap-6">
|
|
322
|
+
<div>Column 1</div>
|
|
323
|
+
<div>Column 2</div>
|
|
324
|
+
<div>Column 3</div>
|
|
325
|
+
</div>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Dashboard Layout
|
|
329
|
+
```tsx
|
|
330
|
+
<div className="flex h-screen bg-zinc-50">
|
|
331
|
+
{/* Sidebar */}
|
|
332
|
+
<aside className="w-64 border-r border-zinc-200 bg-white">
|
|
333
|
+
<div className="h-16 flex items-center px-6 border-b border-zinc-200">
|
|
334
|
+
Logo
|
|
335
|
+
</div>
|
|
336
|
+
<nav className="p-4 space-y-1">
|
|
337
|
+
{/* Navigation items */}
|
|
338
|
+
</nav>
|
|
339
|
+
</aside>
|
|
340
|
+
|
|
341
|
+
{/* Main Content */}
|
|
342
|
+
<div className="flex-1 flex flex-col overflow-hidden">
|
|
343
|
+
<header className="h-16 border-b border-zinc-200 bg-white px-6 flex items-center">
|
|
344
|
+
Header
|
|
345
|
+
</header>
|
|
346
|
+
<main className="flex-1 overflow-auto p-6">
|
|
347
|
+
Content
|
|
348
|
+
</main>
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Landing Page Layout
|
|
354
|
+
```tsx
|
|
355
|
+
<div className="min-h-screen bg-white">
|
|
356
|
+
<nav className="sticky top-0 z-50 border-b border-zinc-200 bg-white/80 backdrop-blur-sm">
|
|
357
|
+
Navigation
|
|
358
|
+
</nav>
|
|
359
|
+
|
|
360
|
+
<section className="py-24 px-6">
|
|
361
|
+
Hero section
|
|
362
|
+
</section>
|
|
363
|
+
|
|
364
|
+
<section className="py-24 px-6 bg-zinc-50">
|
|
365
|
+
Features section
|
|
366
|
+
</section>
|
|
367
|
+
|
|
368
|
+
<section className="py-24 px-6">
|
|
369
|
+
Pricing section
|
|
370
|
+
</section>
|
|
371
|
+
|
|
372
|
+
<footer className="py-12 px-6 border-t border-zinc-200">
|
|
373
|
+
Footer
|
|
374
|
+
</footer>
|
|
375
|
+
</div>
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Auth Layout
|
|
379
|
+
```tsx
|
|
380
|
+
<div className="min-h-screen flex">
|
|
381
|
+
<div className="flex-1 flex items-center justify-center p-8">
|
|
382
|
+
Form
|
|
383
|
+
</div>
|
|
384
|
+
<div className="hidden lg:flex flex-1 bg-zinc-900 items-center justify-center">
|
|
385
|
+
Branding
|
|
386
|
+
</div>
|
|
387
|
+
</div>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## Responsive Patterns
|
|
391
|
+
|
|
392
|
+
### Mobile First
|
|
393
|
+
```tsx
|
|
394
|
+
// Base: 1 column
|
|
395
|
+
// md: 2 columns
|
|
396
|
+
// lg: 3 columns
|
|
397
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
398
|
+
{items.map(item => (
|
|
399
|
+
<Card key={item.id} {...item} />
|
|
400
|
+
))}
|
|
401
|
+
</div>
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Hide on Mobile
|
|
405
|
+
```tsx
|
|
406
|
+
// Hidden on mobile, visible on desktop
|
|
407
|
+
<div className="hidden md:block">Desktop only</div>
|
|
408
|
+
|
|
409
|
+
// Visible on mobile, hidden on desktop
|
|
410
|
+
<div className="block md:hidden">Mobile only</div>
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Responsive Padding
|
|
414
|
+
```tsx
|
|
415
|
+
// Small padding on mobile, larger on desktop
|
|
416
|
+
<div className="p-4 md:p-6 lg:p-8">Responsive padding</div>
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Responsive Text
|
|
420
|
+
```tsx
|
|
421
|
+
// Small text on mobile, larger on desktop
|
|
422
|
+
<h1 className="text-2xl md:text-3xl lg:text-4xl">Responsive heading</h1>
|
|
423
|
+
```
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Polish Checklist
|
|
2
|
+
|
|
3
|
+
## Visual Quality
|
|
4
|
+
|
|
5
|
+
### ✅ Color System
|
|
6
|
+
- [ ] Using design tokens (no hardcoded colors)
|
|
7
|
+
- [ ] Consistent color hierarchy (primary, secondary, neutral)
|
|
8
|
+
- [ ] Proper contrast ratios (4.5:1 for text)
|
|
9
|
+
- [ ] Semantic colors defined (success, warning, error)
|
|
10
|
+
- [ ] Dark/light theme support
|
|
11
|
+
|
|
12
|
+
### ✅ Typography
|
|
13
|
+
- [ ] Consistent font family
|
|
14
|
+
- [ ] Proper type scale (display, heading, body)
|
|
15
|
+
- [ ] Correct font weights
|
|
16
|
+
- [ ] Readable line heights (1.5 for body)
|
|
17
|
+
- [ ] No orphan headings
|
|
18
|
+
|
|
19
|
+
### ✅ Spacing
|
|
20
|
+
- [ ] Consistent spacing scale (4, 8, 16, 24, 32)
|
|
21
|
+
- [ ] Proper padding/margins
|
|
22
|
+
- [ ] Visual rhythm maintained
|
|
23
|
+
- [ ] No cramped elements
|
|
24
|
+
|
|
25
|
+
### ✅ Borders & Shadows
|
|
26
|
+
- [ ] Consistent border radius
|
|
27
|
+
- [ ] Subtle borders (zinc-200 or zinc-800)
|
|
28
|
+
- [ ] Appropriate shadows for elevation
|
|
29
|
+
- [ ] No harsh outlines
|
|
30
|
+
|
|
31
|
+
## Layout Quality
|
|
32
|
+
|
|
33
|
+
### ✅ Grid System
|
|
34
|
+
- [ ] Responsive grid (mobile-first)
|
|
35
|
+
- [ ] Consistent gutters
|
|
36
|
+
- [ ] Proper column spans
|
|
37
|
+
- [ ] No overflow issues
|
|
38
|
+
|
|
39
|
+
### ✅ Flexbox
|
|
40
|
+
- [ ] Proper alignment
|
|
41
|
+
- [ ] Consistent gaps
|
|
42
|
+
- [ ] No stretching issues
|
|
43
|
+
- [ ] Proper wrapping
|
|
44
|
+
|
|
45
|
+
### ✅ Responsive Design
|
|
46
|
+
- [ ] Mobile-first approach
|
|
47
|
+
- [ ] Proper breakpoints
|
|
48
|
+
- [ ] No horizontal scroll
|
|
49
|
+
- [ ] Touch-friendly targets (44px min)
|
|
50
|
+
|
|
51
|
+
## Component Quality
|
|
52
|
+
|
|
53
|
+
### ✅ Buttons
|
|
54
|
+
- [ ] Proper padding (12px 24px)
|
|
55
|
+
- [ ] Consistent border radius
|
|
56
|
+
- [ ] Hover states
|
|
57
|
+
- [ ] Focus states
|
|
58
|
+
- [ ] Disabled states
|
|
59
|
+
- [ ] Loading states
|
|
60
|
+
|
|
61
|
+
### ✅ Inputs
|
|
62
|
+
- [ ] Proper padding
|
|
63
|
+
- [ ] Focus states
|
|
64
|
+
- [ ] Error states
|
|
65
|
+
- [ ] Helper text
|
|
66
|
+
- [ ] Labels
|
|
67
|
+
|
|
68
|
+
### ✅ Cards
|
|
69
|
+
- [ ] Consistent padding
|
|
70
|
+
- [ ] Proper shadows
|
|
71
|
+
- [ ] Hover effects (if interactive)
|
|
72
|
+
- [ ] No content overflow
|
|
73
|
+
|
|
74
|
+
### ✅ Tables
|
|
75
|
+
- [ ] Proper header styling
|
|
76
|
+
- [ ] Row hover effects
|
|
77
|
+
- [ ] Responsive (horizontal scroll on mobile)
|
|
78
|
+
- [ ] Proper alignment
|
|
79
|
+
|
|
80
|
+
## Accessibility
|
|
81
|
+
|
|
82
|
+
### ✅ Semantic HTML
|
|
83
|
+
- [ ] Using proper HTML elements (section, article, nav, etc.)
|
|
84
|
+
- [ ] Proper heading hierarchy (h1 → h2 → h3)
|
|
85
|
+
- [ ] Lists for list content
|
|
86
|
+
- [ ] Tables for tabular data
|
|
87
|
+
|
|
88
|
+
### ✅ ARIA Attributes
|
|
89
|
+
- [ ] aria-label for icon buttons
|
|
90
|
+
- [ ] aria-describedby for helper text
|
|
91
|
+
- [ ] aria-expanded for dropdowns
|
|
92
|
+
- [ ] aria-hidden for decorative elements
|
|
93
|
+
|
|
94
|
+
### ✅ Keyboard Navigation
|
|
95
|
+
- [ ] Focusable elements
|
|
96
|
+
- [ ] Logical tab order
|
|
97
|
+
- [ ] Skip navigation link
|
|
98
|
+
- [ ] Escape to close modals
|
|
99
|
+
|
|
100
|
+
### ✅ Color Contrast
|
|
101
|
+
- [ ] Text: 4.5:1 minimum
|
|
102
|
+
- [ ] Large text: 3:1 minimum
|
|
103
|
+
- [ ] UI components: 3:1 minimum
|
|
104
|
+
- [ ] Focus indicators: 3:1 minimum
|
|
105
|
+
|
|
106
|
+
## Performance
|
|
107
|
+
|
|
108
|
+
### ✅ Images
|
|
109
|
+
- [ ] Proper sizing
|
|
110
|
+
- [ ] Lazy loading
|
|
111
|
+
- [ ] Alt text
|
|
112
|
+
- [ ] Responsive images
|
|
113
|
+
|
|
114
|
+
### ✅ Bundle Size
|
|
115
|
+
- [ ] No unnecessary imports
|
|
116
|
+
- [ ] Tree shaking enabled
|
|
117
|
+
- [ ] Code splitting
|
|
118
|
+
- [ ] Dynamic imports
|
|
119
|
+
|
|
120
|
+
### ✅ Rendering
|
|
121
|
+
- [ ] No layout shifts
|
|
122
|
+
- [ ] Proper loading states
|
|
123
|
+
- [ ] Skeleton screens
|
|
124
|
+
- [ ] Error boundaries
|
|
125
|
+
|
|
126
|
+
## Code Quality
|
|
127
|
+
|
|
128
|
+
### ✅ TypeScript
|
|
129
|
+
- [ ] Proper types
|
|
130
|
+
- [ ] No `any` types
|
|
131
|
+
- [ ] Interface definitions
|
|
132
|
+
- [ ] Prop types
|
|
133
|
+
|
|
134
|
+
### ✅ Component Structure
|
|
135
|
+
- [ ] Single responsibility
|
|
136
|
+
- [ ] Proper composition
|
|
137
|
+
- [ ] Reusable components
|
|
138
|
+
- [ ] No prop drilling
|
|
139
|
+
|
|
140
|
+
### ✅ Styling
|
|
141
|
+
- [ ] Using design tokens
|
|
142
|
+
- [ ] No inline styles
|
|
143
|
+
- [ ] Consistent class names
|
|
144
|
+
- [ ] No !important
|
|
145
|
+
|
|
146
|
+
### ✅ State Management
|
|
147
|
+
- [ ] Local state for UI
|
|
148
|
+
- [ ] Global state for shared data
|
|
149
|
+
- [ ] Proper loading states
|
|
150
|
+
- [ ] Error handling
|
|
151
|
+
|
|
152
|
+
## Anti-Patterns Check
|
|
153
|
+
|
|
154
|
+
### ❌ AI Slop Patterns
|
|
155
|
+
- [ ] No purple/blue gradients
|
|
156
|
+
- [ ] No centered everything
|
|
157
|
+
- [ ] No rainbow colors
|
|
158
|
+
- [ ] No oversized border radius
|
|
159
|
+
- [ ] No Inter font default
|
|
160
|
+
- [ ] No generic card layouts
|
|
161
|
+
|
|
162
|
+
### ❌ Common Mistakes
|
|
163
|
+
- [ ] No hardcoded colors
|
|
164
|
+
- [ ] No inline styles
|
|
165
|
+
- [ ] No !important
|
|
166
|
+
- [ ] No vague class names
|
|
167
|
+
- [ ] No deep nesting
|
|
168
|
+
|
|
169
|
+
## Final Polish
|
|
170
|
+
|
|
171
|
+
### ✅ Visual Polish
|
|
172
|
+
- [ ] Consistent alignment
|
|
173
|
+
- [ ] Proper whitespace
|
|
174
|
+
- [ ] Visual hierarchy clear
|
|
175
|
+
- [ ] No orphan elements
|
|
176
|
+
|
|
177
|
+
### ✅ Interaction Polish
|
|
178
|
+
- [ ] Hover states
|
|
179
|
+
- [ ] Focus states
|
|
180
|
+
- [ ] Active states
|
|
181
|
+
- [ ] Transitions (subtle, fast)
|
|
182
|
+
|
|
183
|
+
### ✅ Content Polish
|
|
184
|
+
- [ ] No lorem ipsum
|
|
185
|
+
- [ ] Real content examples
|
|
186
|
+
- [ ] Proper copy
|
|
187
|
+
- [ ] No typos
|
|
188
|
+
|
|
189
|
+
## Testing Checklist
|
|
190
|
+
|
|
191
|
+
### ✅ Cross-Browser
|
|
192
|
+
- [ ] Chrome
|
|
193
|
+
- [ ] Firefox
|
|
194
|
+
- [ ] Safari
|
|
195
|
+
- [ ] Edge
|
|
196
|
+
|
|
197
|
+
### ✅ Responsive
|
|
198
|
+
- [ ] Mobile (375px)
|
|
199
|
+
- [ ] Tablet (768px)
|
|
200
|
+
- [ ] Desktop (1024px)
|
|
201
|
+
- [ ] Large desktop (1280px)
|
|
202
|
+
|
|
203
|
+
### ✅ Accessibility
|
|
204
|
+
- [ ] Screen reader test
|
|
205
|
+
- [ ] Keyboard navigation test
|
|
206
|
+
- [ ] Color contrast test
|
|
207
|
+
- [ ] Zoom test (200%)
|
|
208
|
+
|
|
209
|
+
## Documentation
|
|
210
|
+
|
|
211
|
+
### ✅ Component Docs
|
|
212
|
+
- [ ] Usage examples
|
|
213
|
+
- [ ] Props documentation
|
|
214
|
+
- [ ] Variants explained
|
|
215
|
+
- [ ] Accessibility notes
|
|
216
|
+
|
|
217
|
+
### ✅ Design System Docs
|
|
218
|
+
- [ ] Design tokens defined
|
|
219
|
+
- [ ] Component patterns
|
|
220
|
+
- [ ] Layout guidelines
|
|
221
|
+
- [ ] Responsive breakpoints
|