Convenciones CLAUDE.md
El archivo CLAUDE.md es el fichero de instrucciones que Claude Code lee automaticamente al iniciar una sesion en tu proyecto. Funciona como un manual de onboarding para la IA: le indica que stack usas, como esta organizado el codigo, que convenciones seguir y como conectarse a herramientas externas como Almirant.
Un CLAUDE.md bien configurado marca la diferencia entre una IA que genera codigo generico y una que respeta la arquitectura, patrones y convenciones de tu equipo.
Donde colocar el archivo
Coloca CLAUDE.md en la raiz de tu repositorio:
tu-proyecto/
CLAUDE.md # <-- aqui
.claude/
skills/
settings.json
src/
package.json
Claude Code busca este archivo automaticamente al abrir el proyecto. No necesitas configuracion adicional.
Si trabajas con un monorepo, puedes tener un CLAUDE.md en la raiz y otros adicionales en subdirectorios. Claude Code los combina todos.
Que incluir cuando usas Almirant
1. Configuracion MCP
Lo mas importante es que Claude Code sepa como conectarse a Almirant. Incluye la configuracion del servidor MCP con la URL y la API key.
## MCP - Almirant
Este proyecto esta conectado a Almirant para gestion de tareas.
Configuracion en `.claude/settings.json` o `.mcp.json`:
\```json
{
"mcpServers": {
"almirant": {
"type": "http",
"url": "http://localhost:3001/mcp?projectId=<tu-project-uuid>",
"headers": {
"Authorization": "Bearer <tu-api-key>"
}
}
}
}
\```
Usa las herramientas MCP para leer y actualizar work items, boards y sprints.
Referencia la ubicacion de la configuracion MCP, pero nunca incluyas la API key directamente en CLAUDE.md. Usa .claude/settings.json (que debe estar en .gitignore) o variables de entorno.
2. Descripcion del proyecto
Da contexto general sobre que es el proyecto y que tecnologias usa.
## Descripcion del proyecto
Aplicacion web de e-commerce B2B construida con:
- **Frontend**: Next.js 15 + React 19 + TypeScript + Tailwind CSS
- **Backend**: Bun + Elysia + Drizzle ORM
- **Base de datos**: PostgreSQL 16
- **Auth**: Better-Auth con Google OAuth
- **Testing**: Vitest + Playwright
3. Estructura del repositorio
Explica como esta organizado el codigo para que la IA navegue eficientemente.
## Estructura
\```
src/
domains/ # Modulos por dominio (DDD)
users/
domain/ # Tipos e interfaces
application/ # Hooks y casos de uso
presentation/ # Componentes y containers
orders/
products/
components/ui/ # Componentes compartidos (shadcn/ui)
lib/ # Utilidades, API client, auth
\```
4. Convenciones de codigo
Define las reglas que Claude Code debe seguir al generar codigo.
## Convenciones
- **Archivos**: kebab-case (`user-service.ts`, `order-form.tsx`)
- **Componentes**: PascalCase (`UserProfile`, `OrderList`)
- **Hooks**: camelCase con prefijo `use` (`useUserProfile`, `useOrderList`)
- **No clases**: Usar functional programming. Funciones puras, custom hooks, objetos funcionales
- **Tipos**: En `domain/types.ts`, no dentro de componentes .tsx
- **Componentes .tsx**: Solo presentacionales. Sin useState, useEffect ni logica de negocio
- **Logica**: En custom hooks dentro de `application/hooks/`
5. Comandos del proyecto
Incluye los comandos que Claude Code puede necesitar ejecutar.
## Comandos
\```bash
bun run dev # Servidor de desarrollo
bun run build # Build de produccion
bun run lint # Linter
bun run test # Tests
bun run type-check # Verificacion de tipos
bun run db:generate # Generar migracion
bun run db:migrate # Aplicar migraciones
\```
6. Patrones de codigo
Documenta patrones especificos que quieres que la IA replique.
## Patrones
### API calls con React Query
Todas las llamadas a API usan React Query con query keys estructuradas:
\```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 con invalidacion
\```typescript
export const useCreateUser = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: usersApi.create,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: userKeys.all });
},
});
};
\```
7. Reglas especificas del proyecto
Incluye restricciones o reglas de negocio que la IA debe respetar.
## Reglas
- **NUNCA** ejecutar SQL directamente. Usar Drizzle ORM + migraciones
- **NUNCA** commitear archivos .env o credenciales
- **NUNCA** modificar archivos en `migrations/meta/`
- Los work items NO tienen columna `status` -- el estado se deriva de la columna del board
- Los work items usan `archived_at` (timestamp) en lugar de booleano para archivar
- La autenticacion usa cookies `better-auth.session_token`
Ejemplo completo
# CLAUDE.md
## Proyecto
E-commerce B2B para distribucion de productos industriales.
**Stack**: Next.js 15 + React 19 + TypeScript + Tailwind CSS 4 + Elysia + Drizzle ORM + PostgreSQL 16
## MCP - Almirant
Gestion de tareas via MCP. Configuracion en `.mcp.json`.
Usar herramientas MCP para leer work items antes de implementar y
actualizar estado al terminar.
## Estructura
\```
src/
domains/ # Modulos DDD
catalog/ # Productos y categorias
orders/ # Pedidos y facturacion
customers/ # Clientes B2B
components/ui/ # shadcn/ui
lib/ # API client, auth, utils
\```
## Convenciones
- Archivos en kebab-case
- Componentes: solo presentacionales (sin hooks en .tsx)
- Logica: custom hooks en application/hooks/
- Tipos: en domain/types.ts
- No clases: solo funciones, hooks, interfaces
## Comandos
\```bash
bun run dev # Dev server (port 3000)
bun run build # Production build
bun run lint # ESLint
bun run test # Vitest
bun run db:generate # Generar migracion
bun run db:migrate # Aplicar migraciones
\```
## Patrones
### React Query
Query keys estructuradas por dominio.
Mutations invalidan queries relacionadas en onSuccess.
### API Client
Modulos en lib/api/client.ts:
- catalogApi.getProducts(filters)
- ordersApi.create(data)
- customersApi.getById(id)
## Reglas
- NUNCA SQL directo, siempre Drizzle + migraciones
- NUNCA commitear .env
- Los pedidos requieren validacion de stock antes de confirmar
- Precios calculados server-side, nunca confiar en el frontend
Consejos avanzados
Segmentar por audiencia
Si en tu equipo trabajan perfiles diferentes (frontend, backend, devops), puedes usar secciones con encabezados claros para que cada skill o flujo sepa donde buscar informacion relevante.
Mantener actualizado
Trata CLAUDE.md como documentacion viva. Cuando cambies un patron, una convencion o la estructura del proyecto, actualiza el archivo. Una instruccion desactualizada puede hacer que la IA genere codigo inconsistente.
No duplicar lo obvio
No hace falta documentar como funciona React o TypeScript. Enfocate en lo especifico de tu proyecto: convenciones internas, patrones propios, restricciones de negocio.
Validar con el equipo
Al igual que las skills, el CLAUDE.md se versiona con Git. Revisalo en code review cuando haya cambios significativos para asegurar que todo el equipo esta alineado.
Nunca incluyas credenciales, API keys, tokens o URLs de produccion directamente en CLAUDE.md. Este archivo se versiona con Git y es visible para todo el equipo. Usa variables de entorno o archivos de configuracion en .gitignore.