antigravity-devkit 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 +421 -0
- package/bin/cli.js +179 -0
- package/package.json +38 -0
- package/template/ARCHITECTURE.md +148 -0
- package/template/README.md +421 -0
- package/template/agents/backend-specialist.md +137 -0
- package/template/agents/database-architect.md +114 -0
- package/template/agents/debugger.md +108 -0
- package/template/agents/devops-engineer.md +125 -0
- package/template/agents/documentation-writer.md +109 -0
- package/template/agents/explorer-agent.md +107 -0
- package/template/agents/frontend-specialist.md +231 -0
- package/template/agents/orchestrator.md +100 -0
- package/template/agents/performance-optimizer.md +109 -0
- package/template/agents/project-planner.md +123 -0
- package/template/agents/security-auditor.md +107 -0
- package/template/agents/test-engineer.md +133 -0
- package/template/rules/GEMINI.md +180 -0
- package/template/scripts/checklist.py +170 -0
- package/template/scripts/verify_all.py +243 -0
- package/template/skills/api-patterns/SKILL.md +116 -0
- package/template/skills/architecture/SKILL.md +98 -0
- package/template/skills/aspnet-patterns/SKILL.md +120 -0
- package/template/skills/azure-aks/SKILL.md +136 -0
- package/template/skills/azure-devops/SKILL.md +123 -0
- package/template/skills/azure-keyvault/SKILL.md +100 -0
- package/template/skills/brainstorming/SKILL.md +96 -0
- package/template/skills/clean-code/SKILL.md +84 -0
- package/template/skills/csharp-patterns/SKILL.md +115 -0
- package/template/skills/documentation-templates/SKILL.md +127 -0
- package/template/skills/english-education/SKILL.md +116 -0
- package/template/skills/english-education/references/lesson-templates.md +151 -0
- package/template/skills/english-education/references/quiz-templates.md +177 -0
- package/template/skills/english-education/scripts/curriculum_validator.py +175 -0
- package/template/skills/frontend-design/SKILL.md +199 -0
- package/template/skills/frontend-design/animation-guide.md +217 -0
- package/template/skills/frontend-design/design-systems.md +230 -0
- package/template/skills/frontend-design/ux-psychology.md +128 -0
- package/template/skills/gitops-patterns/SKILL.md +105 -0
- package/template/skills/grafana-logging/SKILL.md +107 -0
- package/template/skills/intelligent-routing/SKILL.md +75 -0
- package/template/skills/plan-writing/SKILL.md +96 -0
- package/template/skills/sqlserver-design/SKILL.md +97 -0
- package/template/skills/systematic-debugging/SKILL.md +98 -0
- package/template/skills/testing-patterns/SKILL.md +102 -0
- package/template/skills/vitest-testing/SKILL.md +116 -0
- package/template/skills/vue3-patterns/SKILL.md +195 -0
- package/template/skills/vulnerability-scanner/SKILL.md +104 -0
- package/template/skills/xunit-testing/SKILL.md +127 -0
- package/template/workflows/brainstorm.md +69 -0
- package/template/workflows/code.md +82 -0
- package/template/workflows/create.md +79 -0
- package/template/workflows/debug.md +83 -0
- package/template/workflows/deploy.md +101 -0
- package/template/workflows/orchestrate.md +86 -0
- package/template/workflows/plan.md +79 -0
- package/template/workflows/review.md +85 -0
- package/template/workflows/status.md +90 -0
- package/template/workflows/test.md +89 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: UI/UX design thinking and decision-making. Use when designing layouts, color schemes, typography, or visual interfaces. Teaches principles, not fixed values.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frontend Design System
|
|
7
|
+
|
|
8
|
+
> **Philosophy:** Every pixel has purpose. Restraint is luxury. User psychology drives decisions.
|
|
9
|
+
> **Core Principle:** THINK, don't memorize. ASK, don't assume.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## π Reference Files
|
|
14
|
+
|
|
15
|
+
| File | When to Read |
|
|
16
|
+
|------|--------------|
|
|
17
|
+
| [ux-psychology.md](ux-psychology.md) | π΄ **ALWAYS** - Core UX laws |
|
|
18
|
+
| [animation-guide.md](animation-guide.md) | When animations needed |
|
|
19
|
+
| [design-systems.md](design-systems.md) | Color/typography decisions |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## β ANTI-AI-SLOP RULES (CRITICAL)
|
|
24
|
+
|
|
25
|
+
**Your training data makes you converge to generic designs. BREAK THIS!**
|
|
26
|
+
|
|
27
|
+
| AI Default Tendency | Why It's Bad | Think Instead |
|
|
28
|
+
|---------------------|--------------|---------------|
|
|
29
|
+
| **Purple/Violet gradients** | #1 AI clichΓ© | Try Teal, Emerald, Signal Orange |
|
|
30
|
+
| **Inter/Roboto fonts** | Every AI uses these | Research unique fonts for context |
|
|
31
|
+
| **Bento Grids** | Overused layout | Try asymmetric, staggered, overlap |
|
|
32
|
+
| **Hero Split (Left/Right)** | Predictable | Massive typography, vertical flow |
|
|
33
|
+
| **Mesh/Aurora Gradients** | Lazy background | Solid contrast, textures, patterns |
|
|
34
|
+
| **Glassmorphism everywhere** | AI "premium" idea | Raw borders, high-contrast flat |
|
|
35
|
+
| **Dark + neon glow** | Generic "tech" look | What does the BRAND need? |
|
|
36
|
+
| **rounded-md on everything** | Safe/boring | Go extreme: 0px OR 24px+ |
|
|
37
|
+
|
|
38
|
+
> π΄ **"If it looks like a Tailwind template, you have FAILED."**
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## π§ DEEP DESIGN THINKING (MANDATORY)
|
|
43
|
+
|
|
44
|
+
**Before ANY design, answer internally:**
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
π CONTEXT ANALYSIS:
|
|
48
|
+
βββ What sector? β What emotions should it evoke?
|
|
49
|
+
βββ Who is the audience? β Age, expectations, tech-savviness?
|
|
50
|
+
βββ What do competitors look like? β What should I NOT do?
|
|
51
|
+
βββ What is the soul of this app? β In one word?
|
|
52
|
+
|
|
53
|
+
π¨ DESIGN IDENTITY:
|
|
54
|
+
βββ What will make this UNFORGETTABLE?
|
|
55
|
+
βββ What unexpected element can I use?
|
|
56
|
+
βββ π« CLICHΓ CHECK: Am I defaulting to AI patterns?
|
|
57
|
+
βββ Will I remember this design in a year?
|
|
58
|
+
|
|
59
|
+
π LAYOUT HYPOTHESIS:
|
|
60
|
+
βββ How can the Hero be DIFFERENT?
|
|
61
|
+
βββ Where can I break the grid?
|
|
62
|
+
βββ Can navigation be unconventional?
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## π¨ DESIGN COMMITMENT (REQUIRED OUTPUT)
|
|
68
|
+
|
|
69
|
+
**Present this block to user BEFORE coding:**
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
π¨ DESIGN COMMITMENT:
|
|
73
|
+
|
|
74
|
+
- **Style Choice:** [Brutalist / Neo-Retro / Swiss Punk / Minimal Luxury]
|
|
75
|
+
- **Primary Color:** [NOT purple/blue - justify choice]
|
|
76
|
+
- **Typography:** [Specific fonts, not Inter/Roboto]
|
|
77
|
+
- **Layout Risk:** [What unconventional decision did I take?]
|
|
78
|
+
- **ClichΓ© Avoided:** [Which AI default did I explicitly kill?]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## β οΈ ASK BEFORE ASSUMING
|
|
84
|
+
|
|
85
|
+
**If user request is vague, ASK:**
|
|
86
|
+
|
|
87
|
+
| Unspecified | Ask This |
|
|
88
|
+
|-------------|----------|
|
|
89
|
+
| Color | "What palette? (warm/cool/bold/minimal)" |
|
|
90
|
+
| Style | "What vibe? (professional/playful/luxurious)" |
|
|
91
|
+
| Layout | "Any preference? (spacious/dense/asymmetric)" |
|
|
92
|
+
| Audience | "Who is this for? (age/tech-savviness)" |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## π LAYOUT PRINCIPLES
|
|
97
|
+
|
|
98
|
+
### Layout Alternatives (NOT Split Screen)
|
|
99
|
+
|
|
100
|
+
| Layout | When to Use |
|
|
101
|
+
|--------|-------------|
|
|
102
|
+
| **Massive Typography** | Hero with 80px+ text as visual |
|
|
103
|
+
| **Staggered Grid** | Cards at different alignments |
|
|
104
|
+
| **Overlapping Elements** | Depth through z-layers |
|
|
105
|
+
| **Extreme Asymmetry** | 90/10 split for tension |
|
|
106
|
+
| **Vertical Flow** | No "above the fold" hero |
|
|
107
|
+
|
|
108
|
+
### 8-Point Grid
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
All spacing in multiples of 8:
|
|
112
|
+
βββ Tight: 4px, 8px
|
|
113
|
+
βββ Medium: 16px, 24px
|
|
114
|
+
βββ Large: 32px, 48px
|
|
115
|
+
βββ XL: 64px, 80px
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## β¨ MANDATORY VISUAL POLISH
|
|
121
|
+
|
|
122
|
+
### Animation Requirements
|
|
123
|
+
|
|
124
|
+
- [ ] **Scroll reveals** - Staggered entrance animations
|
|
125
|
+
- [ ] **Micro-interactions** - Hover/click feedback on all interactive elements
|
|
126
|
+
- [ ] **Spring physics** - Natural, not linear easing
|
|
127
|
+
- [ ] **prefers-reduced-motion** - MUST respect accessibility
|
|
128
|
+
|
|
129
|
+
### Depth & Texture
|
|
130
|
+
|
|
131
|
+
- [ ] **Layering** - Overlapping elements, parallax
|
|
132
|
+
- [ ] **Shadows** - Meaningful elevation hierarchy
|
|
133
|
+
- [ ] **Texture** - Grain, patterns, not flat colors only
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## π§ REALITY CHECK (ANTI-SELF-DECEPTION)
|
|
138
|
+
|
|
139
|
+
Before delivering, verify HONESTLY:
|
|
140
|
+
|
|
141
|
+
| Question | FAIL | PASS |
|
|
142
|
+
|----------|------|------|
|
|
143
|
+
| "Could this be a template?" | "It's clean..." | "No way, this is unique" |
|
|
144
|
+
| "Would I scroll past on Dribbble?" | "It's professional" | "I'd stop and look" |
|
|
145
|
+
| "Can I describe without 'clean'?" | "Clean minimal" | "Brutalist with aurora accents" |
|
|
146
|
+
|
|
147
|
+
### Self-Deception Patterns
|
|
148
|
+
|
|
149
|
+
- β "I used custom color" β But it's still blue+white
|
|
150
|
+
- β "I have hover effects" β But just `opacity: 0.8`
|
|
151
|
+
- β "Layout is varied" β But 3-column equal grid
|
|
152
|
+
|
|
153
|
+
> π΄ **If it looks generic, you have FAILED. No exceptions.**
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Vue3 + Tailwind Implementation
|
|
158
|
+
|
|
159
|
+
### Component Animation (Vue)
|
|
160
|
+
|
|
161
|
+
```vue
|
|
162
|
+
<template>
|
|
163
|
+
<Transition name="slide-up" appear>
|
|
164
|
+
<div v-if="show" class="card">...</div>
|
|
165
|
+
</Transition>
|
|
166
|
+
</template>
|
|
167
|
+
|
|
168
|
+
<style>
|
|
169
|
+
.slide-up-enter-active { transition: all 0.4s ease-out; }
|
|
170
|
+
.slide-up-enter-from { opacity: 0; transform: translateY(20px); }
|
|
171
|
+
</style>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Tailwind Custom Theme
|
|
175
|
+
|
|
176
|
+
```javascript
|
|
177
|
+
// tailwind.config.js - CUSTOMIZE, don't use defaults
|
|
178
|
+
module.exports = {
|
|
179
|
+
theme: {
|
|
180
|
+
extend: {
|
|
181
|
+
colors: {
|
|
182
|
+
primary: '#0d9488', // NOT default purple
|
|
183
|
+
accent: '#f59e0b', // Distinctive accent
|
|
184
|
+
},
|
|
185
|
+
fontFamily: {
|
|
186
|
+
display: ['Space Grotesk', 'sans-serif'], // Unique font
|
|
187
|
+
body: ['DM Sans', 'sans-serif'],
|
|
188
|
+
},
|
|
189
|
+
borderRadius: {
|
|
190
|
+
'card': '2px', // Sharp, not rounded-md
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
> **Remember:** Design is THINKING, not copying. Avoid the "Modern SaaS Safe Harbor"!
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Animation Guidelines
|
|
2
|
+
|
|
3
|
+
> Animation principles and timing psychology. Learn to decide, not copy.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Duration Principles
|
|
8
|
+
|
|
9
|
+
### What Affects Timing
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Factors determining animation speed:
|
|
13
|
+
βββ DISTANCE: Further travel = longer duration
|
|
14
|
+
βββ SIZE: Larger elements = slower animations
|
|
15
|
+
βββ IMPORTANCE: Critical actions = clear feedback
|
|
16
|
+
βββ CONTEXT: Urgent = fast, luxurious = slow
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Duration Ranges
|
|
20
|
+
|
|
21
|
+
| Purpose | Range | Example |
|
|
22
|
+
|---------|-------|---------|
|
|
23
|
+
| Instant feedback | 50-100ms | Button press |
|
|
24
|
+
| Micro-interactions | 100-200ms | Hover effects |
|
|
25
|
+
| Standard transitions | 200-300ms | Tabs, toggles |
|
|
26
|
+
| Complex animations | 300-500ms | Modal open |
|
|
27
|
+
| Page transitions | 400-600ms | Route change |
|
|
28
|
+
| Premium/Wow effects | 800ms+ | Hero reveals |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Easing Principles
|
|
33
|
+
|
|
34
|
+
| Easing | Best For | Feels Like |
|
|
35
|
+
|--------|----------|------------|
|
|
36
|
+
| **ease-out** | Elements entering | Arriving, settling |
|
|
37
|
+
| **ease-in** | Elements leaving | Departing, exiting |
|
|
38
|
+
| **ease-in-out** | Emphasis, loops | Smooth, deliberate |
|
|
39
|
+
| **linear** | Continuous motion | Mechanical |
|
|
40
|
+
| **spring/bounce** | Playful UI | Fun, energetic |
|
|
41
|
+
|
|
42
|
+
### The Pattern
|
|
43
|
+
|
|
44
|
+
```css
|
|
45
|
+
/* ENTERING = ease-out (decelerate) */
|
|
46
|
+
.enter { animation-timing-function: ease-out; }
|
|
47
|
+
|
|
48
|
+
/* LEAVING = ease-in (accelerate) */
|
|
49
|
+
.exit { animation-timing-function: ease-in; }
|
|
50
|
+
|
|
51
|
+
/* CONTINUOUS = ease-in-out */
|
|
52
|
+
.loop { animation-timing-function: ease-in-out; }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Micro-Interactions
|
|
58
|
+
|
|
59
|
+
### Purpose
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
βββ FEEDBACK: Confirm action happened
|
|
63
|
+
βββ GUIDANCE: Show what's possible
|
|
64
|
+
βββ STATUS: Indicate current state
|
|
65
|
+
βββ DELIGHT: Small moments of joy
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Button States
|
|
69
|
+
|
|
70
|
+
| State | Effect | Tailwind Example |
|
|
71
|
+
|-------|--------|------------------|
|
|
72
|
+
| Hover | Lift + glow | `hover:-translate-y-1 hover:shadow-lg` |
|
|
73
|
+
| Active | Press down | `active:scale-95` |
|
|
74
|
+
| Focus | Ring indicator | `focus:ring-2 focus:ring-offset-2` |
|
|
75
|
+
| Loading | Spinner | `animate-spin` |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Scroll Animations (Vue3 + Tailwind)
|
|
80
|
+
|
|
81
|
+
### Intersection Observer Pattern
|
|
82
|
+
|
|
83
|
+
```vue
|
|
84
|
+
<script setup lang="ts">
|
|
85
|
+
import { ref, onMounted } from 'vue'
|
|
86
|
+
|
|
87
|
+
const isVisible = ref(false)
|
|
88
|
+
const element = ref<HTMLElement>()
|
|
89
|
+
|
|
90
|
+
onMounted(() => {
|
|
91
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
92
|
+
isVisible.value = entry.isIntersecting
|
|
93
|
+
}, { threshold: 0.1 })
|
|
94
|
+
|
|
95
|
+
if (element.value) observer.observe(element.value)
|
|
96
|
+
})
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<template>
|
|
100
|
+
<div
|
|
101
|
+
ref="element"
|
|
102
|
+
:class="[
|
|
103
|
+
'transition-all duration-500 ease-out',
|
|
104
|
+
isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'
|
|
105
|
+
]"
|
|
106
|
+
>
|
|
107
|
+
Content reveals on scroll
|
|
108
|
+
</div>
|
|
109
|
+
</template>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Staggered Animation
|
|
113
|
+
|
|
114
|
+
```vue
|
|
115
|
+
<template>
|
|
116
|
+
<div v-for="(item, i) in items" :key="i"
|
|
117
|
+
:style="{ transitionDelay: `${i * 100}ms` }"
|
|
118
|
+
:class="isVisible ? 'opacity-100' : 'opacity-0'"
|
|
119
|
+
>
|
|
120
|
+
{{ item }}
|
|
121
|
+
</div>
|
|
122
|
+
</template>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Vue Transition Components
|
|
128
|
+
|
|
129
|
+
```vue
|
|
130
|
+
<!-- Fade -->
|
|
131
|
+
<Transition name="fade">
|
|
132
|
+
<div v-if="show">Content</div>
|
|
133
|
+
</Transition>
|
|
134
|
+
|
|
135
|
+
<style>
|
|
136
|
+
.fade-enter-active, .fade-leave-active {
|
|
137
|
+
transition: opacity 0.3s ease;
|
|
138
|
+
}
|
|
139
|
+
.fade-enter-from, .fade-leave-to {
|
|
140
|
+
opacity: 0;
|
|
141
|
+
}
|
|
142
|
+
</style>
|
|
143
|
+
|
|
144
|
+
<!-- Slide Up -->
|
|
145
|
+
<Transition name="slide-up" appear>
|
|
146
|
+
<div v-if="show">Content</div>
|
|
147
|
+
</Transition>
|
|
148
|
+
|
|
149
|
+
<style>
|
|
150
|
+
.slide-up-enter-active {
|
|
151
|
+
transition: all 0.4s ease-out;
|
|
152
|
+
}
|
|
153
|
+
.slide-up-enter-from {
|
|
154
|
+
opacity: 0;
|
|
155
|
+
transform: translateY(20px);
|
|
156
|
+
}
|
|
157
|
+
</style>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Performance Rules
|
|
163
|
+
|
|
164
|
+
### β
Animate ONLY
|
|
165
|
+
|
|
166
|
+
```css
|
|
167
|
+
/* GPU-accelerated (FAST) */
|
|
168
|
+
transform: translate(), scale(), rotate();
|
|
169
|
+
opacity: 0 to 1;
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### β NEVER Animate
|
|
173
|
+
|
|
174
|
+
```css
|
|
175
|
+
/* CPU-intensive (SLOW) */
|
|
176
|
+
width, height
|
|
177
|
+
top, left, right, bottom
|
|
178
|
+
margin, padding
|
|
179
|
+
border-radius
|
|
180
|
+
box-shadow
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Accessibility (MANDATORY)
|
|
184
|
+
|
|
185
|
+
```css
|
|
186
|
+
@media (prefers-reduced-motion: reduce) {
|
|
187
|
+
*, *::before, *::after {
|
|
188
|
+
animation-duration: 0.01ms !important;
|
|
189
|
+
transition-duration: 0.01ms !important;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Animation Checklist
|
|
197
|
+
|
|
198
|
+
Before adding animation:
|
|
199
|
+
|
|
200
|
+
- [ ] **Purpose** - Feedback, guidance, or delight?
|
|
201
|
+
- [ ] **Timing** - Appropriate duration?
|
|
202
|
+
- [ ] **Easing** - Correct for enter/exit/emphasis?
|
|
203
|
+
- [ ] **Performance** - transform/opacity only?
|
|
204
|
+
- [ ] **Reduced motion** - Accessibility respected?
|
|
205
|
+
- [ ] **Consistency** - Matches other animations?
|
|
206
|
+
|
|
207
|
+
### Anti-Patterns
|
|
208
|
+
|
|
209
|
+
- β Same timing every project
|
|
210
|
+
- β Animation without purpose
|
|
211
|
+
- β Ignoring reduced-motion
|
|
212
|
+
- β Animating expensive properties
|
|
213
|
+
- β Too many things moving at once
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
> **Remember:** Animation is communication. Every motion should serve the user.
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Design Systems Reference
|
|
2
|
+
|
|
3
|
+
> Color theory, typography, and visual hierarchy principles for Vue3 + Tailwind.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Color Principles
|
|
8
|
+
|
|
9
|
+
### 60-30-10 Rule
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
60% β Primary/Background (calm, neutral base)
|
|
13
|
+
30% β Secondary (supporting areas)
|
|
14
|
+
10% β Accent (CTAs, highlights)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Color Psychology
|
|
18
|
+
|
|
19
|
+
| Need | Consider | Avoid |
|
|
20
|
+
|------|----------|-------|
|
|
21
|
+
| Trust, calm | Blue family | Aggressive reds |
|
|
22
|
+
| Growth, nature | Green family | Industrial grays |
|
|
23
|
+
| Energy, urgency | Orange, red | Passive blues |
|
|
24
|
+
| Luxury | Deep Teal, Gold, Emerald | Cheap brights |
|
|
25
|
+
| Clean, minimal | Neutrals | Overwhelming color |
|
|
26
|
+
|
|
27
|
+
### β Colors to AVOID (AI ClichΓ©s)
|
|
28
|
+
|
|
29
|
+
| β Avoid | Why | β
Try Instead |
|
|
30
|
+
|----------|-----|----------------|
|
|
31
|
+
| Purple/Violet | #1 AI default | Teal, Emerald, Coral |
|
|
32
|
+
| Fintech Blue | Safe harbor | Signal Orange, Deep Green |
|
|
33
|
+
| Pink gradients | Overused | Rich Gold, Warm Terracotta |
|
|
34
|
+
| Neon glow | Generic "tech" | Solid contrast, texture |
|
|
35
|
+
|
|
36
|
+
### Selection Process
|
|
37
|
+
|
|
38
|
+
1. **Industry?** β Narrows options
|
|
39
|
+
2. **Emotion?** β Picks primary
|
|
40
|
+
3. **Light/Dark mode?** β Sets foundation
|
|
41
|
+
4. **ASK USER** if not specified
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Tailwind Custom Palette
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
// tailwind.config.js - UNIQUE colors
|
|
49
|
+
module.exports = {
|
|
50
|
+
theme: {
|
|
51
|
+
extend: {
|
|
52
|
+
colors: {
|
|
53
|
+
// Define brand-specific colors
|
|
54
|
+
brand: {
|
|
55
|
+
50: '#f0fdfa',
|
|
56
|
+
500: '#14b8a6', // Primary - NOT purple
|
|
57
|
+
900: '#134e4a',
|
|
58
|
+
},
|
|
59
|
+
accent: {
|
|
60
|
+
DEFAULT: '#f59e0b', // Distinctive accent
|
|
61
|
+
hover: '#d97706',
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Typography Principles
|
|
72
|
+
|
|
73
|
+
### Scale Ratios
|
|
74
|
+
|
|
75
|
+
| Content Type | Ratio | Feel |
|
|
76
|
+
|--------------|-------|------|
|
|
77
|
+
| Dense UI | 1.125-1.2 | Compact, efficient |
|
|
78
|
+
| General web | 1.25 | Balanced |
|
|
79
|
+
| Editorial | 1.333 | Readable, spacious |
|
|
80
|
+
| Hero/display | 1.5-1.618 | Dramatic |
|
|
81
|
+
|
|
82
|
+
### Font Pairing Concept
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
Contrast + Harmony:
|
|
86
|
+
βββ DIFFERENT enough for hierarchy
|
|
87
|
+
βββ SIMILAR enough for cohesion
|
|
88
|
+
βββ Usually: display + neutral, or serif + sans
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### β Fonts to AVOID (AI Defaults)
|
|
92
|
+
|
|
93
|
+
| β Avoid | Why | β
Try Instead |
|
|
94
|
+
|----------|-----|----------------|
|
|
95
|
+
| Inter | Every AI uses it | Space Grotesk, DM Sans |
|
|
96
|
+
| Roboto | Generic | Outfit, General Sans |
|
|
97
|
+
| Poppins | Overused | Cabinet Grotesk, Clash Display |
|
|
98
|
+
| System fonts | Lazy | Research unique fonts |
|
|
99
|
+
|
|
100
|
+
### Unique Font Suggestions
|
|
101
|
+
|
|
102
|
+
| Purpose | Font Options |
|
|
103
|
+
|---------|--------------|
|
|
104
|
+
| Display/Hero | Clash Display, Cabinet Grotesk, Syne |
|
|
105
|
+
| Body | DM Sans, Outfit, General Sans |
|
|
106
|
+
| Mono/Code | JetBrains Mono, Fira Code |
|
|
107
|
+
| Elegant | Fraunces, Newsreader, Lora |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Tailwind Typography Setup
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
// tailwind.config.js
|
|
115
|
+
module.exports = {
|
|
116
|
+
theme: {
|
|
117
|
+
extend: {
|
|
118
|
+
fontFamily: {
|
|
119
|
+
display: ['Clash Display', 'sans-serif'],
|
|
120
|
+
body: ['DM Sans', 'sans-serif'],
|
|
121
|
+
mono: ['JetBrains Mono', 'monospace'],
|
|
122
|
+
},
|
|
123
|
+
fontSize: {
|
|
124
|
+
'hero': ['4.5rem', { lineHeight: '1.1', letterSpacing: '-0.02em' }],
|
|
125
|
+
'display': ['3rem', { lineHeight: '1.2' }],
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Readability Rules
|
|
133
|
+
|
|
134
|
+
- **Line length:** 45-75 characters optimal
|
|
135
|
+
- **Line height:** 1.4-1.6 for body
|
|
136
|
+
- **Contrast:** WCAG AA minimum (4.5:1)
|
|
137
|
+
- **Base size:** 16px+ for web
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Visual Hierarchy
|
|
142
|
+
|
|
143
|
+
### Sizing Principles
|
|
144
|
+
|
|
145
|
+
| Element | Consideration |
|
|
146
|
+
|---------|---------------|
|
|
147
|
+
| **Touch targets** | Min 44Γ44px mobile |
|
|
148
|
+
| **Buttons** | Height by importance (48/40/36px) |
|
|
149
|
+
| **Inputs** | Match button height |
|
|
150
|
+
| **Cards** | Consistent padding |
|
|
151
|
+
| **Reading width** | max-w-prose (65ch) |
|
|
152
|
+
|
|
153
|
+
### 8-Point Grid
|
|
154
|
+
|
|
155
|
+
```css
|
|
156
|
+
/* All spacing in multiples of 8 */
|
|
157
|
+
.spacing {
|
|
158
|
+
--space-1: 4px; /* half-step */
|
|
159
|
+
--space-2: 8px;
|
|
160
|
+
--space-3: 16px;
|
|
161
|
+
--space-4: 24px;
|
|
162
|
+
--space-5: 32px;
|
|
163
|
+
--space-6: 48px;
|
|
164
|
+
--space-7: 64px;
|
|
165
|
+
--space-8: 80px;
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Border Radius Strategy
|
|
172
|
+
|
|
173
|
+
**Don't default to `rounded-md`!**
|
|
174
|
+
|
|
175
|
+
| Style | Radius | Use Case |
|
|
176
|
+
|-------|--------|----------|
|
|
177
|
+
| **Sharp** | 0-2px | Tech, Luxury, Brutalist |
|
|
178
|
+
| **Subtle** | 4-6px | Professional, B2B |
|
|
179
|
+
| **Medium** | 8-12px | General, balanced |
|
|
180
|
+
| **Friendly** | 16-24px | Social, lifestyle |
|
|
181
|
+
| **Pill** | 9999px | Buttons, badges |
|
|
182
|
+
|
|
183
|
+
```javascript
|
|
184
|
+
// tailwind.config.js - COMMIT to a style
|
|
185
|
+
module.exports = {
|
|
186
|
+
theme: {
|
|
187
|
+
extend: {
|
|
188
|
+
borderRadius: {
|
|
189
|
+
'card': '2px', // Sharp for tech
|
|
190
|
+
'button': '9999px', // Pill buttons
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Shadow Hierarchy
|
|
200
|
+
|
|
201
|
+
```css
|
|
202
|
+
/* Tailwind shadow scale */
|
|
203
|
+
.elevation-1 { @apply shadow-sm; } /* Subtle lift */
|
|
204
|
+
.elevation-2 { @apply shadow-md; } /* Cards */
|
|
205
|
+
.elevation-3 { @apply shadow-lg; } /* Modals, dropdowns */
|
|
206
|
+
.elevation-4 { @apply shadow-xl; } /* Popovers */
|
|
207
|
+
.elevation-5 { @apply shadow-2xl; } /* Dialogs */
|
|
208
|
+
|
|
209
|
+
/* Custom dramatic shadow */
|
|
210
|
+
.shadow-dramatic {
|
|
211
|
+
box-shadow:
|
|
212
|
+
0 25px 50px -12px rgba(0, 0, 0, 0.25),
|
|
213
|
+
0 0 0 1px rgba(0, 0, 0, 0.05);
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Quick Decision Checklist
|
|
220
|
+
|
|
221
|
+
- [ ] **Color** - NOT purple, justified choice
|
|
222
|
+
- [ ] **Typography** - NOT Inter/Roboto, unique fonts
|
|
223
|
+
- [ ] **Border radius** - Committed style (sharp OR rounded)
|
|
224
|
+
- [ ] **Shadows** - Elevation hierarchy defined
|
|
225
|
+
- [ ] **Spacing** - 8-point grid consistent
|
|
226
|
+
- [ ] **60-30-10** - Color ratio balanced
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
> **Remember:** Design systems create consistency. Define your tokens ONCE, use everywhere.
|