Convenções do CLAUDE.md
O arquivo CLAUDE.md é o arquivo de instruções que o Claude Code lê automaticamente ao iniciar uma sessão no seu projeto. Ele funciona como um manual de onboarding para a IA: indica qual stack você usa, como o código está organizado, quais convenções seguir e como se conectar a ferramentas externas como o Almirant.
Um CLAUDE.md bem configurado faz a diferença entre uma IA que gera código genérico e outra que respeita a arquitetura, os padrões e as convenções da sua equipe.
Onde colocar o arquivo
Coloque CLAUDE.md na raiz do seu repositório:
tu-proyecto/
CLAUDE.md # <-- aqui
.claude/
skills/
settings.json
src/
package.json
O Claude Code procura esse arquivo automaticamente ao abrir o projeto. Você não precisa de configuração adicional.
Se você trabalha com um monorepo, pode ter um CLAUDE.md na raiz e outros adicionais em subdiretórios. O Claude Code combina todos eles.
O que incluir ao usar o Almirant
1. Configuração MCP
O mais importante é que o Claude Code saiba como se conectar ao Almirant. Inclua a configuração do servidor MCP com a URL e a chave de API.
## MCP - Almirant
Este projeto está conectado ao Almirant para gestão de tarefas.
Configuração em `.claude/settings.json` ou `.mcp.json`:
\```json
{
"mcpServers": {
"almirant": {
"type": "http",
"url": "http://localhost:3001/mcp?projectId=<tu-project-uuid>",
"headers": {
"Authorization": "Bearer <tu-api-key>"
}
}
}
}
\```
Use as ferramentas MCP para ler e atualizar work items, boards e sprints.
Faça referência à localização da configuração MCP, mas nunca inclua a chave de API diretamente em CLAUDE.md. Use .claude/settings.json (que deve estar em .gitignore) ou variáveis de ambiente.
2. Descrição do projeto
Forneça contexto geral sobre o projeto e as tecnologias usadas.
## Descrição do projeto
Aplicação web de e-commerce B2B construída com:
- **Frontend**: Next.js 15 + React 19 + TypeScript + Tailwind CSS
- **Backend**: Bun + Elysia + Drizzle ORM
- **Banco de dados**: PostgreSQL 16
- **Auth**: Better-Auth com Google OAuth
- **Testes**: Vitest + Playwright
3. Estrutura do repositório
Explique como o código está organizado para que a IA navegue com eficiência.
## Estrutura
\```
src/
domains/ # Módulos por domínio (DDD)
users/
domain/ # Tipos e interfaces
application/ # Hooks e casos de uso
presentation/ # Componentes e containers
orders/
products/
components/ui/ # Componentes compartilhados (shadcn/ui)
lib/ # Utilitários, cliente de API, auth
\```
4. Convenções de código
Defina as regras que o Claude Code deve seguir ao gerar código.
## Convenções
- **Arquivos**: kebab-case (`user-service.ts`, `order-form.tsx`)
- **Componentes**: PascalCase (`UserProfile`, `OrderList`)
- **Hooks**: camelCase com o prefixo `use` (`useUserProfile`, `useOrderList`)
- **Sem classes**: Usar programação funcional. Funções puras, custom hooks, objetos funcionais
- **Tipos**: Em `domain/types.ts`, não dentro de componentes .tsx
- **Componentes .tsx**: Apenas de apresentação. Sem useState, useEffect nem lógica de negócio
- **Lógica**: Em custom hooks dentro de `application/hooks/`
5. Comandos do projeto
Inclua os comandos que o Claude Code pode precisar executar.
## Comandos
\```bash
bun run dev # Servidor de desenvolvimento
bun run build # Build de produção
bun run lint # Linter
bun run test # Testes
bun run type-check # Verificação de tipos
bun run db:generate # Gerar migração
bun run db:migrate # Aplicar migrações
\```
6. Padrões de código
Documente padrões específicos que você quer que a IA replique.
## Padrões
### Chamadas de API com React Query
Todas as chamadas de API usam React Query com query keys estruturadas:
\```typescript
export const userKeys = {
all: ['users'] as const,
list: (filters: UserFilters) => [...userKeys.all, 'list', filters] as const,
detail: (id: string) => [...userKeys.all, 'detail', id] as const,
};
export const useUsers = (filters: UserFilters) => {
return useQuery({
queryKey: userKeys.list(filters),
queryFn: () => usersApi.getAll(filters),
});
};
\```
### Mutations com invalidação
\```typescript
export const useCreateUser = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: usersApi.create,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: userKeys.all });
},
});
};
\```
7. Regras específicas do projeto
Inclua restrições ou regras de negócio que a IA deve respeitar.
## Regras
- **NUNCA** executar SQL diretamente. Usar Drizzle ORM + migrações
- **NUNCA** commitar arquivos .env ou credenciais
- **NUNCA** modificar arquivos em `migrations/meta/`
- Os work items NÃO têm uma coluna `status` -- o estado é derivado da coluna do board
- Os work items usam `archived_at` (timestamp) em vez de um booleano para arquivar
- A autenticação usa cookies `better-auth.session_token`
Exemplo completo
# CLAUDE.md
## Projeto
E-commerce B2B para distribuição de produtos industriais.
**Stack**: Next.js 15 + React 19 + TypeScript + Tailwind CSS 4 + Elysia + Drizzle ORM + PostgreSQL 16
## MCP - Almirant
Gestão de tarefas via MCP. Configuração em `.mcp.json`.
Use ferramentas MCP para ler work items antes de implementar e
atualizar o estado ao terminar.
## Estrutura
\```
src/
domains/ # Módulos DDD
catalog/ # Produtos e categorias
orders/ # Pedidos e faturamento
customers/ # Clientes B2B
components/ui/ # shadcn/ui
lib/ # Cliente de API, auth, utils
\```
## Convenções
- Arquivos em kebab-case
- Componentes: apenas de apresentação (sem hooks em .tsx)
- Lógica: custom hooks em application/hooks/
- Tipos: em domain/types.ts
- Sem classes: apenas funções, hooks, interfaces
## Comandos
\```bash
bun run dev # Servidor de desenvolvimento (porta 3000)
bun run build # Build de produção
bun run lint # ESLint
bun run test # Vitest
bun run db:generate # Gerar migração
bun run db:migrate # Aplicar migrações
\```
## Padrões
### React Query
Query keys estruturadas por domínio.
Mutations invalidam queries relacionadas em onSuccess.
### Cliente de API
Módulos em lib/api/client.ts:
- catalogApi.getProducts(filters)
- ordersApi.create(data)
- customersApi.getById(id)
## Regras
- NUNCA SQL direto, sempre Drizzle + migrações
- NUNCA commitar .env
- Os pedidos exigem validação de estoque antes da confirmação
- Preços calculados server-side, nunca confiar no frontend
Dicas avançadas
Segmentar por público
Se sua equipe tiver perfis diferentes (frontend, backend, devops), você pode usar seções com cabeçalhos claros para que cada skill ou fluxo saiba onde buscar informações relevantes.
Manter atualizado
Trate CLAUDE.md como documentação viva. Quando você alterar um padrão, uma convenção ou a estrutura do projeto, atualize o arquivo. Uma instrução desatualizada pode fazer a IA gerar código inconsistente.
Não duplicar o óbvio
Não é necessário documentar como React ou TypeScript funcionam. Concentre-se no que é específico do seu projeto: convenções internas, padrões próprios e restrições de negócio.
Validar com a equipe
Assim como as skills, o CLAUDE.md é versionado com Git. Revise-o no code review quando houver alterações significativas para garantir que toda a equipe esteja alinhada.
Nunca inclua credenciais, chaves de API, tokens ou URLs de produção diretamente em CLAUDE.md. Esse arquivo é versionado com Git e fica visível para toda a equipe. Use variáveis de ambiente ou arquivos de configuração em .gitignore.