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
|
+
# Landing Page Example
|
|
2
|
+
|
|
3
|
+
## Input Prompt
|
|
4
|
+
"Create a modern SaaS landing page with hero section, features, pricing table, and testimonials"
|
|
5
|
+
|
|
6
|
+
## Output: React/TypeScript + Tailwind CSS
|
|
7
|
+
|
|
8
|
+
### app/page.tsx
|
|
9
|
+
```tsx
|
|
10
|
+
import { Hero } from '@/components/hero'
|
|
11
|
+
import { Features } from '@/components/features'
|
|
12
|
+
import { Pricing } from '@/components/pricing'
|
|
13
|
+
import { Testimonials } from '@/components/testimonials'
|
|
14
|
+
import { Footer } from '@/components/footer'
|
|
15
|
+
|
|
16
|
+
export default function LandingPage() {
|
|
17
|
+
return (
|
|
18
|
+
<div className="min-h-screen bg-white">
|
|
19
|
+
{/* Navigation */}
|
|
20
|
+
<nav className="sticky top-0 z-50 border-b border-zinc-200 bg-white/80 backdrop-blur-sm">
|
|
21
|
+
<div className="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between">
|
|
22
|
+
<div className="flex items-center gap-2">
|
|
23
|
+
<div className="w-8 h-8 bg-zinc-900 rounded-lg flex items-center justify-center">
|
|
24
|
+
<span className="text-white text-sm font-bold">S</span>
|
|
25
|
+
</div>
|
|
26
|
+
<span className="text-xl font-bold text-zinc-900">SaaS</span>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div className="hidden md:flex items-center gap-8">
|
|
30
|
+
<a href="#features" className="text-sm text-zinc-600 hover:text-zinc-900 transition-colors">
|
|
31
|
+
Features
|
|
32
|
+
</a>
|
|
33
|
+
<a href="#pricing" className="text-sm text-zinc-600 hover:text-zinc-900 transition-colors">
|
|
34
|
+
Pricing
|
|
35
|
+
</a>
|
|
36
|
+
<a href="#testimonials" className="text-sm text-zinc-600 hover:text-zinc-900 transition-colors">
|
|
37
|
+
Testimonials
|
|
38
|
+
</a>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div className="flex items-center gap-4">
|
|
42
|
+
<button className="hidden sm:inline-flex px-4 py-2 text-sm font-medium text-zinc-700 hover:text-zinc-900 transition-colors">
|
|
43
|
+
Sign in
|
|
44
|
+
</button>
|
|
45
|
+
<button className="px-4 py-2 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800 transition-colors">
|
|
46
|
+
Get started
|
|
47
|
+
</button>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</nav>
|
|
51
|
+
|
|
52
|
+
{/* Hero Section */}
|
|
53
|
+
<section className="py-24 px-6">
|
|
54
|
+
<div className="max-w-4xl mx-auto text-center">
|
|
55
|
+
<div className="inline-flex items-center gap-2 px-3 py-1 bg-zinc-100 rounded-full text-sm text-zinc-600 mb-6">
|
|
56
|
+
<span className="w-2 h-2 bg-green-500 rounded-full animate-pulse" />
|
|
57
|
+
Now in public beta
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<h1 className="text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight text-zinc-900">
|
|
61
|
+
Build faster with
|
|
62
|
+
<br />
|
|
63
|
+
<span className="text-zinc-500">modern tools</span>
|
|
64
|
+
</h1>
|
|
65
|
+
|
|
66
|
+
<p className="mt-6 text-lg text-zinc-500 max-w-2xl mx-auto">
|
|
67
|
+
The all-in-one platform that helps teams ship products faster.
|
|
68
|
+
Automate your workflow and focus on what matters.
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
<div className="mt-10 flex flex-col sm:flex-row items-center justify-center gap-4">
|
|
72
|
+
<button className="w-full sm:w-auto px-6 py-3 text-base font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800 transition-colors">
|
|
73
|
+
Start for free
|
|
74
|
+
</button>
|
|
75
|
+
<button className="w-full sm:w-auto px-6 py-3 text-base font-medium text-zinc-700 border border-zinc-300 rounded-lg hover:bg-zinc-50 transition-colors">
|
|
76
|
+
Watch demo
|
|
77
|
+
</button>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<p className="mt-4 text-sm text-zinc-500">
|
|
81
|
+
No credit card required • 14-day free trial
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
</section>
|
|
85
|
+
|
|
86
|
+
{/* Features Section */}
|
|
87
|
+
<section id="features" className="py-24 px-6 bg-zinc-50">
|
|
88
|
+
<div className="max-w-7xl mx-auto">
|
|
89
|
+
<div className="text-center max-w-2xl mx-auto">
|
|
90
|
+
<h2 className="text-3xl font-bold text-zinc-900">
|
|
91
|
+
Everything you need
|
|
92
|
+
</h2>
|
|
93
|
+
<p className="mt-4 text-lg text-zinc-500">
|
|
94
|
+
Powerful features to help you build and scale your product.
|
|
95
|
+
</p>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<div className="mt-16 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
|
99
|
+
{/* Feature 1 */}
|
|
100
|
+
<div className="bg-white p-6 rounded-xl border border-zinc-200">
|
|
101
|
+
<div className="w-10 h-10 bg-zinc-900 rounded-lg flex items-center justify-center">
|
|
102
|
+
<svg className="w-5 h-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
103
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
|
|
104
|
+
</svg>
|
|
105
|
+
</div>
|
|
106
|
+
<h3 className="mt-4 text-lg font-semibold text-zinc-900">Lightning Fast</h3>
|
|
107
|
+
<p className="mt-2 text-sm text-zinc-500">
|
|
108
|
+
Built for speed with modern technologies. Your users will love it.
|
|
109
|
+
</p>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
{/* Feature 2 */}
|
|
113
|
+
<div className="bg-white p-6 rounded-xl border border-zinc-200">
|
|
114
|
+
<div className="w-10 h-10 bg-zinc-900 rounded-lg flex items-center justify-center">
|
|
115
|
+
<svg className="w-5 h-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
116
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />
|
|
117
|
+
</svg>
|
|
118
|
+
</div>
|
|
119
|
+
<h3 className="mt-4 text-lg font-semibold text-zinc-900">Secure by Default</h3>
|
|
120
|
+
<p className="mt-2 text-sm text-zinc-500">
|
|
121
|
+
Enterprise-grade security out of the box. Sleep soundly.
|
|
122
|
+
</p>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
{/* Feature 3 */}
|
|
126
|
+
<div className="bg-white p-6 rounded-xl border border-zinc-200">
|
|
127
|
+
<div className="w-10 h-10 bg-zinc-900 rounded-lg flex items-center justify-center">
|
|
128
|
+
<svg className="w-5 h-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
129
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
|
|
130
|
+
</svg>
|
|
131
|
+
</div>
|
|
132
|
+
<h3 className="mt-4 text-lg font-semibold text-zinc-900">Analytics Built-in</h3>
|
|
133
|
+
<p className="mt-2 text-sm text-zinc-500">
|
|
134
|
+
Understand your users with powerful analytics. No setup required.
|
|
135
|
+
</p>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
</section>
|
|
140
|
+
|
|
141
|
+
{/* Pricing Section */}
|
|
142
|
+
<section id="pricing" className="py-24 px-6">
|
|
143
|
+
<div className="max-w-7xl mx-auto">
|
|
144
|
+
<div className="text-center max-w-2xl mx-auto">
|
|
145
|
+
<h2 className="text-3xl font-bold text-zinc-900">
|
|
146
|
+
Simple pricing
|
|
147
|
+
</h2>
|
|
148
|
+
<p className="mt-4 text-lg text-zinc-500">
|
|
149
|
+
Choose the plan that works for you.
|
|
150
|
+
</p>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div className="mt-16 grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
154
|
+
{/* Starter Plan */}
|
|
155
|
+
<div className="bg-white p-8 rounded-xl border border-zinc-200">
|
|
156
|
+
<h3 className="text-lg font-semibold text-zinc-900">Starter</h3>
|
|
157
|
+
<p className="mt-2 text-sm text-zinc-500">Perfect for small projects</p>
|
|
158
|
+
<div className="mt-6">
|
|
159
|
+
<span className="text-4xl font-bold text-zinc-900">$9</span>
|
|
160
|
+
<span className="text-zinc-500">/month</span>
|
|
161
|
+
</div>
|
|
162
|
+
<ul className="mt-8 space-y-4">
|
|
163
|
+
<li className="flex items-center gap-3 text-sm text-zinc-600">
|
|
164
|
+
<svg className="w-5 h-5 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
165
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
166
|
+
</svg>
|
|
167
|
+
1,000 API calls
|
|
168
|
+
</li>
|
|
169
|
+
<li className="flex items-center gap-3 text-sm text-zinc-600">
|
|
170
|
+
<svg className="w-5 h-5 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
171
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
172
|
+
</svg>
|
|
173
|
+
Basic analytics
|
|
174
|
+
</li>
|
|
175
|
+
<li className="flex items-center gap-3 text-sm text-zinc-600">
|
|
176
|
+
<svg className="w-5 h-5 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
177
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
178
|
+
</svg>
|
|
179
|
+
Email support
|
|
180
|
+
</li>
|
|
181
|
+
</ul>
|
|
182
|
+
<button className="mt-8 w-full py-2 text-sm font-medium text-zinc-700 border border-zinc-300 rounded-lg hover:bg-zinc-50 transition-colors">
|
|
183
|
+
Get started
|
|
184
|
+
</button>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
{/* Pro Plan */}
|
|
188
|
+
<div className="bg-zinc-900 p-8 rounded-xl text-white relative">
|
|
189
|
+
<div className="absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 bg-zinc-900 text-white text-xs font-medium rounded-full border border-zinc-700">
|
|
190
|
+
Most popular
|
|
191
|
+
</div>
|
|
192
|
+
<h3 className="text-lg font-semibold">Pro</h3>
|
|
193
|
+
<p className="mt-2 text-sm text-zinc-400">For growing teams</p>
|
|
194
|
+
<div className="mt-6">
|
|
195
|
+
<span className="text-4xl font-bold">$29</span>
|
|
196
|
+
<span className="text-zinc-400">/month</span>
|
|
197
|
+
</div>
|
|
198
|
+
<ul className="mt-8 space-y-4">
|
|
199
|
+
<li className="flex items-center gap-3 text-sm text-zinc-300">
|
|
200
|
+
<svg className="w-5 h-5 text-green-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
201
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
202
|
+
</svg>
|
|
203
|
+
10,000 API calls
|
|
204
|
+
</li>
|
|
205
|
+
<li className="flex items-center gap-3 text-sm text-zinc-300">
|
|
206
|
+
<svg className="w-5 h-5 text-green-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
207
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
208
|
+
</svg>
|
|
209
|
+
Advanced analytics
|
|
210
|
+
</li>
|
|
211
|
+
<li className="flex items-center gap-3 text-sm text-zinc-300">
|
|
212
|
+
<svg className="w-5 h-5 text-green-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
213
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
214
|
+
</svg>
|
|
215
|
+
Priority support
|
|
216
|
+
</li>
|
|
217
|
+
</ul>
|
|
218
|
+
<button className="mt-8 w-full py-2 text-sm font-medium text-zinc-900 bg-white rounded-lg hover:bg-zinc-100 transition-colors">
|
|
219
|
+
Get started
|
|
220
|
+
</button>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
{/* Enterprise Plan */}
|
|
224
|
+
<div className="bg-white p-8 rounded-xl border border-zinc-200">
|
|
225
|
+
<h3 className="text-lg font-semibold text-zinc-900">Enterprise</h3>
|
|
226
|
+
<p className="mt-2 text-sm text-zinc-500">For large organizations</p>
|
|
227
|
+
<div className="mt-6">
|
|
228
|
+
<span className="text-4xl font-bold text-zinc-900">$99</span>
|
|
229
|
+
<span className="text-zinc-500">/month</span>
|
|
230
|
+
</div>
|
|
231
|
+
<ul className="mt-8 space-y-4">
|
|
232
|
+
<li className="flex items-center gap-3 text-sm text-zinc-600">
|
|
233
|
+
<svg className="w-5 h-5 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
234
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
235
|
+
</svg>
|
|
236
|
+
Unlimited API calls
|
|
237
|
+
</li>
|
|
238
|
+
<li className="flex items-center gap-3 text-sm text-zinc-600">
|
|
239
|
+
<svg className="w-5 h-5 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
240
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
241
|
+
</svg>
|
|
242
|
+
Custom analytics
|
|
243
|
+
</li>
|
|
244
|
+
<li className="flex items-center gap-3 text-sm text-zinc-600">
|
|
245
|
+
<svg className="w-5 h-5 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
246
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
247
|
+
</svg>
|
|
248
|
+
24/7 support
|
|
249
|
+
</li>
|
|
250
|
+
</ul>
|
|
251
|
+
<button className="mt-8 w-full py-2 text-sm font-medium text-zinc-700 border border-zinc-300 rounded-lg hover:bg-zinc-50 transition-colors">
|
|
252
|
+
Contact sales
|
|
253
|
+
</button>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
</section>
|
|
258
|
+
|
|
259
|
+
{/* Testimonials Section */}
|
|
260
|
+
<section id="testimonials" className="py-24 px-6 bg-zinc-50">
|
|
261
|
+
<div className="max-w-7xl mx-auto">
|
|
262
|
+
<div className="text-center max-w-2xl mx-auto">
|
|
263
|
+
<h2 className="text-3xl font-bold text-zinc-900">
|
|
264
|
+
Loved by teams
|
|
265
|
+
</h2>
|
|
266
|
+
<p className="mt-4 text-lg text-zinc-500">
|
|
267
|
+
See what our customers have to say.
|
|
268
|
+
</p>
|
|
269
|
+
</div>
|
|
270
|
+
|
|
271
|
+
<div className="mt-16 grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
272
|
+
{/* Testimonial 1 */}
|
|
273
|
+
<div className="bg-white p-6 rounded-xl border border-zinc-200">
|
|
274
|
+
<div className="flex items-center gap-1 text-yellow-500">
|
|
275
|
+
{[...Array(5)].map((_, i) => (
|
|
276
|
+
<svg key={i} className="w-5 h-5 fill-current" viewBox="0 0 20 20">
|
|
277
|
+
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
|
|
278
|
+
</svg>
|
|
279
|
+
))}
|
|
280
|
+
</div>
|
|
281
|
+
<p className="mt-4 text-sm text-zinc-600">
|
|
282
|
+
"This product has transformed how we work. Highly recommended!"
|
|
283
|
+
</p>
|
|
284
|
+
<div className="mt-6 flex items-center gap-3">
|
|
285
|
+
<div className="w-10 h-10 bg-zinc-200 rounded-full flex items-center justify-center">
|
|
286
|
+
<span className="text-sm font-medium text-zinc-600">JD</span>
|
|
287
|
+
</div>
|
|
288
|
+
<div>
|
|
289
|
+
<p className="text-sm font-medium text-zinc-900">John Doe</p>
|
|
290
|
+
<p className="text-xs text-zinc-500">CEO, TechCorp</p>
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
{/* Testimonial 2 */}
|
|
296
|
+
<div className="bg-white p-6 rounded-xl border border-zinc-200">
|
|
297
|
+
<div className="flex items-center gap-1 text-yellow-500">
|
|
298
|
+
{[...Array(5)].map((_, i) => (
|
|
299
|
+
<svg key={i} className="w-5 h-5 fill-current" viewBox="0 0 20 20">
|
|
300
|
+
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
|
|
301
|
+
</svg>
|
|
302
|
+
))}
|
|
303
|
+
</div>
|
|
304
|
+
<p className="mt-4 text-sm text-zinc-600">
|
|
305
|
+
"Best investment we've made this year. The ROI is incredible."
|
|
306
|
+
</p>
|
|
307
|
+
<div className="mt-6 flex items-center gap-3">
|
|
308
|
+
<div className="w-10 h-10 bg-zinc-200 rounded-full flex items-center justify-center">
|
|
309
|
+
<span className="text-sm font-medium text-zinc-600">AS</span>
|
|
310
|
+
</div>
|
|
311
|
+
<div>
|
|
312
|
+
<p className="text-sm font-medium text-zinc-900">Alice Smith</p>
|
|
313
|
+
<p className="text-xs text-zinc-500">CTO, StartupXYZ</p>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
|
|
318
|
+
{/* Testimonial 3 */}
|
|
319
|
+
<div className="bg-white p-6 rounded-xl border border-zinc-200">
|
|
320
|
+
<div className="flex items-center gap-1 text-yellow-500">
|
|
321
|
+
{[...Array(5)].map((_, i) => (
|
|
322
|
+
<svg key={i} className="w-5 h-5 fill-current" viewBox="0 0 20 20">
|
|
323
|
+
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
|
|
324
|
+
</svg>
|
|
325
|
+
))}
|
|
326
|
+
</div>
|
|
327
|
+
<p className="mt-4 text-sm text-zinc-600">
|
|
328
|
+
"Finally, a tool that actually delivers on its promises."
|
|
329
|
+
</p>
|
|
330
|
+
<div className="mt-6 flex items-center gap-3">
|
|
331
|
+
<div className="w-10 h-10 bg-zinc-200 rounded-full flex items-center justify-center">
|
|
332
|
+
<span className="text-sm font-medium text-zinc-600">BJ</span>
|
|
333
|
+
</div>
|
|
334
|
+
<div>
|
|
335
|
+
<p className="text-sm font-medium text-zinc-900">Bob Johnson</p>
|
|
336
|
+
<p className="text-xs text-zinc-500">Founder, DevShop</p>
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
</div>
|
|
340
|
+
</div>
|
|
341
|
+
</div>
|
|
342
|
+
</section>
|
|
343
|
+
|
|
344
|
+
{/* Footer */}
|
|
345
|
+
<footer className="py-12 px-6 border-t border-zinc-200">
|
|
346
|
+
<div className="max-w-7xl mx-auto">
|
|
347
|
+
<div className="flex flex-col md:flex-row items-center justify-between gap-6">
|
|
348
|
+
<div className="flex items-center gap-2">
|
|
349
|
+
<div className="w-8 h-8 bg-zinc-900 rounded-lg flex items-center justify-center">
|
|
350
|
+
<span className="text-white text-sm font-bold">S</span>
|
|
351
|
+
</div>
|
|
352
|
+
<span className="text-xl font-bold text-zinc-900">SaaS</span>
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<div className="flex items-center gap-6">
|
|
356
|
+
<a href="#" className="text-sm text-zinc-500 hover:text-zinc-900 transition-colors">
|
|
357
|
+
Privacy
|
|
358
|
+
</a>
|
|
359
|
+
<a href="#" className="text-sm text-zinc-500 hover:text-zinc-900 transition-colors">
|
|
360
|
+
Terms
|
|
361
|
+
</a>
|
|
362
|
+
<a href="#" className="text-sm text-zinc-500 hover:text-zinc-900 transition-colors">
|
|
363
|
+
Contact
|
|
364
|
+
</a>
|
|
365
|
+
</div>
|
|
366
|
+
|
|
367
|
+
<p className="text-sm text-zinc-500">
|
|
368
|
+
© 2026 SaaS. All rights reserved.
|
|
369
|
+
</p>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</footer>
|
|
373
|
+
</div>
|
|
374
|
+
)
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## Why This Is Good
|
|
379
|
+
|
|
380
|
+
✅ **No AI Slop Patterns**
|
|
381
|
+
- No purple/blue gradients
|
|
382
|
+
- No centered everything
|
|
383
|
+
- No rainbow colors
|
|
384
|
+
- No oversized border radius
|
|
385
|
+
|
|
386
|
+
✅ **Vercel-Quality Design**
|
|
387
|
+
- Clean zinc color palette
|
|
388
|
+
- Proper typography hierarchy
|
|
389
|
+
- Consistent spacing
|
|
390
|
+
- Subtle borders and shadows
|
|
391
|
+
|
|
392
|
+
✅ **Production-Ready**
|
|
393
|
+
- Responsive design
|
|
394
|
+
- Proper semantic HTML
|
|
395
|
+
- Accessibility attributes
|
|
396
|
+
- TypeScript types
|