devsquad 1.0.0 → 1.1.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.
@@ -7,30 +7,46 @@ Estes blocos são **gerados no repositório do app** (não fazem parte do pacote
7
7
  ## README.md (completo)
8
8
 
9
9
  ```markdown
10
- # Nome do projeto
10
+ # 🚀 Nome do Projeto
11
11
 
12
12
  > Uma linha: o que o sistema faz e para quem.
13
13
 
14
14
  ## Stack
15
15
 
16
- - Backend: NestJS + Prisma + PostgreSQL
17
- - Frontend: React + TypeScript + Vite + TailwindCSS
18
- - Auth: JWT (access + refresh)
16
+ | Camada | Tecnologias |
17
+ |--------|-------------|
18
+ | Backend | NestJS + Prisma + PostgreSQL |
19
+ | Frontend | React + TypeScript + Vite + TailwindCSS |
20
+ | Mobile | React Native + Expo + NativeWind |
21
+ | Auth | JWT (access 15min + refresh 7d, httpOnly cookie) |
22
+ | CI/CD | GitHub Actions + Railway (backend) + Vercel (frontend) |
19
23
 
20
24
  ## Pré-requisitos
21
25
 
22
- - Node.js LTS
23
- - PostgreSQL
24
- - Variáveis: copie `.env.example` para `.env`
26
+ - Node.js >= 20
27
+ - PostgreSQL >= 15
28
+ - Variáveis: copie `.env.example` para `.env` e preencha os valores
25
29
 
26
30
  ## Instalação
27
31
 
28
32
  \`\`\`bash
29
- # backend
30
- cd backend && npm ci && npx prisma migrate dev
31
-
32
- # frontend
33
- cd frontend && npm ci && npm run dev
33
+ # Backend
34
+ cd backend
35
+ npm ci
36
+ cp .env.example .env # preencha DATABASE_URL, JWT_SECRET etc.
37
+ npx prisma migrate dev
38
+ npm run start:dev
39
+
40
+ # Frontend
41
+ cd frontend
42
+ npm ci
43
+ cp .env.example .env
44
+ npm run dev
45
+
46
+ # Mobile
47
+ cd mobile
48
+ npm ci
49
+ npx expo start
34
50
  \`\`\`
35
51
 
36
52
  ## Documentação da API
@@ -38,9 +54,76 @@ cd frontend && npm ci && npm run dev
38
54
  - Swagger: `http://localhost:3000/api/docs`
39
55
  - Postman: `postman/collection.json`
40
56
 
57
+ ## Design
58
+
59
+ - Figma: [link para o arquivo]
60
+ - Protótipo: [link para o protótipo interativo]
61
+
62
+ ## Testes
63
+
64
+ \`\`\`bash
65
+ # Backend
66
+ cd backend
67
+ npm run test # unitários
68
+ npm run test:e2e # integração
69
+
70
+ # Frontend
71
+ cd frontend
72
+ npm run test:run # unitários
73
+ npm run e2e # e2e com Playwright
74
+ \`\`\`
75
+
41
76
  ## Licença
42
77
 
43
- MIT
78
+ MIT © [Nome] [Ano]
79
+ ```
80
+
81
+ ---
82
+
83
+ ## docs/ARCHITECTURE.md
84
+
85
+ ```markdown
86
+ # Arquitetura
87
+
88
+ ## Visão geral
89
+
90
+ [Diagrama ou descrição da arquitetura — monolito, microserviços, serverless]
91
+
92
+ ## Decisões técnicas (ADRs)
93
+
94
+ ### ADR-001: API versionada em /api/v1
95
+ **Contexto:** Precisamos evoluir contratos sem quebrar clientes legados.
96
+ **Decisão:** Prefixo global `api/v1` no NestJS; breaking changes em `/v2` no futuro.
97
+ **Consequências:** URLs mais longas; migrações de versão documentadas.
98
+
99
+ ### ADR-002: Refresh token como cookie httpOnly
100
+ **Contexto:** localStorage é vulnerável a XSS (OWASP A03).
101
+ **Decisão:** Access token em memória, refresh token em cookie httpOnly; Secure; SameSite=Strict.
102
+ **Consequências:** Requer HTTPS em produção; CSP configurado corretamente.
103
+
104
+ ### ADR-003: UUID como identificador de recursos
105
+ **Contexto:** IDs sequenciais expõem volume de dados e permitem enumeração (OWASP A01).
106
+ **Decisão:** Todos os IDs são UUID v4 gerado pelo PostgreSQL.
107
+ **Consequências:** URLs menos legíveis; índices ligeiramente maiores.
108
+
109
+ ## Fluxo de autenticação
110
+
111
+ \`\`\`
112
+ Cliente → POST /auth/login → { access_token } + cookie(refresh_token)
113
+ Cliente → GET /recurso com Bearer {access_token}
114
+ Cliente → POST /auth/refresh com cookie → novo { access_token }
115
+ Cliente → POST /auth/logout → limpa cookie + invalida no banco
116
+ \`\`\`
117
+
118
+ ## Estrutura de pastas
119
+
120
+ \`\`\`
121
+ backend/ ← NestJS + Prisma
122
+ frontend/ ← React + Vite
123
+ mobile/ ← React Native + Expo
124
+ postman/ ← Collections de API
125
+ docs/ ← Esta documentação
126
+ \`\`\`
44
127
  ```
45
128
 
46
129
  ---
@@ -50,21 +133,55 @@ MIT
50
133
  ```markdown
51
134
  # Contribuindo
52
135
 
136
+ ## Pré-requisitos
137
+
138
+ - Node.js >= 20
139
+ - Git configurado com nome e email
140
+ - Acesso ao ClickUp do projeto
141
+
142
+ ## Fluxo de trabalho
143
+
144
+ 1. Pegue uma task no ClickUp (status: Backlog)
145
+ 2. Crie a branch: `git checkout -b feature/CK-{id}-{slug} develop`
146
+ 3. Desenvolva e escreva testes
147
+ 4. Faça commit seguindo Conventional Commits
148
+ 5. Abra PR para `develop` com o template preenchido
149
+ 6. Aguarde aprovação e merge
150
+
53
151
  ## Branches
54
152
 
55
- - `main` produção
56
- - `develop` — integração
57
- - `feature/*`, `fix/*`, `hotfix/*`Git Flow
153
+ | Branch | Propósito |
154
+ |--------|-----------|
155
+ | `main` | Produção protegida, apenas via PR aprovado |
156
+ | `develop` | Integração — base para novas features |
157
+ | `feature/CK-{id}-{slug}` | Nova funcionalidade |
158
+ | `fix/CK-{id}-{slug}` | Correção de bug |
159
+ | `hotfix/{slug}` | Correção urgente em produção |
160
+
161
+ ## Commits (Conventional Commits)
58
162
 
59
- ## Commits
163
+ ```
164
+ feat(auth): implementar login com JWT
165
+ fix(users): corrigir validação de email
166
+ docs(readme): atualizar instruções de instalação
167
+ chore(deps): atualizar dependências
168
+ test(auth): adicionar testes de refresh token
169
+ refactor(api): extrair lógica de paginação
170
+ ```
60
171
 
61
- Conventional Commits: `feat:`, `fix:`, `docs:`, `chore:`.
172
+ ## Padrão de PR
62
173
 
63
- ## PR
174
+ - Título: `feat(módulo): descrição curta`
175
+ - Preencha o template completamente
176
+ - Link da task: `Closes CK-{id}`
177
+ - Testes passando localmente antes de abrir o PR
178
+ - Nenhum `console.log` ou secret no código
64
179
 
65
- - Descreva o que mudou e como testar
66
- - Link da task (ClickUp/Jira)
67
- - Sem secrets; `.env.example` atualizado se houver novas variáveis
180
+ ## Code Review
181
+
182
+ - Reviews em até 24h úteis
183
+ - Aprovação de 1 reviewer para merge em develop
184
+ - Aprovação de 2 reviewers para merge em main
68
185
  ```
69
186
 
70
187
  ---
@@ -74,25 +191,35 @@ Conventional Commits: `feat:`, `fix:`, `docs:`, `chore:`.
74
191
  ```markdown
75
192
  # Segurança
76
193
 
77
- - Reporte vulnerabilidades por [canal privado / email].
78
- - Não abra issue pública com detalhes de exploit.
79
- - Seguimos OWASP Top 10; revisões em releases importantes.
80
- ```
194
+ ## Reportar vulnerabilidades
81
195
 
82
- ---
196
+ Não abra issues públicas com detalhes de exploits.
197
+ Envie um email para: [security@empresa.com]
83
198
 
84
- ## docs/ARCHITECTURE.md (exemplo ADR)
199
+ Inclua:
200
+ - Descrição da vulnerabilidade
201
+ - Passos para reproduzir
202
+ - Impacto potencial
203
+ - Sugestão de correção (opcional)
85
204
 
86
- ```markdown
87
- # Arquitetura
205
+ Responderemos em até 48h úteis.
88
206
 
89
- ## ADR-001: API versionada em /api/v1
207
+ ## Práticas adotadas
90
208
 
91
- **Contexto:** Precisamos evoluir contratos sem quebrar clientes legados.
209
+ - OWASP Top 10 revisado em cada release
210
+ - Tokens JWT com expiração curta (15min access, 7d refresh)
211
+ - Refresh token como cookie httpOnly — não acessível via JavaScript
212
+ - Senhas com bcrypt (salt 12)
213
+ - Rate limiting em endpoints de autenticação
214
+ - Validação de inputs com class-validator em todos os DTOs
215
+ - UUIDs como IDs — sem enumeração
216
+ - Headers de segurança via Helmet
217
+ - CORS configurado explicitamente
92
218
 
93
- **Decisão:** Prefixo global `api/v1` no NestJS; breaking changes em `/v2` no futuro.
219
+ ## Dependências
94
220
 
95
- **Consequências:** URLs mais longas; migrações de versão documentadas.
221
+ - Auditoria automática via `npm audit` no CI
222
+ - Dependabot configurado para atualizações automáticas
96
223
  ```
97
224
 
98
225
  ---
@@ -102,16 +229,53 @@ Conventional Commits: `feat:`, `fix:`, `docs:`, `chore:`.
102
229
  ```markdown
103
230
  ## O que essa PR faz?
104
231
 
232
+ [Descrição objetiva do que foi implementado ou corrigido]
105
233
 
106
234
  ## Task relacionada
107
235
 
108
- Closes
236
+ Closes CK-
237
+
238
+ ## Como testar
239
+
240
+ 1. [Passo 1]
241
+ 2. [Passo 2]
109
242
 
110
243
  ## Checklist
111
244
 
112
- - [ ] Testes passando
113
- - [ ] Lint sem erros
245
+ - [ ] Testes unitários escritos e passando
246
+ - [ ] Testes de integração passando
247
+ - [ ] Lint sem erros (`npm run lint`)
114
248
  - [ ] `.env.example` atualizado (se novas variáveis)
115
- - [ ] Postman atualizado (se novos endpoints)
116
- - [ ] Nenhum secret no código
249
+ - [ ] Postman Collection atualizada (se novos endpoints)
250
+ - [ ] Swagger atualizado (se alterou contratos de API)
251
+ - [ ] Nenhum `console.log` no código
252
+ - [ ] Nenhum secret ou credencial no código
253
+ ```
254
+
255
+ ---
256
+
257
+ ## .github/ISSUE_TEMPLATE/bug_report.md
258
+
259
+ ```markdown
260
+ ---
261
+ name: Bug report
262
+ about: Reporte um comportamento inesperado
263
+ labels: bug
264
+ ---
265
+
266
+ ## Descrição
267
+ [O que aconteceu vs o que deveria acontecer]
268
+
269
+ ## Passos para reproduzir
270
+ 1.
271
+ 2.
272
+ 3.
273
+
274
+ ## Ambiente
275
+ - OS:
276
+ - Node:
277
+ - Navegador:
278
+
279
+ ## Logs / Screenshots
280
+ [Cole logs ou prints relevantes]
117
281
  ```
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: figma-design
2
+ name: figma
3
3
  description: Vinculação de protótipos Figma ao desenvolvimento e extração de tokens de design para TailwindCSS. Use quando o desenvolvedor precisar conectar o design ao código, extrair cores/tipografia/espaçamentos do Figma ou estruturar um arquivo de design para um novo projeto.
4
4
  ---
5
5
 
@@ -17,56 +17,155 @@ description: Vinculação de protótipos Figma ao desenvolvimento e extração d
17
17
  ## Tokens de design → tailwind.config.js
18
18
 
19
19
  ```javascript
20
- // Copie as cores exatas do Figma
21
- module.exports = {
20
+ // Copie os valores exatos do Figma (Inspect → CSS)
21
+ export default {
22
22
  theme: {
23
23
  extend: {
24
24
  colors: {
25
25
  primary: {
26
+ 50: '#eff6ff',
27
+ 100: '#dbeafe',
26
28
  500: '#3b82f6', // cor principal
27
29
  600: '#2563eb', // hover
30
+ 700: '#1d4ed8', // pressed
31
+ },
32
+ success: { DEFAULT: '#22c55e', light: '#dcfce7' },
33
+ error: { DEFAULT: '#ef4444', light: '#fee2e2' },
34
+ warning: { DEFAULT: '#f59e0b', light: '#fef3c7' },
35
+ // Neutros do Design System
36
+ gray: {
37
+ 50: '#f9fafb',
38
+ 100: '#f3f4f6',
39
+ 500: '#6b7280',
40
+ 900: '#111827',
28
41
  },
29
- success: '#22c55e',
30
- error: '#ef4444',
31
- warning: '#f59e0b',
32
42
  },
33
43
  fontFamily: {
34
- sans: ['Inter', 'sans-serif'], // fonte do Figma
44
+ sans: ['Inter', 'sans-serif'], // fonte do Figma
45
+ mono: ['JetBrains Mono', 'monospace'],
46
+ },
47
+ fontSize: {
48
+ // Escala tipográfica do Design System
49
+ xs: ['12px', { lineHeight: '16px' }],
50
+ sm: ['14px', { lineHeight: '20px' }],
51
+ base: ['16px', { lineHeight: '24px' }],
52
+ lg: ['18px', { lineHeight: '28px' }],
53
+ xl: ['20px', { lineHeight: '28px' }],
54
+ '2xl':['24px', { lineHeight: '32px' }],
55
+ '3xl':['30px', { lineHeight: '36px' }],
56
+ },
57
+ spacing: {
58
+ // Usar múltiplos de 4 (grid de 4px)
59
+ // Tailwind já usa isso por padrão — não sobrescrever sem motivo
60
+ },
61
+ borderRadius: {
62
+ sm: '4px',
63
+ md: '8px',
64
+ lg: '12px',
65
+ xl: '16px',
66
+ full:'9999px',
67
+ },
68
+ boxShadow: {
69
+ card: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
70
+ modal:'0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
35
71
  },
36
72
  },
37
73
  },
38
74
  }
39
75
  ```
40
76
 
41
- > 📖 Espelhar cores do Figma no Tailwind significa que quando o designer muda a paleta, você atualiza em um lugar e todos os componentes refletem a mudança.
42
-
43
77
  ## Tradução Figma → Tailwind
44
78
 
45
79
  | Figma | Tailwind |
46
80
  |-------|----------|
81
+ | Padding 4px | `p-1` |
82
+ | Padding 8px | `p-2` |
83
+ | Padding 12px | `p-3` |
47
84
  | Padding 16px | `p-4` |
48
- | Padding 16px 24px | `py-4 px-6` |
85
+ | Padding 24px | `p-6` |
86
+ | Padding 32px | `p-8` |
49
87
  | Gap 8px | `gap-2` |
50
- | Border radius 8px | `rounded-lg` |
51
- | Border radius 12px | `rounded-xl` |
52
- | Font size 14px | `text-sm` |
53
- | Font weight 600 | `font-semibold` |
88
+ | Gap 16px | `gap-4` |
89
+ | Border radius 4px | `rounded-sm` |
90
+ | Border radius 8px | `rounded-md` |
91
+ | Border radius 12px | `rounded-lg` |
92
+ | Font 14px / 400 | `text-sm font-normal` |
93
+ | Font 14px / 600 | `text-sm font-semibold` |
94
+ | Font 16px / 700 | `text-base font-bold` |
95
+ | Opacity 50% | `opacity-50` |
54
96
 
55
- ## Checklist handoff design código
97
+ ## Nomenclatura de componentes Figma ↔ React
56
98
 
57
- Antes de iniciar o desenvolvimento de uma tela:
58
- - [ ] Tela finalizada no Figma (não wireframe)
59
- - [ ] Cores usando variáveis do Design System
60
- - [ ] Estados documentados (hover, active, disabled, error, loading)
61
- - [ ] Versão mobile definida (se responsivo)
62
- - [ ] Link do Figma no README
99
+ ```
100
+ Figma: Button/Primary/Default → <Button variant="primary" />
101
+ Figma: Button/Secondary/Hover → <Button variant="secondary" className="hover:..." />
102
+ Figma: Input/Default → <Input />
103
+ Figma: Input/Error → <Input error="mensagem" />
104
+ Figma: Card/Default → <Card />
105
+ Figma: Modal/Confirm → <ConfirmModal />
106
+ ```
107
+
108
+ ## Estados obrigatórios por componente
109
+
110
+ Exija estes estados no Figma antes de iniciar o desenvolvimento:
111
+
112
+ | Componente | Estados obrigatórios |
113
+ |------------|---------------------|
114
+ | Button | default, hover, active, disabled, loading |
115
+ | Input | default, focus, filled, error, disabled |
116
+ | Select | default, open, selected, disabled |
117
+ | Checkbox | unchecked, checked, indeterminate, disabled |
118
+ | Card | default, hover (se clicável) |
119
+ | Modal | aberto, fechando (se animado) |
120
+
121
+ ## Dark mode — variáveis CSS
122
+
123
+ Se o projeto tiver dark mode, use variáveis CSS em vez de classes fixas:
124
+
125
+ ```css
126
+ /* src/index.css */
127
+ :root {
128
+ --color-bg: #ffffff;
129
+ --color-text: #111827;
130
+ --color-border: #e5e7eb;
131
+ }
132
+
133
+ .dark {
134
+ --color-bg: #0f172a;
135
+ --color-text: #f1f5f9;
136
+ --color-border: #1e293b;
137
+ }
138
+ ```
139
+
140
+ ```javascript
141
+ // tailwind.config.js
142
+ darkMode: 'class',
143
+ theme: {
144
+ extend: {
145
+ backgroundColor: { DEFAULT: 'var(--color-bg)' },
146
+ textColor: { DEFAULT: 'var(--color-text)' },
147
+ borderColor: { DEFAULT: 'var(--color-border)' },
148
+ }
149
+ }
150
+ ```
63
151
 
64
152
  ## Organização do arquivo Figma
65
153
 
66
154
  ```
67
- 📄 Cover ← Thumbnail
68
- 📄 Design System ← Cores, tipografia, componentes
69
- 📄 UI — Auth ← Login, registro, recuperação
70
- 📄 UI — [Módulo] ← Telas de cada módulo
71
- 📄 Protótipo ← Fluxo interativo
155
+ 📄 Cover ← Thumbnail do projeto
156
+ 📄 Design System ← Cores, tipografia, espaçamentos, ícones, componentes base
157
+ 📄 UI — Auth ← Login, registro, recuperação de senha
158
+ 📄 UI — [Módulo] ← Telas de cada módulo (uma página por módulo)
159
+ 📄 Protótipo ← Fluxo interativo para validação
160
+ 📄 Handoff ← Specs finais para desenvolvimento (anotações, medidas)
72
161
  ```
162
+
163
+ ## Checklist handoff design → código
164
+
165
+ - [ ] Tela finalizada (não wireframe) e aprovada
166
+ - [ ] Todas as cores usando variáveis do Design System (não hex solto)
167
+ - [ ] Todos os estados documentados (hover, active, disabled, error, loading)
168
+ - [ ] Versão mobile definida (se responsivo)
169
+ - [ ] Tokens extraídos e mapeados no `tailwind.config.js`
170
+ - [ ] Link do Figma no README.md
171
+ - [ ] Fontes baixadas ou configuradas no Google Fonts