up-cc 0.3.3 → 0.4.1
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 +259 -49
- package/agents/up-api-tester.md +405 -0
- package/agents/up-arquiteto.md +461 -0
- package/agents/up-backend-specialist.md +158 -0
- package/agents/up-blind-validator.md +259 -0
- package/agents/up-clone-crawler.md +234 -0
- package/agents/up-clone-design-extractor.md +227 -0
- package/agents/up-clone-feature-mapper.md +225 -0
- package/agents/up-clone-prd-writer.md +169 -0
- package/agents/up-clone-verifier.md +227 -0
- package/agents/up-code-reviewer.md +225 -0
- package/agents/up-database-specialist.md +152 -0
- package/agents/up-devops-agent.md +203 -0
- package/agents/up-executor.md +45 -5
- package/agents/up-exhaustive-tester.md +348 -0
- package/agents/up-frontend-specialist.md +135 -0
- package/agents/up-product-analyst.md +192 -0
- package/agents/up-qa-agent.md +171 -0
- package/agents/up-requirements-validator.md +230 -0
- package/agents/up-security-reviewer.md +137 -0
- package/agents/up-system-designer.md +332 -0
- package/agents/up-technical-writer.md +188 -0
- package/agents/up-visual-critic.md +358 -0
- package/bin/up-tools.cjs +84 -2
- package/commands/clone-builder.md +67 -0
- package/commands/dashboard.md +48 -0
- package/commands/depurar.md +1 -1
- package/commands/mobile-first.md +71 -0
- package/commands/modo-builder.md +178 -0
- package/commands/ux-tester.md +63 -0
- package/package.json +1 -1
- package/references/blueprints/audit.md +29 -0
- package/references/blueprints/booking.md +49 -0
- package/references/blueprints/community.md +48 -0
- package/references/blueprints/crm.md +40 -0
- package/references/blueprints/dashboard.md +48 -0
- package/references/blueprints/data-management.md +42 -0
- package/references/blueprints/ecommerce.md +51 -0
- package/references/blueprints/marketplace.md +48 -0
- package/references/blueprints/notifications.md +32 -0
- package/references/blueprints/saas-users.md +50 -0
- package/references/blueprints/settings.md +31 -0
- package/references/engineering-principles.md +205 -0
- package/references/production-requirements.md +106 -0
- package/references/state-persistence.md +74 -0
- package/templates/builder-defaults.md +73 -0
- package/templates/delivery.md +279 -0
- package/templates/design-tokens.md +151 -0
- package/workflows/builder-e2e.md +501 -0
- package/workflows/builder.md +2248 -0
- package/workflows/clone-builder.md +320 -0
- package/workflows/executar-fase.md +28 -2
- package/workflows/executar-plano.md +404 -6
- package/workflows/mobile-first.md +692 -0
- package/workflows/novo-projeto.md +22 -0
- package/workflows/rapido.md +1 -1
- package/workflows/ux-tester.md +500 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Blueprint: SaaS Users & Permissions
|
|
2
|
+
|
|
3
|
+
Aplicar quando: sistema tem login, multiplos usuarios, ou qualquer menção a "admin", "roles", "permissoes".
|
|
4
|
+
Praticamente TODO sistema web com auth precisa deste blueprint.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Autenticacao (AUTH)
|
|
9
|
+
|
|
10
|
+
- AUTH-01: Login com email/senha
|
|
11
|
+
- AUTH-02: Signup com verificacao de email
|
|
12
|
+
- AUTH-03: Forgot password (enviar link de reset)
|
|
13
|
+
- AUTH-04: Reset password (pagina com token)
|
|
14
|
+
- AUTH-05: Alteracao de senha (logado, exige senha atual)
|
|
15
|
+
- AUTH-06: Logout com limpeza de sessao
|
|
16
|
+
- AUTH-07: Sessao persistente (refresh token / remember me)
|
|
17
|
+
- AUTH-08: Redirect pos-login para pagina de origem
|
|
18
|
+
- AUTH-09: Loading state durante verificacao de auth (nao piscar login)
|
|
19
|
+
- AUTH-10: OAuth social (Google, GitHub) — se aplicavel ao dominio
|
|
20
|
+
|
|
21
|
+
## Perfil de Usuario (PROFILE)
|
|
22
|
+
|
|
23
|
+
- PROFILE-01: Pagina de perfil (nome, email, foto, contato)
|
|
24
|
+
- PROFILE-02: Upload de foto de perfil (com crop/resize)
|
|
25
|
+
- PROFILE-03: Edicao de dados pessoais
|
|
26
|
+
- PROFILE-04: Visualizacao de plano/role atual
|
|
27
|
+
- PROFILE-05: Historico de atividade do usuario
|
|
28
|
+
|
|
29
|
+
## Roles e Permissoes (ROLE)
|
|
30
|
+
|
|
31
|
+
- ROLE-01: Definir roles do sistema (ex: admin, gerente, atendente, cliente)
|
|
32
|
+
- ROLE-02: Cada role tem permissoes especificas (CRUD por modulo)
|
|
33
|
+
- ROLE-03: Tabela de permissoes: role × modulo × acao (ver, criar, editar, deletar)
|
|
34
|
+
- ROLE-04: UI adapta baseado no role (menus, botoes, paginas visiveis)
|
|
35
|
+
- ROLE-05: API valida permissoes (nao depender apenas do front)
|
|
36
|
+
- ROLE-06: Role padrao para novos usuarios (configuravel)
|
|
37
|
+
- ROLE-07: Super admin (acesso total, nao removivel)
|
|
38
|
+
|
|
39
|
+
## Gestao de Usuarios (USRMGMT)
|
|
40
|
+
|
|
41
|
+
- USRMGMT-01: Listar usuarios (com busca, filtro por role, paginacao)
|
|
42
|
+
- USRMGMT-02: Criar usuario (nome, email, role, senha temporaria ou convite)
|
|
43
|
+
- USRMGMT-03: Editar usuario (nome, email, role)
|
|
44
|
+
- USRMGMT-04: Desativar/reativar usuario (soft delete, nao hard delete)
|
|
45
|
+
- USRMGMT-05: Reset de senha por admin (gerar link de reset)
|
|
46
|
+
- USRMGMT-06: Alterar role de usuario
|
|
47
|
+
- USRMGMT-07: Convite por email (link de signup com role pre-definido)
|
|
48
|
+
- USRMGMT-08: Indicador de status (ativo, inativo, pendente convite)
|
|
49
|
+
- USRMGMT-09: Acessivel apenas para admin
|
|
50
|
+
- USRMGMT-10: Log de alteracoes (quem mudou o que)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Blueprint: Settings & Configuration
|
|
2
|
+
|
|
3
|
+
Aplicar quando: sistema tem configuracoes ajustaveis pelo usuario ou admin.
|
|
4
|
+
Praticamente TODO sistema SaaS precisa deste blueprint.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Perfil & Conta (ACCT)
|
|
9
|
+
|
|
10
|
+
- ACCT-01: Pagina de configuracoes com sidebar/tabs por secao
|
|
11
|
+
- ACCT-02: Secao "Perfil" (nome, foto, bio, contato)
|
|
12
|
+
- ACCT-03: Secao "Seguranca" (alterar senha, sessoes ativas)
|
|
13
|
+
- ACCT-04: Secao "Notificacoes" (preferencias de canal e tipo)
|
|
14
|
+
- ACCT-05: Secao "Aparencia" (tema claro/escuro, idioma)
|
|
15
|
+
- ACCT-06: Secao "Dados" (export dos meus dados, deletar conta)
|
|
16
|
+
- ACCT-07: Save com feedback (toast de sucesso)
|
|
17
|
+
|
|
18
|
+
## Configuracao do Negocio — Admin Only (BIZ)
|
|
19
|
+
|
|
20
|
+
- BIZ-01: Dados do negocio (nome, logo, endereco, CNPJ, contato)
|
|
21
|
+
- BIZ-02: Horario de funcionamento
|
|
22
|
+
- BIZ-03: Configuracao de moeda e locale
|
|
23
|
+
- BIZ-04: Configuracao de email (remetente, templates)
|
|
24
|
+
- BIZ-05: Integrações ativas (toggle on/off, chaves de API)
|
|
25
|
+
- BIZ-06: Plano atual e billing info (se SaaS multi-tenant)
|
|
26
|
+
|
|
27
|
+
## Customizacao Visual — Admin Only (THEME)
|
|
28
|
+
|
|
29
|
+
- THEME-01: Logo upload
|
|
30
|
+
- THEME-02: Cores primarias (se white-label)
|
|
31
|
+
- THEME-03: Favicon customizado
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Engineering Principles
|
|
2
|
+
|
|
3
|
+
Principios que governam TODA decisao de implementacao no UP.
|
|
4
|
+
Carregado por todos os agentes executores (up-executor, up-frontend-specialist, up-backend-specialist, up-database-specialist).
|
|
5
|
+
|
|
6
|
+
Estes principios existem porque IAs tendem a escolher o caminho mais facil, nao o melhor. Cada principio combate um vicio especifico.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Principio 1: Implementacao real, nao simulacao
|
|
11
|
+
|
|
12
|
+
NUNCA entregue codigo que PARECE funcionar mas nao funciona de verdade.
|
|
13
|
+
|
|
14
|
+
**Violacoes comuns (PROIBIDO):**
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// ❌ Handler vazio
|
|
18
|
+
onClick={() => {}}
|
|
19
|
+
|
|
20
|
+
// ❌ Componente placeholder
|
|
21
|
+
function UserList() {
|
|
22
|
+
return <div>User List</div>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// ❌ API que retorna estatico
|
|
26
|
+
export async function GET() {
|
|
27
|
+
return Response.json({ ok: true })
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// ❌ Form que nao envia
|
|
31
|
+
onSubmit={(e) => e.preventDefault()}
|
|
32
|
+
|
|
33
|
+
// ❌ Estado que nunca popula
|
|
34
|
+
const [users, setUsers] = useState([])
|
|
35
|
+
// ... nunca chama setUsers com dados reais
|
|
36
|
+
|
|
37
|
+
// ❌ Import decorativo
|
|
38
|
+
import { analytics } from './analytics'
|
|
39
|
+
// ... nunca chama analytics
|
|
40
|
+
|
|
41
|
+
// ❌ Fetch sem uso
|
|
42
|
+
const data = await fetch('/api/users')
|
|
43
|
+
// ... nunca usa data
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**O que fazer quando nao pode implementar agora:**
|
|
47
|
+
|
|
48
|
+
Se falta API externa, credencial ou dependencia:
|
|
49
|
+
1. NAO finja que funciona
|
|
50
|
+
2. Declare explicitamente no SUMMARY como "nao implementado — motivo: X"
|
|
51
|
+
3. Deixe o codigo com erro CLARO, nao silencio enganoso:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
// ✅ Correto: explicitamente nao implementado
|
|
55
|
+
function exportCSV() {
|
|
56
|
+
throw new Error('Export CSV nao implementado — aguardando endpoint /api/export')
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Principio 2: A implementacao correta, nao a mais rapida
|
|
63
|
+
|
|
64
|
+
Quando existem duas abordagens — a rapida que funciona superficialmente e a correta que trata todos os cenarios — SEMPRE escolha a correta.
|
|
65
|
+
|
|
66
|
+
| Situacao | ❌ Atalho | ✅ Correto |
|
|
67
|
+
|----------|----------|-----------|
|
|
68
|
+
| Validar email | `.includes('@')` | Regex ou library (zod, yup) |
|
|
69
|
+
| Tipagem | `any` para compilar | Interface/type definido |
|
|
70
|
+
| Catch erro | `catch(e) {}` vazio | `catch(e) { toast.error(e.message) }` |
|
|
71
|
+
| Query SQL | `WHERE id = ${id}` | `WHERE id = $1`, [id] |
|
|
72
|
+
| Acesso array | `data[0]` direto | `data?.length ? data[0] : null` |
|
|
73
|
+
| Checar null | `if (data)` generico | `if (data !== null && data !== undefined)` |
|
|
74
|
+
| Comparacao | `==` | `===` |
|
|
75
|
+
| Copiar objeto | `Object.assign` raso | `structuredClone` ou spread profundo |
|
|
76
|
+
| Lidar com datas | String manipulation | Library (date-fns, dayjs) |
|
|
77
|
+
| Gerar ID | `Math.random()` | `crypto.randomUUID()` |
|
|
78
|
+
|
|
79
|
+
**Teste mental:** "Se um dev senior revisasse esse codigo, ele aceitaria ou pediria mudanca?"
|
|
80
|
+
Se pediria mudanca → faca a versao correta agora.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Principio 3: Conectado de ponta a ponta
|
|
85
|
+
|
|
86
|
+
Codigo NAO esta "pronto" ate que esteja WIRED — conectado e funcionando do ponto de vista do usuario final.
|
|
87
|
+
|
|
88
|
+
**Checklist de wiring:**
|
|
89
|
+
|
|
90
|
+
| Criado | Conectado a | Verificacao |
|
|
91
|
+
|--------|-------------|-------------|
|
|
92
|
+
| Componente | Layout/pagina + rota navegavel | Acessar URL, componente renderiza |
|
|
93
|
+
| API endpoint | Frontend chama + response tratado | curl funciona + UI mostra dados |
|
|
94
|
+
| Schema/migration | Migration rodada + queries usando | Dados persistem e retornam |
|
|
95
|
+
| Validacao | Aplicada no form + feedback visivel | Submeter invalido, ver mensagem |
|
|
96
|
+
| Estado (store) | Mutations conectadas + UI reflete | Mutar, UI atualiza |
|
|
97
|
+
| Auth guard | Rota protegida + redirect se nao logado | Acessar sem login, redireciona |
|
|
98
|
+
| Event handler | Botao/elemento + acao executa | Clicar, algo acontece |
|
|
99
|
+
|
|
100
|
+
**"O arquivo existe" ≠ "funciona".**
|
|
101
|
+
**"Funciona" = usuario final consegue usar no browser.**
|
|
102
|
+
|
|
103
|
+
Apos CADA tarefa, verificar wiring:
|
|
104
|
+
- Backend: `curl` o endpoint, verificar response
|
|
105
|
+
- Frontend: navegar a pagina, verificar que renderiza e responde
|
|
106
|
+
- Integracao: frontend chama backend, dados fluem
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Principio 4: Consistencia sobre criatividade
|
|
111
|
+
|
|
112
|
+
NAO invente patterns novos quando o projeto ja tem um pattern estabelecido.
|
|
113
|
+
|
|
114
|
+
**Antes de implementar qualquer coisa:**
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 1. Buscar implementacao similar no codebase
|
|
118
|
+
grep -r "similar_pattern" src/ --include="*.ts" --include="*.tsx"
|
|
119
|
+
|
|
120
|
+
# 2. Se existe: SEGUIR o mesmo pattern
|
|
121
|
+
# 3. Se nao existe: estabelecer pattern e ser consistente daqui pra frente
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Exemplos:**
|
|
125
|
+
|
|
126
|
+
| Projeto usa | ❌ NAO faca | ✅ Faca |
|
|
127
|
+
|-------------|-----------|--------|
|
|
128
|
+
| React Query | `fetch` manual com useState | `useQuery`/`useMutation` |
|
|
129
|
+
| Componente Button | `<button className="...">` raw | `<Button variant="primary">` |
|
|
130
|
+
| Tailwind | `style={{ color: 'blue' }}` | `className="text-blue-500"` |
|
|
131
|
+
| Zod validation | `if (!email.includes('@'))` manual | `z.string().email()` |
|
|
132
|
+
| Toast via Sonner | `alert('Sucesso')` | `toast.success('Sucesso')` |
|
|
133
|
+
| tRPC | REST fetch manual | `trpc.resource.query()` |
|
|
134
|
+
| Supabase client | `fetch('/api/...')` wrapper | `supabase.from('...').select()` |
|
|
135
|
+
|
|
136
|
+
**Regra geral:** Se o codebase ja resolveu esse problema, use a mesma solucao.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Principio 5: Dados reais desde o primeiro momento
|
|
141
|
+
|
|
142
|
+
NAO use mock data como solucao permanente.
|
|
143
|
+
|
|
144
|
+
**Ordem de preferencia:**
|
|
145
|
+
1. Banco de dados real com seed data → IDEAL
|
|
146
|
+
2. API real com dados de teste → BOM
|
|
147
|
+
3. Mock temporario removido antes do commit → ACEITAVEL
|
|
148
|
+
4. Hardcoded no componente como solucao final → PROIBIDO
|
|
149
|
+
|
|
150
|
+
**Se o banco existe:** Conecte desde o primeiro componente.
|
|
151
|
+
**Se precisa seed:** Crie migration/seed file, NAO hardcode:
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
// ❌ PROIBIDO: dados fake no componente
|
|
155
|
+
const transactions = [
|
|
156
|
+
{ id: 1, amount: 100, description: 'Test' },
|
|
157
|
+
{ id: 2, amount: 200, description: 'Test 2' },
|
|
158
|
+
]
|
|
159
|
+
|
|
160
|
+
// ✅ CORRETO: buscar do banco
|
|
161
|
+
const { data: transactions } = useQuery({
|
|
162
|
+
queryKey: ['transactions'],
|
|
163
|
+
queryFn: () => supabase.from('transactions').select('*')
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
// ✅ E criar seed separado:
|
|
167
|
+
// supabase/seed.sql ou prisma/seed.ts
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Mock aceitavel APENAS em:**
|
|
171
|
+
- Testes automatizados (vi.mock, jest.mock)
|
|
172
|
+
- Desenvolvimento temporario (removido antes do commit)
|
|
173
|
+
- API externa indisponivel (documentar explicitamente)
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Principio 6: Cada decisao tem custo futuro
|
|
178
|
+
|
|
179
|
+
Antes de escolher a abordagem facil, pergunte: **"Se o projeto crescer 10x, essa decisao vai causar retrabalho?"**
|
|
180
|
+
|
|
181
|
+
| Atalho agora | Custo futuro |
|
|
182
|
+
|-------------|-------------|
|
|
183
|
+
| Tudo num arquivo so | Refatorar quando ficar ilegivel |
|
|
184
|
+
| Sem tipagem | Bugs silenciosos, refatorar depois |
|
|
185
|
+
| Sem validacao | Dados lixo no banco, limpar depois |
|
|
186
|
+
| Sem pagination | App trava com 10k items |
|
|
187
|
+
| Sem error handling | Crash em producao, debug cego |
|
|
188
|
+
| Sem indices no banco | Queries lentas com volume |
|
|
189
|
+
| Sem loading states | UX ruim, usuario acha que travou |
|
|
190
|
+
| CSS inline/hardcoded | Inconsistencia visual, refatorar tema |
|
|
191
|
+
| Sem env vars | Credenciais expostas, security breach |
|
|
192
|
+
| Sem testes | Medo de mudar codigo, regressoes |
|
|
193
|
+
|
|
194
|
+
**Se a resposta for "sim, vai causar retrabalho":** faca certo agora. O custo de fazer certo e linear. O custo de refatorar depois e exponencial.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Como aplicar durante execucao
|
|
199
|
+
|
|
200
|
+
1. **Antes de cada tarefa:** Reler os principios mentalmente
|
|
201
|
+
2. **Durante implementacao:** A cada decisao, checar se viola algum principio
|
|
202
|
+
3. **Antes de commitar:** Self-review rapido contra os 6 principios
|
|
203
|
+
4. **No SUMMARY:** Documentar decisoes onde o principio influenciou a escolha
|
|
204
|
+
|
|
205
|
+
**Se violar um principio para cumprir deadline:** Documentar como debito tecnico no SUMMARY, NAO fingir que esta correto.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Production Requirements Reference
|
|
2
|
+
|
|
3
|
+
Checklist de requisitos que TODO sistema pronto para producao deve ter.
|
|
4
|
+
O up-system-designer e up-arquiteto usam esta referencia para injetar requisitos automaticamente.
|
|
5
|
+
|
|
6
|
+
Cada item e um requisito com ID sugerido. O arquiteto ajusta IDs para nao colidir com requisitos explicitos do usuario.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## UI States (UIST)
|
|
11
|
+
|
|
12
|
+
- UIST-01: Loading state (skeleton ou spinner) em TODA operacao assincrona
|
|
13
|
+
- UIST-02: Error state com mensagem clara e botao de retry
|
|
14
|
+
- UIST-03: Empty state com orientacao de acao ("Nenhum item ainda. Clique em + para criar.")
|
|
15
|
+
- UIST-04: Success feedback (toast) para TODA acao mutativa (criar, editar, deletar)
|
|
16
|
+
- UIST-05: Disabled state em botoes durante submissao (evitar double-click)
|
|
17
|
+
- UIST-06: Skeleton loading em vez de spinner generico para conteudo principal
|
|
18
|
+
- UIST-07: Optimistic updates onde aplicavel (UI responde antes da API)
|
|
19
|
+
- UIST-08: Confirmacao antes de acoes destrutivas (deletar, cancelar)
|
|
20
|
+
|
|
21
|
+
## Error Handling (ERR)
|
|
22
|
+
|
|
23
|
+
- ERR-01: Error boundary no layout raiz com fallback UI amigavel
|
|
24
|
+
- ERR-02: Error boundary por feature/rota (erro em uma secao nao derruba o app)
|
|
25
|
+
- ERR-03: Try/catch em toda operacao de API com mensagem amigavel
|
|
26
|
+
- ERR-04: Tratamento de sessao expirada (redirect para login com mensagem)
|
|
27
|
+
- ERR-05: Pagina 404 customizada com navegacao de volta
|
|
28
|
+
- ERR-06: Tratamento de erros de rede (offline, timeout) com retry
|
|
29
|
+
- ERR-07: Validacao server-side alem de client-side (nunca confiar so no front)
|
|
30
|
+
- ERR-08: Logging de erros no console (dev) sem expor em producao
|
|
31
|
+
|
|
32
|
+
## Performance (PERF)
|
|
33
|
+
|
|
34
|
+
- PERF-01: Lazy loading de imagens (loading="lazy" ou next/image)
|
|
35
|
+
- PERF-02: Code splitting por rota (dynamic imports / React.lazy)
|
|
36
|
+
- PERF-03: Debounce em inputs de busca/filtro (300ms)
|
|
37
|
+
- PERF-04: Pagination ou infinite scroll para listas > 20 items
|
|
38
|
+
- PERF-05: Caching de queries (React Query / SWR / tRPC cache / staleTime)
|
|
39
|
+
- PERF-06: Memoizacao de componentes pesados (React.memo, useMemo)
|
|
40
|
+
- PERF-07: Evitar re-renders desnecessarios (keys corretas, deps do useEffect)
|
|
41
|
+
- PERF-08: Compressao de imagens e assets (WebP, SVG onde possivel)
|
|
42
|
+
- PERF-09: Prefetch de rotas provaveis (next/link prefetch)
|
|
43
|
+
|
|
44
|
+
## Forms (FORM)
|
|
45
|
+
|
|
46
|
+
- FORM-01: Validacao inline (ao sair do campo ou ao digitar, nao so no submit)
|
|
47
|
+
- FORM-02: Mensagens de erro especificas por campo ("Email invalido" nao "Erro")
|
|
48
|
+
- FORM-03: Botao desabilitado durante submissao com loading indicator
|
|
49
|
+
- FORM-04: Autofocus no primeiro campo ao abrir form
|
|
50
|
+
- FORM-05: Tab order logica (sem pular campos)
|
|
51
|
+
- FORM-06: Defaults inteligentes onde possivel (data=hoje, moeda=BRL)
|
|
52
|
+
- FORM-07: Preservar dados do form se usuario navegar e voltar
|
|
53
|
+
- FORM-08: Mascara de input onde aplicavel (telefone, CPF, CEP, moeda)
|
|
54
|
+
|
|
55
|
+
## Responsividade (RESP)
|
|
56
|
+
|
|
57
|
+
- RESP-01: Layout funcional em 375px (iPhone SE) — sem overflow horizontal
|
|
58
|
+
- RESP-02: Touch targets minimo 44x44px em mobile
|
|
59
|
+
- RESP-03: Navegacao adaptada (hamburger/drawer em mobile)
|
|
60
|
+
- RESP-04: Tabelas com scroll horizontal ou layout de cards em mobile
|
|
61
|
+
- RESP-05: Modais fullscreen em mobile, dialog em desktop
|
|
62
|
+
- RESP-06: Fonte legivel (min 14px body, min 12px labels)
|
|
63
|
+
- RESP-07: Imagens responsivas (max-w-full, h-auto)
|
|
64
|
+
|
|
65
|
+
## Meta/SEO (META)
|
|
66
|
+
|
|
67
|
+
- META-01: Title unico por pagina
|
|
68
|
+
- META-02: Meta description por pagina
|
|
69
|
+
- META-03: OG tags (image, title, description) para compartilhamento social
|
|
70
|
+
- META-04: Favicon (multiplos tamanhos)
|
|
71
|
+
- META-05: Web manifest (PWA-ready)
|
|
72
|
+
- META-06: Canonical URL
|
|
73
|
+
- META-07: Robots meta (noindex para paginas privadas)
|
|
74
|
+
|
|
75
|
+
## Acessibilidade (A11Y)
|
|
76
|
+
|
|
77
|
+
- A11Y-01: Alt text em todas as imagens
|
|
78
|
+
- A11Y-02: Labels associados a todos os inputs (htmlFor/id)
|
|
79
|
+
- A11Y-03: Focus visible em elementos interativos (outline, ring)
|
|
80
|
+
- A11Y-04: Keyboard navigation funcional (tab, enter, escape)
|
|
81
|
+
- A11Y-05: Aria labels em botoes de icone (sem texto visivel)
|
|
82
|
+
- A11Y-06: Hierarquia de headings (h1 > h2 > h3, sem pular niveis)
|
|
83
|
+
- A11Y-07: Contraste minimo 4.5:1 em texto
|
|
84
|
+
- A11Y-08: Skip to content link
|
|
85
|
+
- A11Y-09: Landmarks (header, main, nav, footer)
|
|
86
|
+
|
|
87
|
+
## Seguranca (SEC)
|
|
88
|
+
|
|
89
|
+
- SEC-01: Protecao de rotas autenticadas (redirect se nao logado)
|
|
90
|
+
- SEC-02: CSRF protection em forms
|
|
91
|
+
- SEC-03: Sanitizacao de inputs (evitar XSS)
|
|
92
|
+
- SEC-04: Rate limiting em endpoints sensiveis (login, signup, reset)
|
|
93
|
+
- SEC-05: Headers de seguranca (CSP, X-Frame-Options, etc.)
|
|
94
|
+
- SEC-06: Nao expor IDs sequenciais (usar UUID)
|
|
95
|
+
- SEC-07: Env vars nunca expostas no client-side
|
|
96
|
+
- SEC-08: RLS (Row Level Security) se usando Supabase
|
|
97
|
+
|
|
98
|
+
## Visual Polish (POLISH)
|
|
99
|
+
|
|
100
|
+
- POLISH-01: Hover states em todos elementos clicaveis
|
|
101
|
+
- POLISH-02: Transicoes suaves em mudancas de estado (150-300ms)
|
|
102
|
+
- POLISH-03: Consistencia de espacamento (usar escala: 4, 8, 12, 16, 24, 32, 48)
|
|
103
|
+
- POLISH-04: Consistencia de cores (usar design tokens, nao hex hardcoded)
|
|
104
|
+
- POLISH-05: Consistencia de tipografia (max 2 fontes, escala definida)
|
|
105
|
+
- POLISH-06: Dark mode (opcional mas cada vez mais esperado)
|
|
106
|
+
- POLISH-07: Favicon que funciona em light e dark mode
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Persistência de Estado entre Sessões
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Instruções para Claude Code salvar estado do projeto automaticamente, mesmo fora de comandos /up:.
|
|
5
|
+
Quando o projeto tem `.plano/STATE.md`, TODA sessão produtiva deve registrar o que foi feito.
|
|
6
|
+
</purpose>
|
|
7
|
+
|
|
8
|
+
## Regra Principal
|
|
9
|
+
|
|
10
|
+
Se o diretório `.plano/` existe com `STATE.md`, você DEVE salvar o estado da sessão ao final de trabalho significativo — independente de ter usado comandos `/up:` ou não.
|
|
11
|
+
|
|
12
|
+
**Trabalho significativo** = qualquer coisa que mude o projeto de forma relevante:
|
|
13
|
+
- Correção de bugs
|
|
14
|
+
- Implementação de features (parcial ou completa)
|
|
15
|
+
- Refatoração
|
|
16
|
+
- Decisões de arquitetura
|
|
17
|
+
- Debug e investigação com conclusões
|
|
18
|
+
- Configuração de infra/deploy
|
|
19
|
+
|
|
20
|
+
**NÃO é significativo** (não precisa salvar):
|
|
21
|
+
- Leitura exploratória sem conclusão
|
|
22
|
+
- Perguntas conceituais
|
|
23
|
+
- Revisão sem alterações
|
|
24
|
+
|
|
25
|
+
## Como Salvar
|
|
26
|
+
|
|
27
|
+
Um único comando faz tudo (atualiza timestamp, descrição, atividade, e commita):
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node "$HOME/.claude/up/bin/up-tools.cjs" state save-session --summary "descrição do que foi feito"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Se houve decisão importante:**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
node "$HOME/.claude/up/bin/up-tools.cjs" state save-session \
|
|
37
|
+
--summary "descrição do que foi feito" \
|
|
38
|
+
--decision "decisão tomada e por quê" \
|
|
39
|
+
--phase 2
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Se não quer commitar automaticamente:**
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
node "$HOME/.claude/up/bin/up-tools.cjs" state save-session --summary "descrição" --no-commit
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Quando Salvar
|
|
49
|
+
|
|
50
|
+
1. **Final da conversa** — quando o trabalho está concluído ou pausado
|
|
51
|
+
2. **Após resolver um bug** — mesmo que veio de continuação pós-agente
|
|
52
|
+
3. **Após implementar algo** — mesmo parcialmente
|
|
53
|
+
4. **Antes de sugerir /clear** — salvar estado garante continuidade
|
|
54
|
+
|
|
55
|
+
## O que Escrever no --summary
|
|
56
|
+
|
|
57
|
+
Seja específico e útil para a próxima sessão:
|
|
58
|
+
|
|
59
|
+
- BOM: "Corrigido bug de autenticação — token expirado não redirecionava para login. Alterado middleware em src/auth.ts"
|
|
60
|
+
- BOM: "Implementado componente de filtro de datas. Falta integrar com API de relatórios"
|
|
61
|
+
- RUIM: "Feitas correções"
|
|
62
|
+
- RUIM: "Trabalhado no projeto"
|
|
63
|
+
|
|
64
|
+
## Integração com CLAUDE.md do Projeto
|
|
65
|
+
|
|
66
|
+
Quando `/up:novo-projeto` ou `/up:modo-builder` inicializa um projeto, adicionar ao CLAUDE.md do projeto:
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
## UP: Persistência de Estado
|
|
70
|
+
|
|
71
|
+
Este projeto usa o sistema UP. Se `.plano/STATE.md` existir:
|
|
72
|
+
- Ao final de trabalho significativo, salvar estado: `node "$HOME/.claude/up/bin/up-tools.cjs" state save-session --summary "o que foi feito"`
|
|
73
|
+
- Isso garante continuidade entre sessões mesmo sem usar comandos /up:
|
|
74
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Builder Defaults Template
|
|
2
|
+
|
|
3
|
+
Template para `~/.claude/up/builder-defaults.md` -- decisoes padrao do usuario para o modo builder.
|
|
4
|
+
O usuario customiza uma vez e vale para todos os projetos criados com `/up:modo-builder`.
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
|
|
8
|
+
```markdown
|
|
9
|
+
# Builder Defaults
|
|
10
|
+
|
|
11
|
+
## Stack Padrao
|
|
12
|
+
- Frontend: Next.js 15 (App Router) + Tailwind CSS + shadcn/ui
|
|
13
|
+
- Backend: Supabase (Auth + Database + Edge Functions)
|
|
14
|
+
- Linguagem: TypeScript (strict mode)
|
|
15
|
+
- Package manager: pnpm
|
|
16
|
+
- Testes: Vitest + Playwright
|
|
17
|
+
|
|
18
|
+
## Decisoes de Design
|
|
19
|
+
- Design system: shadcn/ui (tema neutro, customizar cores por projeto)
|
|
20
|
+
- Responsividade: mobile-first
|
|
21
|
+
- Dark mode: sim, com toggle
|
|
22
|
+
- Fonte: Inter (UI) + JetBrains Mono (code)
|
|
23
|
+
|
|
24
|
+
## Decisoes de Codigo
|
|
25
|
+
- API: tRPC quando Next.js, REST quando Python/FastAPI
|
|
26
|
+
- Auth: Supabase Auth
|
|
27
|
+
- Validacao: Zod
|
|
28
|
+
- Estado client: Zustand
|
|
29
|
+
- Forms: React Hook Form + Zod resolver
|
|
30
|
+
- ORM/DB: Supabase client (sem ORM adicional)
|
|
31
|
+
|
|
32
|
+
## Padroes
|
|
33
|
+
- Estrutura: feature-based (src/features/*)
|
|
34
|
+
- Commits: conventional commits
|
|
35
|
+
- Linter: ESLint + Prettier
|
|
36
|
+
- Git: branch main, commits diretos
|
|
37
|
+
|
|
38
|
+
## Nao usar
|
|
39
|
+
- (liste aqui tecnologias que voce NAO quer em nenhum projeto)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<guidelines>
|
|
45
|
+
|
|
46
|
+
**Como o builder usa este arquivo:**
|
|
47
|
+
|
|
48
|
+
1. Lido no inicio do modo builder (Estagio 1 - Intake)
|
|
49
|
+
2. Qualquer decisao do briefing do usuario SOBRESCREVE os defaults
|
|
50
|
+
3. Se o usuario especifica "usar Vue", o default de Next.js e ignorado
|
|
51
|
+
4. Se o usuario NAO especifica frontend, o default de Next.js e usado
|
|
52
|
+
5. A secao "Nao usar" e SEMPRE respeitada (nunca sobrescrita)
|
|
53
|
+
|
|
54
|
+
**Hierarquia de decisao:**
|
|
55
|
+
```
|
|
56
|
+
Briefing do usuario (maior prioridade)
|
|
57
|
+
> Respostas das perguntas criticas
|
|
58
|
+
> builder-defaults.md do usuario
|
|
59
|
+
> Inferencia inteligente do sistema (menor prioridade)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Inferencia inteligente (quando nao ha default nem briefing):**
|
|
63
|
+
- Dominio financeiro → sugere tabelas, graficos, exportacao
|
|
64
|
+
- Dominio social → sugere real-time, notificacoes, feeds
|
|
65
|
+
- Dominio e-commerce → sugere pagamentos, carrinho, inventario
|
|
66
|
+
- Dominio educacao → sugere progresso, quiz, certificados
|
|
67
|
+
|
|
68
|
+
**O que NAO colocar nos defaults:**
|
|
69
|
+
- Credenciais ou tokens (passados no briefing)
|
|
70
|
+
- Decisoes especificas de projeto (schemas, nomes de tabelas)
|
|
71
|
+
- Preferencias que mudam por projeto (cores, branding)
|
|
72
|
+
|
|
73
|
+
</guidelines>
|