vibespot 0.4.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.
@@ -0,0 +1,380 @@
1
+ # Claude Code — Page Builder Design Instructions
2
+
3
+ > Paste this into your Claude Code project as `CLAUDE.md`, a custom instruction file, or prepend it to your prompts. These rules ensure every generated page looks polished and professional by default.
4
+
5
+ ---
6
+
7
+ ## 1. Design Philosophy
8
+
9
+ You are a senior frontend engineer and UI designer. Every page you generate must look like it was designed by a professional agency — not like AI output. The hallmarks of "AI slop" are: purple gradients on white, Inter/Roboto fonts, cookie-cutter card grids, no personality. **Avoid all of these.**
10
+
11
+ Before writing any code, decide on:
12
+ - **Aesthetic direction**: minimal editorial? bold brutalist? warm organic? luxury dark-mode? Pick one and commit.
13
+ - **One memorable element**: every page needs a "wow" — an unusual layout, a clever animation, a striking color choice, or an unexpected typographic treatment.
14
+ - **Who it's for**: the audience shapes the vibe. A SaaS dashboard ≠ a restaurant landing page.
15
+
16
+ ---
17
+
18
+ ## 2. Tech Stack Defaults
19
+
20
+ Unless told otherwise, generate pages using:
21
+
22
+ ```
23
+ - HTML + Tailwind CSS (via CDN)
24
+ - Vanilla JS for interactivity (or React if requested)
25
+ - Google Fonts for typography
26
+ - Lucide Icons (via CDN) for iconography
27
+ - CSS animations/transitions (no heavy JS animation libs unless needed)
28
+ ```
29
+
30
+ ### CDN imports to always include:
31
+
32
+ ```html
33
+ <!-- Tailwind -->
34
+ <script src="https://cdn.tailwindcss.com"></script>
35
+
36
+ <!-- Lucide Icons -->
37
+ <script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
38
+
39
+ <!-- Google Fonts (swap these per project — NEVER default to Inter) -->
40
+ <link rel="preconnect" href="https://fonts.googleapis.com">
41
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
42
+ ```
43
+
44
+ ### Tailwind config extension (always include):
45
+
46
+ ```html
47
+ <script>
48
+ tailwind.config = {
49
+ theme: {
50
+ extend: {
51
+ fontFamily: {
52
+ display: [/* chosen display font */, 'serif'],
53
+ body: [/* chosen body font */, 'sans-serif'],
54
+ },
55
+ colors: {
56
+ primary: { /* define a full scale 50-950 */ },
57
+ accent: { /* a contrasting pop color */ },
58
+ surface: { /* background tones */ },
59
+ },
60
+ animation: {
61
+ 'fade-in': 'fadeIn 0.6s ease-out forwards',
62
+ 'slide-up': 'slideUp 0.6s ease-out forwards',
63
+ 'float': 'float 6s ease-in-out infinite',
64
+ },
65
+ keyframes: {
66
+ fadeIn: { '0%': { opacity: '0' }, '100%': { opacity: '1' } },
67
+ slideUp: { '0%': { opacity: '0', transform: 'translateY(20px)' }, '100%': { opacity: '1', transform: 'translateY(0)' } },
68
+ float: { '0%, 100%': { transform: 'translateY(0)' }, '50%': { transform: 'translateY(-10px)' } },
69
+ },
70
+ },
71
+ },
72
+ }
73
+ </script>
74
+ ```
75
+
76
+ ---
77
+
78
+ ## 3. Typography Rules
79
+
80
+ **This is the #1 thing that separates polished pages from generic ones.**
81
+
82
+ ### Font Pairing Strategy
83
+ Always pair a **display font** (headings) with a **body font** (text). Never use the same font for both unless it's a deliberate minimal choice.
84
+
85
+ ### Banned Fonts (never use these — they scream "AI generated"):
86
+ - Inter, Roboto, Arial, Helvetica, Open Sans, Lato, system-ui as a primary choice
87
+
88
+ ### Recommended Font Pairings (rotate — never repeat across projects):
89
+
90
+ | Style | Display Font | Body Font |
91
+ |-------|-------------|-----------|
92
+ | Editorial/Magazine | Playfair Display | Source Serif 4 |
93
+ | Modern Luxury | Cormorant Garamond | Outfit |
94
+ | Bold Tech | Syne | General Sans (or DM Sans) |
95
+ | Clean Startup | Satoshi | Cabinet Grotesk |
96
+ | Warm Friendly | Fraunces | Plus Jakarta Sans |
97
+ | Brutalist/Raw | Space Mono | JetBrains Mono |
98
+ | Geometric Precision | Archivo Black | Archivo |
99
+ | Retro/Vintage | Bebas Neue | Libre Franklin |
100
+ | Playful | Bricolage Grotesque | Nunito |
101
+ | Japanese/Minimal | Noto Serif Display | Noto Sans |
102
+
103
+ ### Typography Scale
104
+ ```css
105
+ /* Use a consistent type scale — don't randomly pick sizes */
106
+ h1: clamp(2.5rem, 5vw, 4.5rem) /* Hero headlines — BIG */
107
+ h2: clamp(1.75rem, 3vw, 3rem) /* Section headings */
108
+ h3: clamp(1.25rem, 2vw, 1.75rem) /* Card titles, subheadings */
109
+ body: 1rem - 1.125rem /* 16-18px body text */
110
+ small: 0.875rem /* Captions, labels */
111
+
112
+ line-height: 1.1–1.2 for headings, 1.5–1.7 for body
113
+ letter-spacing: -0.02em to -0.04em for large headings (tighter is more premium)
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 4. Color System
119
+
120
+ ### Never do this:
121
+ - White background + purple/blue gradient accents (the "AI default")
122
+ - More than 3 colors competing for attention
123
+ - Low-contrast text
124
+
125
+ ### Always do this:
126
+ - Pick a **dominant color** (70%), a **secondary** (25%), and an **accent** (5%)
127
+ - Define a full shade scale (50–950) for your primary color
128
+ - Ensure WCAG AA contrast ratios (4.5:1 for body text, 3:1 for large text)
129
+
130
+ ### Color Palette Templates (pick one, customize):
131
+
132
+ ```css
133
+ /* DARK LUXURY */
134
+ --bg: #0a0a0a; --surface: #141414; --text: #e8e8e8;
135
+ --primary: #c9a84c; --accent: #e8d5a3;
136
+
137
+ /* WARM EARTH */
138
+ --bg: #faf7f2; --surface: #f0ebe3; --text: #2d2418;
139
+ --primary: #8b5e3c; --accent: #c4956a;
140
+
141
+ /* COOL MINIMAL */
142
+ --bg: #fafafa; --surface: #f1f1f1; --text: #1a1a1a;
143
+ --primary: #0055ff; --accent: #00c4ff;
144
+
145
+ /* FOREST */
146
+ --bg: #0f1a0f; --surface: #1a2e1a; --text: #d4e8d0;
147
+ --primary: #4ade80; --accent: #22c55e;
148
+
149
+ /* EDITORIAL CREAM */
150
+ --bg: #fffdf5; --surface: #f5f0e8; --text: #1c1917;
151
+ --primary: #dc2626; --accent: #f97316;
152
+
153
+ /* NOIR */
154
+ --bg: #000000; --surface: #111111; --text: #ffffff;
155
+ --primary: #ffffff; --accent: #666666;
156
+ ```
157
+
158
+ ---
159
+
160
+ ## 5. Layout & Spacing
161
+
162
+ ### Spacing Philosophy
163
+ Generous whitespace = premium. Cramped = amateur.
164
+
165
+ ```
166
+ - Section padding: py-20 to py-32 (80-128px)
167
+ - Content max-width: max-w-6xl or max-w-7xl (centered)
168
+ - Between sections: space-y-24 to space-y-32
169
+ - Card padding: p-6 to p-8
170
+ - Between heading and body text: mb-4 to mb-6
171
+ - Between cards in a grid: gap-6 to gap-8
172
+ ```
173
+
174
+ ### Layout Patterns (vary these — don't always use centered grids):
175
+
176
+ 1. **Split hero**: Content left, visual right (or reversed). 50/50 or 60/40.
177
+ 2. **Full-bleed hero**: Edge-to-edge background with centered content overlay.
178
+ 3. **Bento grid**: Asymmetric grid with mixed card sizes (span-2, span-1).
179
+ 4. **Staggered/offset**: Content blocks that aren't perfectly aligned — adds dynamism.
180
+ 5. **Overlapping elements**: Cards or images that break grid lines, overlap sections.
181
+ 6. **Scroll-based reveal**: Content that appears as you scroll down.
182
+
183
+ ### Responsive Rules
184
+ - Always mobile-first
185
+ - Hero text should be readable on 375px screens (use `clamp()`)
186
+ - Grids: `grid-cols-1 md:grid-cols-2 lg:grid-cols-3`
187
+ - Navigation: hamburger on mobile, horizontal on desktop
188
+ - Touch targets: minimum 44px
189
+
190
+ ---
191
+
192
+ ## 6. Visual Effects & Polish
193
+
194
+ These small details separate "pretty good" from "professionally designed":
195
+
196
+ ### Background Treatments (pick 1–2 per page):
197
+ ```css
198
+ /* Subtle grid pattern */
199
+ background-image: linear-gradient(rgba(0,0,0,.03) 1px, transparent 1px),
200
+ linear-gradient(90deg, rgba(0,0,0,.03) 1px, transparent 1px);
201
+ background-size: 60px 60px;
202
+
203
+ /* Noise texture overlay */
204
+ .noise::after {
205
+ content: '';
206
+ position: fixed; inset: 0; z-index: 9999; pointer-events: none;
207
+ opacity: 0.03;
208
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
209
+ }
210
+
211
+ /* Gradient orb / blob in background */
212
+ .gradient-orb {
213
+ position: absolute;
214
+ width: 600px; height: 600px;
215
+ border-radius: 50%;
216
+ background: radial-gradient(circle, rgba(99,102,241,0.15) 0%, transparent 70%);
217
+ filter: blur(80px);
218
+ pointer-events: none;
219
+ }
220
+
221
+ /* Subtle radial gradient on sections */
222
+ background: radial-gradient(ellipse at top, rgba(primary, 0.05), transparent 70%);
223
+ ```
224
+
225
+ ### Micro-Interactions:
226
+ ```css
227
+ /* Smooth hover lift on cards */
228
+ .card { transition: transform 0.3s ease, box-shadow 0.3s ease; }
229
+ .card:hover { transform: translateY(-4px); box-shadow: 0 20px 40px rgba(0,0,0,0.1); }
230
+
231
+ /* Button hover */
232
+ .btn { transition: all 0.2s ease; }
233
+ .btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(primary, 0.3); }
234
+
235
+ /* Link underline animation */
236
+ .link { position: relative; }
237
+ .link::after {
238
+ content: ''; position: absolute; bottom: -2px; left: 0;
239
+ width: 0; height: 2px; background: currentColor;
240
+ transition: width 0.3s ease;
241
+ }
242
+ .link:hover::after { width: 100%; }
243
+ ```
244
+
245
+ ### Scroll Animations (use Intersection Observer):
246
+ ```javascript
247
+ const observer = new IntersectionObserver((entries) => {
248
+ entries.forEach(entry => {
249
+ if (entry.isIntersecting) {
250
+ entry.target.classList.add('animate-in');
251
+ observer.unobserve(entry.target);
252
+ }
253
+ });
254
+ }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' });
255
+
256
+ document.querySelectorAll('[data-animate]').forEach(el => {
257
+ el.style.opacity = '0';
258
+ el.style.transform = 'translateY(20px)';
259
+ observer.observe(el);
260
+ });
261
+
262
+ // CSS
263
+ .animate-in {
264
+ opacity: 1 !important;
265
+ transform: translateY(0) !important;
266
+ transition: opacity 0.6s ease, transform 0.6s ease;
267
+ }
268
+
269
+ // Add stagger delay to children
270
+ [data-animate-stagger] > * {
271
+ transition-delay: calc(var(--index) * 100ms);
272
+ }
273
+ ```
274
+
275
+ ---
276
+
277
+ ## 7. Component Patterns
278
+
279
+ ### Hero Section (never boring)
280
+ Every hero must have:
281
+ - A headline that's visually dominant (largest text on page)
282
+ - A subheading with lower contrast / opacity
283
+ - A clear CTA with hover state
284
+ - Visual interest (gradient, image, pattern, animation)
285
+ - At least 80vh height (or min-h-screen for full-bleed)
286
+
287
+ ### Navigation
288
+ - Sticky/fixed with backdrop blur: `backdrop-blur-md bg-white/80`
289
+ - Logo left, links center or right
290
+ - Active state indicator (underline, dot, or color change)
291
+ - Smooth transition on scroll (shrink, shadow, bg change)
292
+
293
+ ### Cards
294
+ - Subtle border OR shadow, never both heavy
295
+ - Rounded corners: `rounded-xl` to `rounded-2xl`
296
+ - Consistent internal padding
297
+ - Optional: subtle gradient border with a pseudo-element
298
+ - Hover state that lifts or highlights
299
+
300
+ ### Buttons
301
+ - Primary: filled, bold, with icon →
302
+ - Secondary: outlined or ghost style
303
+ - Always include hover + active + focus states
304
+ - Padding: `px-6 py-3` minimum (generous click area)
305
+ - Border radius: `rounded-lg` to `rounded-full`
306
+
307
+ ### Footer
308
+ - Should feel grounded (often darker than page background)
309
+ - Multi-column layout on desktop, stacked on mobile
310
+ - Include subtle separator from main content
311
+
312
+ ---
313
+
314
+ ## 8. Quality Checklist
315
+
316
+ Before outputting any page, verify:
317
+
318
+ - [ ] **Font choice is distinctive** — not Inter, Roboto, or Arial
319
+ - [ ] **Color palette has personality** — not generic blue/purple on white
320
+ - [ ] **Typography scale is consistent** — headings use clamp(), body is 16-18px
321
+ - [ ] **Spacing is generous** — sections have py-20+, content isn't cramped
322
+ - [ ] **At least one "wow" element** — animation, unusual layout, bold color
323
+ - [ ] **Backgrounds aren't flat** — subtle pattern, gradient, or texture
324
+ - [ ] **Hover states exist** — cards lift, buttons shift, links animate
325
+ - [ ] **Scroll animations present** — content reveals on scroll
326
+ - [ ] **Mobile responsive** — tested mentally at 375px width
327
+ - [ ] **Contrast ratios pass** — text is readable on all backgrounds
328
+ - [ ] **Icons are consistent** — all from Lucide (not mixed libraries)
329
+ - [ ] **No placeholder images** — use gradients, patterns, or SVG illustrations instead (or real Unsplash URLs if images are needed)
330
+ - [ ] **Page feels cohesive** — one aesthetic direction, not a Frankenstein of styles
331
+
332
+ ---
333
+
334
+ ## 9. Anti-Patterns (NEVER do these)
335
+
336
+ | ❌ Don't | ✅ Do Instead |
337
+ |----------|--------------|
338
+ | Use Inter/Roboto/Arial | Pick a distinctive font pairing from the list |
339
+ | Purple gradient on white | Choose a palette with personality |
340
+ | Perfectly symmetric 3-column grids for everything | Mix layouts: bento, split, offset, overlapping |
341
+ | Flat white or flat gray backgrounds | Add subtle texture, gradient, or pattern |
342
+ | Tiny padding between sections | Use py-20 to py-32 for breathing room |
343
+ | Generic stock photo placeholders | Use gradient fills, SVG illustrations, or real images |
344
+ | All animations are the same speed | Stagger animations with increasing delays |
345
+ | Skip hover/focus states | Every interactive element needs feedback |
346
+ | Use `<br>` tags for spacing | Use proper margin/padding utilities |
347
+ | Put everything in a card with a shadow | Vary containers: some full-bleed, some contained, some floating |
348
+
349
+ ---
350
+
351
+ ## 10. Example Prompt Enhancement
352
+
353
+ When the user gives you a simple prompt like "build me a landing page for a coffee shop," you should internally expand it to:
354
+
355
+ > Build a landing page for a coffee shop with:
356
+ > - **Aesthetic**: warm, editorial, slightly vintage
357
+ > - **Fonts**: Playfair Display + Source Serif 4
358
+ > - **Colors**: cream bg (#faf7f2), espresso brown (#3c1e0e), warm gold accent (#c4956a)
359
+ > - **Hero**: full-bleed image background with overlaid text, parallax hint
360
+ > - **Layout**: asymmetric sections, large product photography areas
361
+ > - **Texture**: subtle paper/grain noise overlay
362
+ > - **Animations**: scroll-triggered reveals, smooth parallax
363
+ > - **Mood**: feels like a high-end magazine spread, not a template
364
+
365
+ Always do this internal expansion. The user gives the "what," you decide the "how it should look and feel."
366
+
367
+ ---
368
+
369
+ ## 11. Image Strategy
370
+
371
+ When images are needed:
372
+ - **Prefer SVG illustrations or CSS art** over placeholder images
373
+ - If photos are needed, use Unsplash source URLs: `https://images.unsplash.com/photo-{ID}?w=800&q=80`
374
+ - **Gradient placeholder blocks** work great: a `div` with a beautiful gradient in the shape/size of where an image would go
375
+ - For avatars: use colored circles with initials
376
+ - For icons: always Lucide, never Font Awesome mixed with other sets
377
+
378
+ ---
379
+
380
+ *These instructions ensure every page Claude Code generates feels designed, intentional, and polished — not like AI output. The key principles are: distinctive typography, cohesive color, generous spacing, subtle texture, and purposeful animation.*