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,396 @@
|
|
|
1
|
+
# Component Patterns Reference
|
|
2
|
+
|
|
3
|
+
## Base Patterns
|
|
4
|
+
|
|
5
|
+
### 1. Container Pattern
|
|
6
|
+
```tsx
|
|
7
|
+
// Standard container with max-width and padding
|
|
8
|
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
9
|
+
{children}
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
// Full-width container
|
|
13
|
+
<div className="w-full px-4 sm:px-6 lg:px-8">
|
|
14
|
+
{children}
|
|
15
|
+
</div>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. Card Pattern
|
|
19
|
+
```tsx
|
|
20
|
+
// Basic card
|
|
21
|
+
<div className="bg-white border border-zinc-200 rounded-lg p-6 shadow-sm">
|
|
22
|
+
{children}
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
// Card with hover effect
|
|
26
|
+
<div className="bg-white border border-zinc-200 rounded-lg p-6 shadow-sm hover:shadow-md transition-shadow">
|
|
27
|
+
{children}
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
// Interactive card
|
|
31
|
+
<button className="w-full text-left bg-white border border-zinc-200 rounded-lg p-6 shadow-sm hover:border-zinc-300 transition-colors">
|
|
32
|
+
{children}
|
|
33
|
+
</button>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. Button Pattern
|
|
37
|
+
```tsx
|
|
38
|
+
// Primary button
|
|
39
|
+
<button className="inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800 transition-colors">
|
|
40
|
+
{children}
|
|
41
|
+
</button>
|
|
42
|
+
|
|
43
|
+
// Secondary button
|
|
44
|
+
<button className="inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-zinc-900 bg-zinc-100 rounded-lg hover:bg-zinc-200 transition-colors">
|
|
45
|
+
{children}
|
|
46
|
+
</button>
|
|
47
|
+
|
|
48
|
+
// Ghost button
|
|
49
|
+
<button className="inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-zinc-600 hover:text-zinc-900 hover:bg-zinc-100 rounded-lg transition-colors">
|
|
50
|
+
{children}
|
|
51
|
+
</button>
|
|
52
|
+
|
|
53
|
+
// Button with icon
|
|
54
|
+
<button className="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800 transition-colors">
|
|
55
|
+
<Icon className="w-4 h-4" />
|
|
56
|
+
{children}
|
|
57
|
+
</button>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4. Input Pattern
|
|
61
|
+
```tsx
|
|
62
|
+
// Text input
|
|
63
|
+
<input
|
|
64
|
+
type="text"
|
|
65
|
+
className="w-full px-3 py-2 text-sm border border-zinc-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-zinc-500 focus:border-transparent"
|
|
66
|
+
placeholder="Enter text..."
|
|
67
|
+
/>
|
|
68
|
+
|
|
69
|
+
// Input with label
|
|
70
|
+
<div className="space-y-1">
|
|
71
|
+
<label className="text-sm font-medium text-zinc-700">
|
|
72
|
+
Email
|
|
73
|
+
</label>
|
|
74
|
+
<input
|
|
75
|
+
type="email"
|
|
76
|
+
className="w-full px-3 py-2 text-sm border border-zinc-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-zinc-500 focus:border-transparent"
|
|
77
|
+
placeholder="you@example.com"
|
|
78
|
+
/>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
// Input with error
|
|
82
|
+
<div className="space-y-1">
|
|
83
|
+
<label className="text-sm font-medium text-zinc-700">
|
|
84
|
+
Email
|
|
85
|
+
</label>
|
|
86
|
+
<input
|
|
87
|
+
type="email"
|
|
88
|
+
className="w-full px-3 py-2 text-sm border border-red-500 rounded-lg focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-transparent"
|
|
89
|
+
placeholder="you@example.com"
|
|
90
|
+
/>
|
|
91
|
+
<p className="text-xs text-red-500">Invalid email address</p>
|
|
92
|
+
</div>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 5. Badge Pattern
|
|
96
|
+
```tsx
|
|
97
|
+
// Default badge
|
|
98
|
+
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-zinc-100 text-zinc-800">
|
|
99
|
+
{children}
|
|
100
|
+
</span>
|
|
101
|
+
|
|
102
|
+
// Success badge
|
|
103
|
+
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">
|
|
104
|
+
Active
|
|
105
|
+
</span>
|
|
106
|
+
|
|
107
|
+
// Warning badge
|
|
108
|
+
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800">
|
|
109
|
+
Pending
|
|
110
|
+
</span>
|
|
111
|
+
|
|
112
|
+
// Error badge
|
|
113
|
+
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-800">
|
|
114
|
+
Failed
|
|
115
|
+
</span>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 6. Avatar Pattern
|
|
119
|
+
```tsx
|
|
120
|
+
// Simple avatar
|
|
121
|
+
<div className="w-10 h-10 rounded-full bg-zinc-200 flex items-center justify-center">
|
|
122
|
+
<span className="text-sm font-medium text-zinc-600">JD</span>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
// Avatar with image
|
|
126
|
+
<img
|
|
127
|
+
src="/avatar.jpg"
|
|
128
|
+
alt="User avatar"
|
|
129
|
+
className="w-10 h-10 rounded-full object-cover"
|
|
130
|
+
/>
|
|
131
|
+
|
|
132
|
+
// Avatar group
|
|
133
|
+
<div className="flex -space-x-2">
|
|
134
|
+
<img src="/avatar1.jpg" className="w-8 h-8 rounded-full border-2 border-white" />
|
|
135
|
+
<img src="/avatar2.jpg" className="w-8 h-8 rounded-full border-2 border-white" />
|
|
136
|
+
<img src="/avatar3.jpg" className="w-8 h-8 rounded-full border-2 border-white" />
|
|
137
|
+
</div>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 7. Table Pattern
|
|
141
|
+
```tsx
|
|
142
|
+
// Basic table
|
|
143
|
+
<div className="overflow-x-auto">
|
|
144
|
+
<table className="w-full text-sm text-left">
|
|
145
|
+
<thead className="text-xs text-zinc-500 uppercase bg-zinc-50">
|
|
146
|
+
<tr>
|
|
147
|
+
<th className="px-6 py-3">Name</th>
|
|
148
|
+
<th className="px-6 py-3">Status</th>
|
|
149
|
+
<th className="px-6 py-3">Role</th>
|
|
150
|
+
</tr>
|
|
151
|
+
</thead>
|
|
152
|
+
<tbody className="divide-y divide-zinc-200">
|
|
153
|
+
<tr className="hover:bg-zinc-50">
|
|
154
|
+
<td className="px-6 py-4 font-medium">John Doe</td>
|
|
155
|
+
<td className="px-6 py-4">
|
|
156
|
+
<span className="px-2 py-1 text-xs font-medium bg-green-100 text-green-800 rounded-full">
|
|
157
|
+
Active
|
|
158
|
+
</span>
|
|
159
|
+
</td>
|
|
160
|
+
<td className="px-6 py-4 text-zinc-500">Admin</td>
|
|
161
|
+
</tr>
|
|
162
|
+
</tbody>
|
|
163
|
+
</table>
|
|
164
|
+
</div>
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 8. Modal Pattern
|
|
168
|
+
```tsx
|
|
169
|
+
// Modal overlay
|
|
170
|
+
<div className="fixed inset-0 z-50 overflow-y-auto">
|
|
171
|
+
<div className="flex min-h-full items-center justify-center p-4">
|
|
172
|
+
{/* Backdrop */}
|
|
173
|
+
<div className="fixed inset-0 bg-black/50 transition-opacity" />
|
|
174
|
+
|
|
175
|
+
{/* Modal content */}
|
|
176
|
+
<div className="relative w-full max-w-md bg-white rounded-xl shadow-xl">
|
|
177
|
+
{/* Header */}
|
|
178
|
+
<div className="flex items-center justify-between p-6 border-b border-zinc-200">
|
|
179
|
+
<h2 className="text-lg font-semibold">Modal Title</h2>
|
|
180
|
+
<button className="p-1 hover:bg-zinc-100 rounded-lg">
|
|
181
|
+
<X className="w-5 h-5" />
|
|
182
|
+
</button>
|
|
183
|
+
</div>
|
|
184
|
+
|
|
185
|
+
{/* Body */}
|
|
186
|
+
<div className="p-6">
|
|
187
|
+
<p className="text-sm text-zinc-500">Modal content goes here.</p>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
{/* Footer */}
|
|
191
|
+
<div className="flex items-center justify-end gap-3 p-6 border-t border-zinc-200">
|
|
192
|
+
<button className="px-4 py-2 text-sm font-medium text-zinc-700 hover:bg-zinc-100 rounded-lg">
|
|
193
|
+
Cancel
|
|
194
|
+
</button>
|
|
195
|
+
<button className="px-4 py-2 text-sm font-medium text-white bg-zinc-900 hover:bg-zinc-800 rounded-lg">
|
|
196
|
+
Confirm
|
|
197
|
+
</button>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Layout Patterns
|
|
205
|
+
|
|
206
|
+
### 1. Dashboard Layout
|
|
207
|
+
```tsx
|
|
208
|
+
<div className="flex h-screen bg-zinc-50">
|
|
209
|
+
{/* Sidebar */}
|
|
210
|
+
<aside className="w-64 border-r border-zinc-200 bg-white">
|
|
211
|
+
{/* Logo */}
|
|
212
|
+
<div className="h-16 flex items-center px-6 border-b border-zinc-200">
|
|
213
|
+
<span className="text-xl font-bold">Logo</span>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
{/* Navigation */}
|
|
217
|
+
<nav className="p-4 space-y-1">
|
|
218
|
+
<a href="/dashboard" className="flex items-center gap-3 px-3 py-2 text-sm font-medium text-zinc-900 bg-zinc-100 rounded-lg">
|
|
219
|
+
<Home className="w-5 h-5" />
|
|
220
|
+
Dashboard
|
|
221
|
+
</a>
|
|
222
|
+
<a href="/analytics" className="flex items-center gap-3 px-3 py-2 text-sm font-medium text-zinc-600 hover:text-zinc-900 hover:bg-zinc-50 rounded-lg">
|
|
223
|
+
<BarChart className="w-5 h-5" />
|
|
224
|
+
Analytics
|
|
225
|
+
</a>
|
|
226
|
+
</nav>
|
|
227
|
+
</aside>
|
|
228
|
+
|
|
229
|
+
{/* Main Content */}
|
|
230
|
+
<div className="flex-1 flex flex-col overflow-hidden">
|
|
231
|
+
{/* Header */}
|
|
232
|
+
<header className="h-16 border-b border-zinc-200 bg-white flex items-center justify-between px-6">
|
|
233
|
+
<h1 className="text-lg font-semibold">Dashboard</h1>
|
|
234
|
+
<div className="flex items-center gap-4">
|
|
235
|
+
<button className="p-2 hover:bg-zinc-100 rounded-lg">
|
|
236
|
+
<Bell className="w-5 h-5" />
|
|
237
|
+
</button>
|
|
238
|
+
<img src="/avatar.jpg" className="w-8 h-8 rounded-full" />
|
|
239
|
+
</div>
|
|
240
|
+
</header>
|
|
241
|
+
|
|
242
|
+
{/* Content */}
|
|
243
|
+
<main className="flex-1 overflow-auto p-6">
|
|
244
|
+
{children}
|
|
245
|
+
</main>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 2. Landing Page Layout
|
|
251
|
+
```tsx
|
|
252
|
+
<div className="min-h-screen bg-white">
|
|
253
|
+
{/* Navigation */}
|
|
254
|
+
<nav className="sticky top-0 z-50 border-b border-zinc-200 bg-white/80 backdrop-blur-sm">
|
|
255
|
+
<div className="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between">
|
|
256
|
+
<span className="text-xl font-bold">Brand</span>
|
|
257
|
+
<div className="flex items-center gap-6">
|
|
258
|
+
<a href="#features" className="text-sm text-zinc-600 hover:text-zinc-900">Features</a>
|
|
259
|
+
<a href="#pricing" className="text-sm text-zinc-600 hover:text-zinc-900">Pricing</a>
|
|
260
|
+
<button className="px-4 py-2 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800">
|
|
261
|
+
Get Started
|
|
262
|
+
</button>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
</nav>
|
|
266
|
+
|
|
267
|
+
{/* Hero */}
|
|
268
|
+
<section className="py-24 px-6">
|
|
269
|
+
<div className="max-w-4xl mx-auto text-center">
|
|
270
|
+
<h1 className="text-5xl font-bold tracking-tight">Headline</h1>
|
|
271
|
+
<p className="mt-6 text-xl text-zinc-500">Subheadline</p>
|
|
272
|
+
<div className="mt-8 flex items-center justify-center gap-4">
|
|
273
|
+
<button className="px-6 py-3 text-base font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800">
|
|
274
|
+
Get Started
|
|
275
|
+
</button>
|
|
276
|
+
<button className="px-6 py-3 text-base font-medium text-zinc-700 border border-zinc-300 rounded-lg hover:bg-zinc-50">
|
|
277
|
+
Learn More
|
|
278
|
+
</button>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</section>
|
|
282
|
+
|
|
283
|
+
{/* Features */}
|
|
284
|
+
<section className="py-24 px-6 bg-zinc-50">
|
|
285
|
+
<div className="max-w-7xl mx-auto">
|
|
286
|
+
<h2 className="text-3xl font-bold text-center">Features</h2>
|
|
287
|
+
<div className="mt-12 grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
288
|
+
{/* Feature cards */}
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
</section>
|
|
292
|
+
|
|
293
|
+
{/* Footer */}
|
|
294
|
+
<footer className="py-12 px-6 border-t border-zinc-200">
|
|
295
|
+
<div className="max-w-7xl mx-auto text-center text-sm text-zinc-500">
|
|
296
|
+
© 2026 Brand. All rights reserved.
|
|
297
|
+
</div>
|
|
298
|
+
</footer>
|
|
299
|
+
</div>
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 3. Auth Layout
|
|
303
|
+
```tsx
|
|
304
|
+
<div className="min-h-screen flex">
|
|
305
|
+
{/* Left side - Form */}
|
|
306
|
+
<div className="flex-1 flex items-center justify-center p-8">
|
|
307
|
+
<div className="w-full max-w-sm space-y-8">
|
|
308
|
+
<div>
|
|
309
|
+
<h1 className="text-2xl font-bold">Welcome back</h1>
|
|
310
|
+
<p className="mt-2 text-sm text-zinc-500">
|
|
311
|
+
Sign in to your account
|
|
312
|
+
</p>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<form className="space-y-4">
|
|
316
|
+
<div className="space-y-1">
|
|
317
|
+
<label className="text-sm font-medium text-zinc-700">Email</label>
|
|
318
|
+
<input
|
|
319
|
+
type="email"
|
|
320
|
+
className="w-full px-3 py-2 border border-zinc-300 rounded-lg focus:ring-2 focus:ring-zinc-500 focus:border-transparent"
|
|
321
|
+
/>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
<div className="space-y-1">
|
|
325
|
+
<label className="text-sm font-medium text-zinc-700">Password</label>
|
|
326
|
+
<input
|
|
327
|
+
type="password"
|
|
328
|
+
className="w-full px-3 py-2 border border-zinc-300 rounded-lg focus:ring-2 focus:ring-zinc-500 focus:border-transparent"
|
|
329
|
+
/>
|
|
330
|
+
</div>
|
|
331
|
+
|
|
332
|
+
<button className="w-full py-2 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800">
|
|
333
|
+
Sign In
|
|
334
|
+
</button>
|
|
335
|
+
</form>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
|
|
339
|
+
{/* Right side - Image/Brand */}
|
|
340
|
+
<div className="hidden lg:flex flex-1 bg-zinc-900 items-center justify-center">
|
|
341
|
+
<div className="text-center text-white">
|
|
342
|
+
<h2 className="text-3xl font-bold">Brand</h2>
|
|
343
|
+
<p className="mt-2 text-zinc-400">Tagline</p>
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## Utility Patterns
|
|
350
|
+
|
|
351
|
+
### 1. Responsive Grid
|
|
352
|
+
```tsx
|
|
353
|
+
// 2 columns on mobile, 3 on tablet, 4 on desktop
|
|
354
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
355
|
+
{items.map(item => (
|
|
356
|
+
<Card key={item.id} {...item} />
|
|
357
|
+
))}
|
|
358
|
+
</div>
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### 2. Stack Pattern
|
|
362
|
+
```tsx
|
|
363
|
+
// Vertical stack with gap
|
|
364
|
+
<div className="space-y-4">
|
|
365
|
+
{items.map(item => (
|
|
366
|
+
<div key={item.id}>{item.name}</div>
|
|
367
|
+
))}
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
// Horizontal stack with gap
|
|
371
|
+
<div className="flex items-center gap-4">
|
|
372
|
+
<Button>Cancel</Button>
|
|
373
|
+
<Button>Confirm</Button>
|
|
374
|
+
</div>
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### 3. Center Pattern
|
|
378
|
+
```tsx
|
|
379
|
+
// Center both horizontally and vertically
|
|
380
|
+
<div className="flex items-center justify-center min-h-screen">
|
|
381
|
+
{children}
|
|
382
|
+
</div>
|
|
383
|
+
|
|
384
|
+
// Center horizontally only
|
|
385
|
+
<div className="flex justify-center">
|
|
386
|
+
{children}
|
|
387
|
+
</div>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### 4. Cover Pattern
|
|
391
|
+
```tsx
|
|
392
|
+
// Full cover
|
|
393
|
+
<div className="min-h-screen flex items-center justify-center">
|
|
394
|
+
{children}
|
|
395
|
+
</div>
|
|
396
|
+
```
|