ti-pote/CLAUDE.md
ordinarthur 674109ea22 feat: initial project setup — Phase 0
Monorepo pnpm avec NestJS backend en architecture hexagonale.
- Structure hexagonale complète (ports, adapters, domain entities)
- 9 entities TypeORM (Home, User, Device, Credentials, Session, Message, Memory, Timer)
- Migration initiale SQL avec pgvector support
- Docker Compose (PostgreSQL 16 + pgvector + Redis 7)
- Config partagée (tsconfig, ESLint, Prettier)
- Outbound ports définis (STT, TTS, LLM, Cache, Storage, VectorStore)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 09:01:52 +01:00

52 lines
1.9 KiB
Markdown

# Ti-Pote — Project Instructions
## Project Overview
Robot animatronique de bureau personnel — modulaire, imprimé en 3D, propulsé par l'IA.
Monorepo avec pnpm workspaces.
## Stack
- **Backend**: NestJS + TypeScript, architecture hexagonale (ports & adapters)
- **ORM**: TypeORM avec PostgreSQL + pgvector
- **Cache**: Redis (ioredis)
- **Frontend**: Next.js (à venir dans `apps/frontend`)
- **Infra**: Docker Compose (dev), VPS (prod)
## Repository Structure
```
apps/backend/ # NestJS core backend
src/
core/ # Domain (no external deps)
ports/inbound/ # Inbound interfaces
ports/outbound/ # Outbound interfaces (STT, TTS, LLM, storage, cache...)
services/ # Business logic
domain/entities/ # TypeORM entities
tools/ # LLM function/tool definitions
adapters/
inbound/ # REST controllers, WebSocket gateways
outbound/ # Implementations of outbound ports
config/ # App, DB, Redis config
migrations/ # TypeORM migrations (raw SQL)
shared/ # Utils (crypto, token counter, logger)
apps/frontend/ # Next.js frontend (future)
docs/ # Architecture, features, data model, roadmap
```
## Commands
```bash
pnpm dev # Start backend in watch mode
pnpm build # Build backend
pnpm lint # Lint all packages
docker compose up -d # Start PostgreSQL + Redis
```
## Conventions
- Language: TypeScript strict mode
- Entities in `core/domain/entities/` — file pattern: `*.entity.ts`
- Ports in `core/ports/` — file pattern: `*.port.ts`, exported as Symbols
- Adapters implement ports — injected via NestJS DI
- Migrations are manually written SQL (not auto-generated)
- Use `snake_case` for DB columns (TypeORM `@Column({ name: 'snake_case' })`)
- Use `camelCase` for TypeScript properties
- All dates stored as `TIMESTAMPTZ`
- Credentials encrypted with AES-256-GCM before storage