# CLAUDE.md — ordinarthur-os Avant toute action, lire dans cet ordre : 1. [`README.md`](./README.md) 2. [`PLAN.md`](./PLAN.md) 3. [`ARCHITECTURE.md`](./ARCHITECTURE.md) ## Règles non-négociables - **Pas de Next.js, pas de Vercel.** Stack = Vite/React + NestJS, déploiement k3s. - **L'IA ne mute jamais la DB sans clic de confirmation utilisateur.** Le backend renvoie des `ProposedAction[]`, la PWA confirme via modal, puis `/ai/command/confirm` exécute. - **Single-user.** Bearer token statique, pas de multi-tenant. - **Design = portfolio arthurbarre.fr** (cream `#F5F1EA`, ink `#0F0F0F`, accent orange `#FF4A1C`, mono labels, bordures, italique = orange). PAS le violet/cyan du HTML jobs. - **FR only** côté IA (prompts + STT lang=fr). - **Postgres standalone dans le k3s** (plus de Supabase), schéma dédié `ordinarthur_os`. ORM = **Drizzle** (via `packages/db`). ## Phases Voir `PLAN.md`. Implémentation séquentielle Phase 0 → 7. Phase 8 (finance) reportée. ## Conventions repo - Monorepo pnpm + Turborepo - `apps/pwa` Vite + React + TanStack Router/Query + Tailwind + shadcn - `apps/api` NestJS (modules par domaine), Drizzle ORM via `@ordinarthur-os/db` - `packages/shared` types + zod DTOs partagés PWA ↔ API - `packages/db` schéma Drizzle + `migrations/` SQL versionnées (runner `pnpm --filter @ordinarthur-os/db migrate`) - Pas de fichier `.env` commité, juste `.env.example`