# ordinarthur-os — Plan d'implémentation > **Status** : planning terminé 2026-04-15. À implémenter via Claude Code (Sonnet). ## Vision produit Un assistant personnel qui aide Arthur à s'organiser **sans le déresponsabiliser**. - Dashboard clair de ce qu'il fait / veut faire - Aucune action automatique invasive : l'IA propose, Arthur confirme d'un clic - Pas de "weekly review" automatique, pas de nudges - Une fonctionnalité signature : le **bouton "Parler"** — enregistrement vocal → Groq Whisper → Mistral function calling → création/enrichissement de todos, idées ou étapes projet, avec validation explicite avant écriture en base. **C'est le cœur du produit.** Les formulaires manuels sont intentionnellement minimalistes. ## Principes directeurs 1. **Self-hosted, open-source**. Pas de Vercel, pas de Next.js. Tout tourne sur le k3s d'Arthur. 2. **Single-user**. Pas de multi-tenant, pas d'invitations, pas de partage. Bearer token unique pour protéger l'API. 3. **PWA installable iOS**. Vite + React, pas de SSR. Service worker + mutation queue pour l'offline. 4. **BFF unique**. La PWA ne parle qu'au NestJS. Le Nest parle à Postgres, Mistral, Groq, Google Calendar, Telegram. 5. **Design éditorial / Swiss-brutalist** — mirror du portfolio arthurbarre.fr (cream, ink, orange, borders, mono labels). ## Stack verrouillée | Couche | Choix | | --- | --- | | Monorepo | pnpm workspaces + Turborepo | | Frontend | Vite + React 18 + TanStack Router + TanStack Query + Tailwind + shadcn/ui | | Backend | NestJS + Drizzle ORM (driver `postgres`) | | DB | Postgres 16 standalone (k3s StatefulSet + PVC), schéma dédié `ordinarthur_os` | | Auth | Bearer token statique (single-user), middleware Nest | | IA LLM | Mistral `mistral-small-latest` (low-cost) via API | | STT | Groq `whisper-large-v3-turbo` | | Bot | Telegram Bot API (webhook) | | Calendar | Google Calendar API (Apple souscrit au calendar Google via webcal) | | Langue IA | FR only | | Déploiement | Images Docker → Gitea Container Registry → pipeline Gitea Actions → k3s (Traefik + cert-manager supposés présents) | | Backups | CronJob k8s `pg_dump --schema=ordinarthur_os` quotidien → stockage S3-compatible (à confirmer avec Arthur) | ## Roadmap — ordre d'implémentation ### Phase 0 — Scaffold (prio immédiate) - Monorepo `pnpm-workspace.yaml`, `turbo.json` - `apps/pwa` : Vite + React + Tailwind + shadcn + manifest PWA + service worker placeholder + routing TanStack - `apps/api` : NestJS + module `health` + middleware bearer + client Drizzle initialisé - `packages/shared` : types et zod schemas partagés - `packages/db` : schéma Drizzle + premières migrations SQL (`0000_init` crée le schéma `ordinarthur_os`) - `deploy/k8s` : manifests génériques (à adapter ensuite à la conf Gitea/Traefik d'Arthur) - Design system : composants primitifs (`