mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:21:10 +02:00
Add detailed documentation for Claude Code in .claude/ directory: - code-style.md: formatting, naming, linting rules - database.md: Drizzle ORM patterns and schema conventions - testing.md: Jest/Vitest patterns with mock factories - nestjs-backend.md: controller, service, DTO patterns - error-handling.md: Go-style Result types and error codes - sveltekit-web.md: Svelte 5 runes and store patterns - expo-mobile.md: React Native with NativeWind - authentication.md: Mana Core Auth integration Update root CLAUDE.md to reference new guidelines
4.5 KiB
4.5 KiB
Claude Code Guidelines
This directory contains comprehensive guidelines for working in the Mana Universe monorepo. These documents are designed to help Claude Code (and developers) maintain consistency across all projects.
Quick Reference
| Document | Purpose |
|---|---|
| Code Style | Formatting, naming conventions, linting rules |
| Database | Drizzle ORM patterns, schema design, migrations |
| Testing | Jest/Vitest patterns, mock factories, coverage |
| NestJS Backend | Controllers, services, DTOs, modules |
| Error Handling | Go-style errors, error codes, Result types |
| SvelteKit Web | Svelte 5 runes, stores, routing |
| Expo Mobile | React Native, NativeWind, navigation |
| Authentication | Mana Core Auth integration |
Core Principles
1. Explicit Over Implicit
- Use Go-style error handling with explicit
Result<T>returns - Prefer named exports over default exports
- Use explicit types instead of
any
2. Consistency Over Preference
- Follow existing patterns in the codebase
- Use shared packages for common functionality
- Maintain consistent naming across all projects
3. Simplicity Over Cleverness
- Don't over-engineer solutions
- Avoid premature abstractions
- Keep files focused and small
4. Safety First
- Always validate user input
- Use parameterized queries (Drizzle handles this)
- Never expose sensitive data in responses
Technology Stack Summary
| Layer | Technology | Notes |
|---|---|---|
| Package Manager | pnpm 9.15+ | Workspace monorepo |
| Build System | Turborepo | Parallel task execution |
| Backend | NestJS 10-11 | TypeScript, Drizzle ORM |
| Web | SvelteKit 2 + Svelte 5 | Runes mode only |
| Mobile | Expo SDK 52-54 | React Native, NativeWind |
| Database | PostgreSQL | Via Drizzle ORM |
| Auth | Mana Core Auth | Better Auth, EdDSA JWT |
| Storage | S3-compatible | MinIO (dev), Hetzner (prod) |
Project Structure
manacore-monorepo/
├── .claude/
│ ├── GUIDELINES.md # This file
│ ├── guidelines/ # Detailed guidelines
│ └── templates/ # Code templates
├── apps/ # Product applications
│ └── {project}/
│ ├── apps/
│ │ ├── backend/ # NestJS API
│ │ ├── web/ # SvelteKit web
│ │ ├── mobile/ # Expo app
│ │ └── landing/ # Astro landing
│ └── packages/ # Project-specific shared
├── packages/ # Monorepo-wide shared
│ ├── shared-errors/ # Error codes & Result types
│ ├── shared-nestjs-auth/ # NestJS auth guards
│ ├── shared-auth/ # Client auth service
│ └── ...
├── services/ # Standalone microservices
│ └── mana-core-auth/ # Central auth service
└── CLAUDE.md # Root project overview
Before Making Changes
- Read the relevant guideline for the area you're working in
- Check existing patterns in similar files
- Use shared packages when available
- Follow the error handling pattern with Result types
- Write tests for new functionality
Error Handling Philosophy
We use Go-style error handling across the entire stack:
// Backend services return Result<T>
const result = await userService.findById(id);
if (!result.ok) {
// Handle error with error code
throw new AppException(result.error);
}
return result.data;
// Frontend handles errors explicitly
const { data, error } = await api.getUser(id);
if (error) {
showToast(error.message);
return;
}
See Error Handling for complete details.
Quick Commands
# Development
pnpm install # Install dependencies
pnpm {project}:dev # Start project (all apps)
pnpm dev:{project}:backend # Start just backend
pnpm dev:{project}:web # Start just web
# Quality
pnpm type-check # TypeScript validation
pnpm format # Format code
pnpm test # Run tests
# Database
pnpm {project}:db:push # Push schema changes
pnpm {project}:db:studio # Open Drizzle Studio