@luanpdd/kit-mcp 1.31.0 → 1.33.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/README.md +1 -1
- package/kit/COMPATIBILITY.md +5 -0
- package/kit/agents/designer-ui.md +216 -0
- package/kit/agents/supabase-auth-bootstrapper.md +15 -1
- package/kit/agents/supabase-auth-hook-writer.md +418 -0
- package/kit/agents/supabase-mfa-implementer.md +439 -0
- package/kit/agents/supabase-oauth-server-implementer.md +507 -0
- package/kit/agents/supabase-social-auth-implementer.md +451 -0
- package/kit/agents/supabase-sso-saml-architect.md +549 -0
- package/kit/commands/supabase.md +21 -1
- package/kit/file-manifest.json +29 -6
- package/kit/skills/supabase-auth-hardening/SKILL.md +674 -0
- package/kit/skills/supabase-auth-hooks/SKILL.md +875 -0
- package/kit/skills/supabase-auth-methods/SKILL.md +486 -0
- package/kit/skills/supabase-auth-sessions/SKILL.md +579 -0
- package/kit/skills/supabase-auth-ssr/SKILL.md +60 -14
- package/kit/skills/supabase-enterprise-sso-saml/SKILL.md +545 -0
- package/kit/skills/supabase-jwt-signing-keys/SKILL.md +399 -0
- package/kit/skills/supabase-mfa/SKILL.md +488 -0
- package/kit/skills/supabase-oauth-server/SKILL.md +537 -0
- package/kit/skills/supabase-social-oauth/SKILL.md +480 -0
- package/kit/skills/supabase-third-party-auth/SKILL.md +450 -0
- package/kit/skills/ui-anti-padroes-ia/SKILL.md +261 -0
- package/kit/skills/ui-contexto-produto/SKILL.md +248 -0
- package/kit/skills/ui-cor-estrategia/SKILL.md +213 -0
- package/kit/skills/ui-critica-auditoria/SKILL.md +260 -0
- package/kit/skills/ui-motion-funcional/SKILL.md +264 -0
- package/kit/skills/ui-ritmo-espacial/SKILL.md +259 -0
- package/kit/skills/ui-tipografia/SKILL.md +211 -0
- package/package.json +1 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-anti-padroes-ia
|
|
3
|
+
description: Use ao gerar ou revisar UI — catálogo das 18 regras determinísticas que delatam "UI gerada por IA". Categorias Tells-IA (gradiente roxo, card aninhado, monocultura Inter, hero italic-serif, rótulo uppercase decorativo, texto com gradiente, card de borda lateral colorida) e Qualidade (cramped padding, touch < 44px, body flush ao edge, gray-on-colored). Cada regra com grep determinístico para detecção CI-friendly.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UI — Anti-padrões IA
|
|
7
|
+
|
|
8
|
+
## Quando usar
|
|
9
|
+
|
|
10
|
+
LLM carrega esta skill quando:
|
|
11
|
+
|
|
12
|
+
- "Gerar componente / página / layout" (preventivo)
|
|
13
|
+
- "Esse design parece gerado por IA" / "tem cara de Lovable / Bolt / v0 / Replit"
|
|
14
|
+
- "Audite design / verifique tells / detect anti-patterns"
|
|
15
|
+
- "Faça crítica ou auditoria"
|
|
16
|
+
- Antes de declarar feature de UI pronta
|
|
17
|
+
|
|
18
|
+
## Regras absolutas
|
|
19
|
+
|
|
20
|
+
**REGRA #1 (zero P0 antes do ship):** Itens marcados P0 abaixo são deal-breakers. Nenhuma feature merge sem todos os P0 zerados ou justificados em DESIGN.md > Faça/Não faça como override consciente.
|
|
21
|
+
|
|
22
|
+
**REGRA #2 (determinístico primeiro):** Anti-pattern só vira regra desta skill se for grepável. Subjetivos vão para [ui-critica-auditoria](../ui-critica-auditoria/SKILL.md).
|
|
23
|
+
|
|
24
|
+
**REGRA #3 (contexto marca vs produto):** Algumas regras suavizam em marca (gradiente sutil ok), endurecem em produto (zero gradiente). Sempre cite o registro ao classificar.
|
|
25
|
+
|
|
26
|
+
## Catálogo — Tells-IA (deal-breakers)
|
|
27
|
+
|
|
28
|
+
### T01 — Gradientes roxo/violeta (P0)
|
|
29
|
+
|
|
30
|
+
**Tell:** Hero ou CTA com gradiente roxo→rosa, ou roxo→azul. Marca registrada de defaults de modelos 2023-2024.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
grep -rnE "from-(purple|violet|indigo|fuchsia)-[0-9]+ +to-(purple|violet|indigo|pink|fuchsia)-|bg-gradient-to-[a-z]+ +from-(purple|violet)" src 2>/dev/null
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Fix: troque por destaque sólido único OU gradiente brand-específico em duas cores warm/neutras (nunca purple→pink).
|
|
37
|
+
|
|
38
|
+
### T02 — Texto com gradiente (P0)
|
|
39
|
+
|
|
40
|
+
**Tell:** Heading com `bg-clip-text text-transparent` + gradiente.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
grep -rnE "bg-clip-text.*text-transparent|background-clip:\s*text" src 2>/dev/null
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Fix: texto sólido em foreground. Se quer ênfase, peso + tamanho, nunca gradiente.
|
|
47
|
+
|
|
48
|
+
### T03 — Hero com display italic-serif (P0)
|
|
49
|
+
|
|
50
|
+
**Tell:** `<h1>` em italic + serif gigante. "Build *beautiful* products".
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
grep -rnE "<h1[^>]*\b(italic|font-serif)\b[^>]*>" src --include="*.tsx" --include="*.jsx" 2>/dev/null
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Fix: display em grotesk ou regular serif (não italic). Italic só em palavra-chave inline pontual, não 100% do heading.
|
|
57
|
+
|
|
58
|
+
### T04 — Rótulo uppercase decorativo acima do hero (P0)
|
|
59
|
+
|
|
60
|
+
**Tell:** "NEW FEATURE • SHIPPED" — chip pequeno uppercase + tracking-wider acima do H1.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
grep -rnE "uppercase.*tracking-(wider|widest)|text-xs.*uppercase.*tracking" src --include="*.tsx" --include="*.jsx" 2>/dev/null
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Fix: remova. Se tem realmente um anúncio, use banner topo de página ou badge inline pequeno, não decorativo acima do heading.
|
|
67
|
+
|
|
68
|
+
### T05 — Card com borda lateral colorida (P0)
|
|
69
|
+
|
|
70
|
+
**Tell:** Card com `border-l-4 border-blue-500 bg-blue-50`. Visual de "tab indicator" em todo card.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
grep -rnE "border-l-[2-8].*bg-(blue|green|yellow|red|purple)-(50|100)" src 2>/dev/null
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Fix: remova a borda lateral. Se realmente precisa categorizar, use badge de cor ou ícone, não barra vertical.
|
|
77
|
+
|
|
78
|
+
### T06 — Card aninhado (P1)
|
|
79
|
+
|
|
80
|
+
**Tell:** Card dentro de card. `<Card><Card>...</Card></Card>` ou seção inteira embrulhada em card só porque "fica organizado".
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
grep -rln "<Card" src --include="*.tsx" 2>/dev/null | while read f; do
|
|
84
|
+
count=$(grep -c "<Card" "$f")
|
|
85
|
+
[ "$count" -gt 3 ] && echo "$f: $count Card refs"
|
|
86
|
+
done
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Fix: cards são para itens discretos em lista. Section containers usam padding + border-top divider, nunca card.
|
|
90
|
+
|
|
91
|
+
### T07 — Monocultura Inter (P1)
|
|
92
|
+
|
|
93
|
+
**Tell:** Inter como única fonte do projeto.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
grep -rE "font-family.*Inter|font-Inter|--font.*Inter" src --include="*.css" --include="*.ts" --include="*.tsx" 2>/dev/null | head -5
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Fix: combine pelo menos display + body distintos. Display em Söhne, Söhne Breit, Roobert, Inter Display (variante!), Avenir, ou um humanist serif. Inter pode ficar só no body se inevitável.
|
|
100
|
+
|
|
101
|
+
### T08 — Monocultura de fontes saturadas (P1)
|
|
102
|
+
|
|
103
|
+
**Tell:** projeto adota uma das fontes "saturadas 2024-2026" como display:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
grep -rohE "(Fraunces|Geist|Mona Sans|Plus Jakarta Sans|Space Grotesk|Recoleta|Instrument Sans)" \
|
|
107
|
+
src --include="*.ts*" --include="*.css" 2>/dev/null | sort | uniq -c
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Fix: use foundry independente (Klim, Pangram, Grilli, Lineto, Commercial Type, ABC Dinamo) ou pareça com a personalidade do MARCA.md.
|
|
111
|
+
|
|
112
|
+
### T09 — Paleta IA genérica (P1)
|
|
113
|
+
|
|
114
|
+
**Tell:** roxo + verde mint + amarelo claro + cinza neutro. A "paleta padrão de IA".
|
|
115
|
+
|
|
116
|
+
Sinal: olhar `tailwind.config.*` `globals.css` por paleta OKLCH com cromaticidade muito uniforme em ~5-6 cores. Heurística humana — esta regra **não** é puramente grepável, mas o ponto de partida é:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
grep -rnE "oklch\([^)]+\)" src --include="*.css" 2>/dev/null | wc -l
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Se > 30 cores definidas com chroma similar, suspeitar.
|
|
123
|
+
|
|
124
|
+
Fix: derive paleta de ANTI-REFERÊNCIA em MARCA.md. Ex: "parece com Lovable default" → adotar paleta editorial monocromática + 1 destaque.
|
|
125
|
+
|
|
126
|
+
### T10 — Stack glassmorphism (P1)
|
|
127
|
+
|
|
128
|
+
**Tell:** múltiplas camadas de `backdrop-blur` + `bg-white/10` + `border-white/20`. Volta dos mortos do iOS 7.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
grep -rnE "backdrop-blur.*bg-(white|black)/[0-9]+.*border-(white|black)/" src 2>/dev/null
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Fix: max 1 camada com backdrop-blur (header sticky talvez). Senão, superfície sólida.
|
|
135
|
+
|
|
136
|
+
## Catálogo — Qualidade (regardless of source)
|
|
137
|
+
|
|
138
|
+
### Q01 — Touch targets < 44px (P0 a11y)
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
grep -rnE "(h-[1-9]|size-[1-9])\b[^0-9].*onClick|button.*h-[1-9]\b" src --include="*.tsx" 2>/dev/null
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Min 44×44 px (≈ `h-11 w-11` em Tailwind base 4px). Apertado em produto ok mas nunca < 44.
|
|
145
|
+
|
|
146
|
+
### Q02 — Body flush ao viewport edge (P0)
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
grep -rnE "main[^>]*p-0|<body[^>]*p-0|class=[\"'][^\"']*(px-0)\b" src 2>/dev/null
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Fix: sempre `px-4` (mobile) → `px-6` (tablet) → `px-8` (desktop) no min. Texto encostando viewport = sem ar para respirar.
|
|
153
|
+
|
|
154
|
+
### Q03 — Cores hard-coded (P1)
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
grep -rnE "#[0-9a-fA-F]{3,8}\b|\brgb\(|\bhsl\(" \
|
|
158
|
+
src --include="*.tsx" --include="*.jsx" 2>/dev/null | \
|
|
159
|
+
grep -vE "var\(--|tw-|theme\("
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Fix: substitua por token (`text-foreground`, `bg-primary`, `border-border`). Aceitável apenas em SVG ilustrativo.
|
|
163
|
+
|
|
164
|
+
### Q04 — Botão estilizado com contraste baixo (P0 a11y)
|
|
165
|
+
|
|
166
|
+
Custom `<button>` com `bg-*-300` + `text-white` ou `bg-*-200` + `text-*-400`. Falha 4.5:1.
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
grep -rnE "<button[^>]*bg-[a-z]+-([1-3]00)\b" src --include="*.tsx" 2>/dev/null
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Fix: use shadcn variants (`default`, `secondary`, `destructive`) que já passam contraste, ou rode contraste com `npx pa11y` localmente.
|
|
173
|
+
|
|
174
|
+
### Q05 — Anchor com herança silenciosa (P1)
|
|
175
|
+
|
|
176
|
+
`<a>` sem cor explícita, herda do parent. Em `text-muted-foreground` parent → link visível como texto normal.
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
grep -rn "<a " src --include="*.tsx" 2>/dev/null | grep -v "className"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Fix: todo `<a>` em conteúdo tem `text-primary underline-offset-4 hover:underline` ou similar.
|
|
183
|
+
|
|
184
|
+
### Q06 — Padding cramped (P1)
|
|
185
|
+
|
|
186
|
+
`p-1`, `p-2`, `px-2 py-1` em botão importante. Cramped em interactive = hit area pequena + densidade desconfortável.
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
grep -rnE "<button[^>]*\bp[xy]?-(1|2)\b|<Button[^>]*\bp[xy]?-(1|2)\b" src --include="*.tsx" 2>/dev/null
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Fix: min `px-4 py-2` em botões; `px-3 py-1.5` só em badges/chips.
|
|
193
|
+
|
|
194
|
+
### Q07 — Pular nível de heading (h1 → h3) (P1 a11y)
|
|
195
|
+
|
|
196
|
+
Pula nível semântico, screen reader perde hierarquia.
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
grep -rn "<h1\|<h2\|<h3\|<h4" src --include="*.tsx" 2>/dev/null
|
|
200
|
+
# Inspecionar por seção
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Fix: sequência h1 → h2 → h3. Se quer "small heading" use h{N+1} com style, não jumpar nível.
|
|
204
|
+
|
|
205
|
+
### Q08 — Bounce easing (P1)
|
|
206
|
+
|
|
207
|
+
`ease-bounce`, `cubic-bezier(0.68, -0.55, 0.265, 1.55)`. Motion playful em produto = pouco profissional.
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
grep -rnE "bounce|cubic-bezier\(0\.68" src --include="*.css" --include="*.tsx" 2>/dev/null
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Fix: `ease-out` ou `ease-[cubic-bezier(0.2,0.8,0.2,1)]` para interactions. Bounce só em onboarding/celebration moment justificado.
|
|
214
|
+
|
|
215
|
+
## Tabela de severidade
|
|
216
|
+
|
|
217
|
+
| Código | Anti-pattern | Categoria | Severidade | Override por registro |
|
|
218
|
+
|------|--------------|----------|----------|-------------------|
|
|
219
|
+
| T01 | Gradiente roxo | Tells-IA | P0 | Marca pode aceitar gradiente 2 cores warm |
|
|
220
|
+
| T02 | Texto gradiente | Tells-IA | P0 | Nunca |
|
|
221
|
+
| T03 | Italic serif H1 | Tells-IA | P0 | Marca editorial pode (1 keyword inline) |
|
|
222
|
+
| T04 | Rótulo uppercase decorativo | Tells-IA | P0 | Nunca |
|
|
223
|
+
| T05 | Card borda lateral | Tells-IA | P0 | Nunca |
|
|
224
|
+
| T06 | Card aninhado | Tells-IA | P1 | — |
|
|
225
|
+
| T07 | Monocultura Inter | Tells-IA | P1 | Produto corp pode (mas combine display) |
|
|
226
|
+
| T08 | Fonte saturada | Tells-IA | P1 | — |
|
|
227
|
+
| T09 | Paleta IA genérica | Tells-IA | P1 | — |
|
|
228
|
+
| T10 | Glassmorphism | Tells-IA | P1 | Marca pode 1 camada |
|
|
229
|
+
| Q01 | Touch < 44px | Qualidade | P0 | Nunca |
|
|
230
|
+
| Q02 | Edge flush | Qualidade | P0 | Nunca |
|
|
231
|
+
| Q03 | Cor hard-coded | Qualidade | P1 | Aceitável em SVG decorativo |
|
|
232
|
+
| Q04 | Botão contraste baixo | Qualidade | P0 | Nunca |
|
|
233
|
+
| Q05 | Anchor herança | Qualidade | P1 | — |
|
|
234
|
+
| Q06 | Padding cramped | Qualidade | P1 | Produto density-heavy pode menor |
|
|
235
|
+
| Q07 | Pular heading | Qualidade | P1 | Nunca |
|
|
236
|
+
| Q08 | Bounce easing | Qualidade | P1 | Onboarding/celebration ok |
|
|
237
|
+
|
|
238
|
+
## Anti-patterns DESTA skill
|
|
239
|
+
|
|
240
|
+
### Anti-pattern 1: usar como linter cego
|
|
241
|
+
|
|
242
|
+
**Errado:** rodar grep e auto-corrigir tudo P0/P1 sem ler contexto.
|
|
243
|
+
|
|
244
|
+
**Por quê:** parceiro opinativo, não validator. Override consciente em DESIGN.md > Faça/Não faça é legítimo. Paleta IA pode ser intencional se MARCA.md anti-referência disser explicitamente "embrace genérico-de-propósito".
|
|
245
|
+
|
|
246
|
+
**Certo:** Rode detector → apresente findings → discuta com user antes de patches automáticos. Cada P0 ignorado precisa entry em DESIGN.md justificando.
|
|
247
|
+
|
|
248
|
+
### Anti-pattern 2: declarar pronto sem rodar detector
|
|
249
|
+
|
|
250
|
+
**Errado:** "Feature implementada e revisada". Mas grep T01 retorna 3 hits.
|
|
251
|
+
|
|
252
|
+
**Por quê:** REGRA #1 — zero P0 antes de ship. Tells de IA são caros de remover depois (cliente já viu).
|
|
253
|
+
|
|
254
|
+
**Certo:** Detector é último passo antes de commit final. Cole a output do varredor no PR description.
|
|
255
|
+
|
|
256
|
+
## Ver também
|
|
257
|
+
|
|
258
|
+
- [ui-contexto-produto](../ui-contexto-produto/SKILL.md) — Regras (Faça/Não faça) vivem aqui após override
|
|
259
|
+
- [ui-critica-auditoria](../ui-critica-auditoria/SKILL.md) — camada subjetiva (Nielsen, carga cognitiva)
|
|
260
|
+
- [ui-tipografia](../ui-tipografia/SKILL.md) — regras tipográficas detalhadas
|
|
261
|
+
- [ui-cor-estrategia](../ui-cor-estrategia/SKILL.md) — regras de cor detalhadas
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-contexto-produto
|
|
3
|
+
description: Use ANTES de qualquer trabalho de UI — carrega/gera MARCA.md (estratégia: registro marca vs produto, persona, voz, anti-referências) + DESIGN.md (visual: 6 seções canônicas Visão/Cores/Tipografia/Elevação/Componentes/Regras). Estratégia ≠ visual; arquivos separados deliberadamente. Bootstrap canônico de fluência de design para IA.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UI — Contexto de Produto (MARCA.md + DESIGN.md)
|
|
7
|
+
|
|
8
|
+
## Quando usar
|
|
9
|
+
|
|
10
|
+
LLM carrega esta skill quando:
|
|
11
|
+
|
|
12
|
+
- "Desenhe / refine / audite UI" em projeto que ainda não tem brand spec
|
|
13
|
+
- "Crie um DESIGN.md / MARCA.md / docs de design system"
|
|
14
|
+
- "Onboard o IA no design deste projeto"
|
|
15
|
+
- "Faça o ensino / extração de design"
|
|
16
|
+
- Antes de invocar agente `designer-ui` pela primeira vez
|
|
17
|
+
|
|
18
|
+
## Regras absolutas
|
|
19
|
+
|
|
20
|
+
**REGRA #1 (separação de preocupações):** `MARCA.md` responde **estratégia** (quem/o quê/porquê). `DESIGN.md` responde **visual** (como aparenta). Nunca coloque cor, fonte ou pixel em MARCA.md. Nunca coloque persona ou tom de voz em DESIGN.md.
|
|
21
|
+
|
|
22
|
+
**REGRA #2 (registro primeiro):** Primeira pergunta sempre é registro: **marca** (marketing, hero, motion-rich) vs **produto** (dashboard, calm-clinical). Tudo deriva disso.
|
|
23
|
+
|
|
24
|
+
**REGRA #3 (específico, não adjetivo):** Recuse respostas genéricas. "Moderno e limpo" → reject. "Caloroso, mecânico, opinativo" → accept. Referências por **nome próprio**: "Linear sidebar density", não "técnico e limpo".
|
|
25
|
+
|
|
26
|
+
**REGRA #4 (6 seções fixas):** DESIGN.md tem exatamente 6 seções, em ordem fixa, com nomes fixos. NÃO adicione Layout, Motion ou Responsivo como top-level — eles vivem dentro de Componentes ou Regras.
|
|
27
|
+
|
|
28
|
+
**REGRA #5 (ancorado no codebase):** Modo scan lê tokens reais (CSS vars, Tailwind config, shadcn preset). Nunca invente valores que o codebase não suporta — marque como `<!-- RASCUNHO -->` se vier de prompt e não de código.
|
|
29
|
+
|
|
30
|
+
## Template canônico — MARCA.md
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
# MARCA.md
|
|
34
|
+
|
|
35
|
+
> Contexto estratégico para parceiros de design IA. Visuais vivem em DESIGN.md.
|
|
36
|
+
|
|
37
|
+
## Registro
|
|
38
|
+
{marca | produto | híbrido — justifique em 1 linha}
|
|
39
|
+
|
|
40
|
+
## Usuários
|
|
41
|
+
- Primário: {persona específica, contexto, estado de espírito}
|
|
42
|
+
Exemplo: "SRE em on-call às 3h, debugando incidente, só mobile, janela de paciência 90s"
|
|
43
|
+
- Secundário: {se houver}
|
|
44
|
+
|
|
45
|
+
## Propósito
|
|
46
|
+
{O que o produto faz, em 1 frase de no máximo 20 palavras. Sem "platform" ou "solution"}
|
|
47
|
+
|
|
48
|
+
## Personalidade
|
|
49
|
+
3-5 adjetivos. Exemplo: "Calmo, clínico, opinativo, mecânico, sem hype"
|
|
50
|
+
Reject: "moderno, limpo, simples, intuitivo" (genéricos)
|
|
51
|
+
|
|
52
|
+
## Referências
|
|
53
|
+
- {Nome próprio + URL}. Ex: "Linear app — densidade de sidebar"
|
|
54
|
+
- {Nome próprio + URL}. Ex: "Vercel dashboard — empty states"
|
|
55
|
+
|
|
56
|
+
## Anti-referências
|
|
57
|
+
- {Nome próprio + razão}. Ex: "Templates SaaS genéricos — sobreuso de cards"
|
|
58
|
+
- {Nome próprio + razão}. Ex: "Hero Stripe 2014 — era do gradiente roxo"
|
|
59
|
+
|
|
60
|
+
## Voz
|
|
61
|
+
- Tom: {calmo | brincalhão | clínico | caloroso | mecânico | outro}
|
|
62
|
+
- Tempo verbal: {presente padrão | passado para eventos}
|
|
63
|
+
- Frases banidas: {liste 3-5. Ex: "alavancar", "seamless", "incrível"}
|
|
64
|
+
|
|
65
|
+
## Acessibilidade
|
|
66
|
+
- WCAG: {AA | AAA}
|
|
67
|
+
- Locale: {pt-BR primário | en secundário | etc}
|
|
68
|
+
- Sensibilidade a motion: {respeitar prefers-reduced-motion: sim/não — default sim}
|
|
69
|
+
- Daltonismo: {protanopia/deuteranopia testados via tooling}
|
|
70
|
+
|
|
71
|
+
## Restrições
|
|
72
|
+
- {Técnica. Ex: "shadcn/ui locked", "Tailwind v4 OKLCH tokens"}
|
|
73
|
+
- {Negócio. Ex: "deve parecer sério para pitch enterprise"}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Template canônico — DESIGN.md
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
# DESIGN.md
|
|
80
|
+
|
|
81
|
+
> Sistema visual. Agentes IA leem isto antes de gerar UI. 6 seções, ordem fixa.
|
|
82
|
+
|
|
83
|
+
## Visão
|
|
84
|
+
{North Star em 2-3 frases. O "feeling" do produto traduzido em direção visual.}
|
|
85
|
+
Exemplo: "Quietude editorial. Preto sobre creme, accent único, espaçamento generoso, motion apenas em mudança de estado."
|
|
86
|
+
|
|
87
|
+
## Cores
|
|
88
|
+
- Superfície (60%): `{token | hex}` — `--background`
|
|
89
|
+
- Secundária (30%): `{token | hex}` — `--muted`
|
|
90
|
+
- Destaque (10%): `{token | hex}` — reservada para: {liste elementos exatos. Ex: "apenas CTA primário"}
|
|
91
|
+
- Destrutiva: `{token | hex}` — reservada para: confirmação de ação irreversível
|
|
92
|
+
- Foreground / contraste: AA mín 4.5:1 em cada superfície
|
|
93
|
+
Modo: {claro só | escuro só | ambos com pref do sistema}
|
|
94
|
+
|
|
95
|
+
## Tipografia
|
|
96
|
+
- Display ({nome próprio}): h1/h2 hero
|
|
97
|
+
- Body ({nome próprio}): todo o resto
|
|
98
|
+
- Mono ({nome próprio}): código, dados, tempo
|
|
99
|
+
|
|
100
|
+
Tamanhos (exatos, máximo 4): {ex: 14, 16, 20, 32}
|
|
101
|
+
Pesos (exatos, máximo 2): {ex: 400, 600}
|
|
102
|
+
Altura de linha: body 1.5, heading 1.2
|
|
103
|
+
Comprimento de linha: 50-75 chars body, 30-50 hero
|
|
104
|
+
|
|
105
|
+
Banidas: {liste fontes proibidas. Ex: "Inter, Geist, Space Grotesk" se quer fugir do default genérico}
|
|
106
|
+
|
|
107
|
+
## Elevação
|
|
108
|
+
Filosofia: {flat | sombra sutil | dramático | nenhuma}
|
|
109
|
+
Tokens:
|
|
110
|
+
- `elev-0`: `none` — superfície rasa
|
|
111
|
+
- `elev-1`: `{shadow value}` — cards, popovers
|
|
112
|
+
- `elev-2`: `{shadow value}` — modais, command palette
|
|
113
|
+
Anti-pattern: glassmorphism (`backdrop-blur` em ≥ 3 camadas) PROIBIDO
|
|
114
|
+
|
|
115
|
+
## Componentes
|
|
116
|
+
Notas breves de caráter por padrão. Não replique docs do shadcn — declare *o que é opinativo aqui*.
|
|
117
|
+
- **Button**: {raio, peso, altura, caráter}. Ex: "Raio 4px afiado, semibold, h-10, sem sombra"
|
|
118
|
+
- **Card**: {quando usar, quando NÃO}. Ex: "Apenas para itens de dados em lista. Nunca envolva uma seção em card. Nunca aninhe."
|
|
119
|
+
- **Input**: {caráter}. Ex: "Apenas underline, sem borda, foco = border-bottom accent"
|
|
120
|
+
- **Dialog**: {motion, tamanho, dismiss}. Ex: "Slide-from-bottom em mobile, scale central em desktop, ESC sempre dismissa"
|
|
121
|
+
- **Toast**: {posição, duração, caráter}
|
|
122
|
+
|
|
123
|
+
## Regras (Faça / Não faça)
|
|
124
|
+
FAÇA:
|
|
125
|
+
- {regra brand-específica. Ex: "Use cor de destaque APENAS em CTA primário por tela"}
|
|
126
|
+
- {regra. Ex: "Body copy max 70ch — wrap container em 65ch"}
|
|
127
|
+
|
|
128
|
+
NÃO FAÇA:
|
|
129
|
+
- {anti-pattern relevante. Ex: "Sem gradiente em texto. Nunca."}
|
|
130
|
+
- {anti-pattern brand. Ex: "Sem emoji em strings de UI fora de error toasts"}
|
|
131
|
+
- {anti-pattern. Ex: "Nunca envolva headings em italic serif. Display é grotesk."}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Sidecar — DESIGN.json
|
|
135
|
+
|
|
136
|
+
Companion machine-readable. Tokens primários extraídos do codebase:
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"version": "1.0",
|
|
141
|
+
"tokens": {
|
|
142
|
+
"color": {
|
|
143
|
+
"surface": "oklch(0.99 0 0)",
|
|
144
|
+
"muted": "oklch(0.94 0.005 240)",
|
|
145
|
+
"accent": "oklch(0.55 0.18 28)"
|
|
146
|
+
},
|
|
147
|
+
"typography": {
|
|
148
|
+
"display": "Söhne Breit",
|
|
149
|
+
"body": "Söhne",
|
|
150
|
+
"sizes": [14, 16, 20, 32],
|
|
151
|
+
"weights": [400, 600]
|
|
152
|
+
},
|
|
153
|
+
"spacing": [4, 8, 16, 24, 32, 48, 64],
|
|
154
|
+
"radius": { "default": 4, "pill": 9999 }
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Workflow
|
|
160
|
+
|
|
161
|
+
### Modo Scan (codebase existe)
|
|
162
|
+
|
|
163
|
+
1. `Grep` por `tailwind.config.*`, `globals.css`, `:root {` para extrair tokens
|
|
164
|
+
2. `Read` `components.json` (shadcn) para preset
|
|
165
|
+
3. `Glob` `src/components/**` para inventário
|
|
166
|
+
4. Apresentar valores detectados → pedir confirmação para Visão + notas de caráter
|
|
167
|
+
5. Gerar MARCA.md (via entrevista) + DESIGN.md (via scan + confirmação)
|
|
168
|
+
|
|
169
|
+
### Modo Rascunho (greenfield)
|
|
170
|
+
|
|
171
|
+
1. Entrevista de 5-8 minutos. Perguntas mínimas:
|
|
172
|
+
- Registro (marca vs produto)?
|
|
173
|
+
- Usuário primário em 1 frase com contexto + estado de espírito?
|
|
174
|
+
- 3-5 adjetivos de personalidade (não-genéricos)?
|
|
175
|
+
- 2-3 referências **nomeadas** com URL?
|
|
176
|
+
- 2 anti-referências **nomeadas**?
|
|
177
|
+
- Locale + nível WCAG?
|
|
178
|
+
2. Scaffold DESIGN.md com comentários `<!-- RASCUNHO -->` em valores não-extraídos
|
|
179
|
+
3. Marcar para revisão pós-implementação inicial
|
|
180
|
+
|
|
181
|
+
## Anti-patterns
|
|
182
|
+
|
|
183
|
+
### Anti-pattern 1: misturar estratégia e visual
|
|
184
|
+
|
|
185
|
+
**Errado (MARCA.md):**
|
|
186
|
+
```markdown
|
|
187
|
+
## Personalidade
|
|
188
|
+
Moderno, limpo, com #4F46E5 primário
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**Por quê:** REGRA #1 — cor pertence a DESIGN.md. MARCA.md fica fora de sincronia quando rebrand.
|
|
192
|
+
|
|
193
|
+
**Certo:** "Personalidade: Mecânico, opinativo" em MARCA.md. "#4F46E5" em DESIGN.md > Cores > Destaque.
|
|
194
|
+
|
|
195
|
+
### Anti-pattern 2: respostas adjetivais genéricas
|
|
196
|
+
|
|
197
|
+
**Errado:**
|
|
198
|
+
```markdown
|
|
199
|
+
## Referências
|
|
200
|
+
- Apps SaaS modernos
|
|
201
|
+
- Design systems limpos
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Por quê:** REGRA #3 — sem nome próprio, IA volta ao default genérico ("dribbble médio").
|
|
205
|
+
|
|
206
|
+
**Certo:**
|
|
207
|
+
```markdown
|
|
208
|
+
## Referências
|
|
209
|
+
- [Linear](https://linear.app) — densidade de sidebar + gravidade do command palette
|
|
210
|
+
- [Klim Type Foundry](https://klim.co.nz) — hero editorial quieto
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Anti-pattern 3: criar Layout/Motion/Responsivo como seção top-level em DESIGN.md
|
|
214
|
+
|
|
215
|
+
**Errado:**
|
|
216
|
+
```markdown
|
|
217
|
+
## Visão
|
|
218
|
+
## Cores
|
|
219
|
+
## Tipografia
|
|
220
|
+
## Layout ← não!
|
|
221
|
+
## Motion ← não!
|
|
222
|
+
## Responsivo ← não!
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Por quê:** REGRA #4 — schema canônico tem 6 seções fixas. Layout/motion/responsivo são propriedades dos Componentes ou regras em Faça/Não faça. Agentes IA downstream esperam o schema fixo.
|
|
226
|
+
|
|
227
|
+
**Certo:** Embuta em Componentes ("Dialog: slide-from-bottom em mobile, scale central em desktop") ou Regras ("FAÇA: respeitar prefers-reduced-motion").
|
|
228
|
+
|
|
229
|
+
### Anti-pattern 4: MARCA.md sem anti-referências
|
|
230
|
+
|
|
231
|
+
**Errado:**
|
|
232
|
+
```markdown
|
|
233
|
+
## Referências
|
|
234
|
+
- Linear
|
|
235
|
+
## Personalidade
|
|
236
|
+
- Limpo
|
|
237
|
+
```
|
|
238
|
+
(sem anti-referências)
|
|
239
|
+
|
|
240
|
+
**Por quê:** IA tende a regressão à média. Sem "NÃO se parecer com X", o output gravita para template SaaS médio mesmo com referências fortes.
|
|
241
|
+
|
|
242
|
+
**Certo:** sempre 2+ anti-referências nomeadas com razão.
|
|
243
|
+
|
|
244
|
+
## Ver também
|
|
245
|
+
|
|
246
|
+
- [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md) — catálogo de tells a evitar (alimenta seção Não faça de DESIGN.md)
|
|
247
|
+
- [ui-tipografia](../ui-tipografia/SKILL.md) — preenche seção Tipografia
|
|
248
|
+
- [ui-cor-estrategia](../ui-cor-estrategia/SKILL.md) — preenche seção Cores
|