README entièrement reécrit en français pour les développeurs Peaksys : architecture server-first, auth bcrypt/rôles, Docker, variables d'env, pages & fonctionnalités, structure des fichiers à jour. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
216 lines
7.7 KiB
Markdown
216 lines
7.7 KiB
Markdown
# IA Gen Maturity Evaluator
|
||
|
||
Application web de maturité IA/GenAI pour évaluer les candidats lors d'entretiens techniques. Développée par Peaksys pour Peaksys.
|
||
|
||
## Stack technique
|
||
|
||
- **Next.js 15** (App Router), **React 19**, **TypeScript**, **TailwindCSS**
|
||
- **NextAuth v5** — authentification JWT, bcrypt, rôles `admin` / `evaluator`
|
||
- **Prisma** + **SQLite** (dev) — basculer sur Postgres/Supabase en production
|
||
- **Recharts** — radar chart des scores
|
||
- **jsPDF** — export PDF
|
||
- **Vitest** — tests unitaires | **Playwright** — tests E2E
|
||
|
||
## Prérequis
|
||
|
||
- Node.js ≥ 20
|
||
- pnpm (`npm install -g pnpm`)
|
||
|
||
## Installation & démarrage local
|
||
|
||
```bash
|
||
pnpm install
|
||
cp .env.example .env # puis remplir AUTH_SECRET
|
||
pnpm db:generate
|
||
pnpm db:push # ou pnpm db:migrate pour une DB vide
|
||
pnpm db:seed
|
||
pnpm dev
|
||
```
|
||
|
||
Ouvrir [http://localhost:3000](http://localhost:3000).
|
||
|
||
**Note :** Si la DB existe déjà (créée avec `db push`), pour basculer sur les migrations :
|
||
|
||
```bash
|
||
pnpm prisma migrate resolve --applied 20250220000000_init
|
||
```
|
||
|
||
## Variables d'environnement
|
||
|
||
| Variable | Obligatoire | Description |
|
||
|----------|-------------|-------------|
|
||
| `DATABASE_URL` | Oui | `file:./dev.db` en local, URL Postgres en prod |
|
||
| `AUTH_SECRET` | Oui | Secret JWT NextAuth (générer avec `openssl rand -base64 32`) |
|
||
| `NEXTAUTH_URL` | Prod | URL publique de l'app (ex. `https://eval.peaksys.io`) |
|
||
|
||
## Docker
|
||
|
||
Trois configurations disponibles :
|
||
|
||
### Développement (hot-reload)
|
||
|
||
```bash
|
||
docker compose -f docker-compose.dev.yml up
|
||
```
|
||
|
||
### Production — SQLite (simple, port 3044)
|
||
|
||
```bash
|
||
AUTH_SECRET=$(openssl rand -base64 32) \
|
||
DB_VOLUME_PATH=/chemin/vers/data \
|
||
docker compose up -d
|
||
```
|
||
|
||
### Production — Postgres
|
||
|
||
```bash
|
||
docker compose -f docker-compose.postgres.yml up -d
|
||
```
|
||
|
||
> Le `Dockerfile` inclut le client Prisma compilé pour Linux (`debian-openssl-3.0.x`).
|
||
> La base est migrée automatiquement au démarrage via `docker-start.sh`.
|
||
|
||
## Architecture
|
||
|
||
### Flux de données (server-first)
|
||
|
||
1. **Server Page** → `src/lib/server-data.ts` (appelle `auth()` + Prisma)
|
||
2. La page passe les données sérialisées aux **Client Components** (`src/components/`)
|
||
3. Les composants clients appellent les **Server Actions** (`src/actions/`) pour les mutations
|
||
4. Les server actions appellent `revalidatePath()` pour invalider le cache
|
||
|
||
### Authentification & rôles
|
||
|
||
- `src/auth.ts` — NextAuth v5, Credentials provider (email + bcrypt), stratégie JWT
|
||
- Deux rôles : `evaluator` (défaut) et `admin`
|
||
- Inscription via `/auth/signup` (`POST /api/auth/signup`)
|
||
- `src/middleware.ts` — protège toutes les routes ; redirige les non-admins hors des routes admin
|
||
|
||
### Contrôle d'accès aux évaluations
|
||
|
||
`src/lib/evaluation-access.ts` — `canAccessEvaluation()` est la source de vérité unique :
|
||
|
||
- Utilisateur **admin** → accès total
|
||
- Utilisateur **evaluator** propriétaire → accès total
|
||
- Évaluation **partagée** (`EvaluationShare`) → accès lecture/écriture
|
||
- Évaluation **publique** (`isPublic = true`) → accès lecture seule
|
||
|
||
### Important : staleness du JWT
|
||
|
||
`session.user.name` est gelé au moment du login. Pour afficher le nom à jour, interroger Prisma via `session.user.id` — ne pas se fier à la session.
|
||
|
||
## Pages & fonctionnalités
|
||
|
||
| Route | Accès | Description |
|
||
|-------|-------|-------------|
|
||
| `/` | Tous | Redirect vers `/dashboard` |
|
||
| `/dashboard` | Auth | Liste des évaluations, groupement par équipe, vue carte ou tableau |
|
||
| `/evaluations/new` | Auth | Créer une évaluation (candidat, rôle, équipe, template) |
|
||
| `/evaluations/[id]` | Voir accès | Guide d'entretien, scores 1–5, justifications, radar chart, export |
|
||
| `/admin` | Admin | Gestion des templates et des utilisateurs |
|
||
| `/settings` | Auth | Modifier son nom et son mot de passe |
|
||
| `/auth/login` | Public | Connexion |
|
||
| `/auth/signup` | Public | Inscription |
|
||
|
||
### Fonctionnalités clés
|
||
|
||
- **Scoring** : note 1–5, justification, exemples observés, niveau de confiance
|
||
- **Questions de sondage** : affichées automatiquement quand score ≤ 2
|
||
- **Assistant IA (stub)** : suggestions de questions de relance (`/api/ai/suggest-followups`)
|
||
- **Export** : CSV (`/api/export/csv?id=`) et PDF (`/api/export/pdf?id=`)
|
||
- **Radar chart** : visualisation des scores par dimension
|
||
- **Partage** : partager une évaluation avec d'autres utilisateurs (`EvaluationShare`)
|
||
- **Visibilité publique** : `isPublic` rend une évaluation lisible sans authentification
|
||
- **Audit log** : toute modification post-soumission est tracée
|
||
- **Warning** : alerte si tous les scores = 5 sans justification
|
||
|
||
## Commandes utiles
|
||
|
||
```bash
|
||
pnpm dev # Serveur de développement
|
||
pnpm build # Build production
|
||
pnpm lint # ESLint
|
||
pnpm typecheck # tsc --noEmit
|
||
|
||
pnpm db:generate # Régénérer le client Prisma après modif du schéma
|
||
pnpm db:push # Synchroniser le schéma (dev, sans fichiers de migration)
|
||
pnpm db:migrate # Appliquer les migrations (production)
|
||
pnpm db:seed # Injecter les données de seed
|
||
pnpm db:studio # Ouvrir Prisma Studio
|
||
```
|
||
|
||
## Tests
|
||
|
||
```bash
|
||
# Tests unitaires (Vitest)
|
||
pnpm test
|
||
|
||
# Tests E2E (Playwright) — nécessite le serveur dev lancé
|
||
pnpm exec playwright install # une seule fois
|
||
pnpm test:e2e
|
||
```
|
||
|
||
## Déploiement (production)
|
||
|
||
1. Configurer `DATABASE_URL` vers Postgres (Supabase, Neon, etc.)
|
||
2. Générer `AUTH_SECRET` : `openssl rand -base64 32`
|
||
3. Appliquer les migrations : `pnpm db:migrate`
|
||
4. Seeder si besoin : `pnpm db:seed`
|
||
5. Build : `pnpm build && pnpm start`
|
||
6. Ou déployer sur Vercel (variables d'env à configurer, Vercel Postgres ou DB externe)
|
||
|
||
## Structure des fichiers
|
||
|
||
```
|
||
src/
|
||
├── app/
|
||
│ ├── api/ # Routes API (export CSV/PDF, auth, AI stub)
|
||
│ ├── auth/ # Pages login / signup
|
||
│ ├── dashboard/ # Dashboard principal
|
||
│ ├── evaluations/ # Pages évaluation (new, [id])
|
||
│ ├── admin/ # Administration (templates, utilisateurs)
|
||
│ ├── settings/ # Paramètres utilisateur
|
||
│ └── page.tsx # Redirect vers /dashboard
|
||
├── actions/ # Server Actions (mutations)
|
||
│ ├── evaluations.ts
|
||
│ ├── share.ts
|
||
│ ├── admin.ts
|
||
│ └── password.ts
|
||
├── components/ # Composants UI (client + server)
|
||
└── lib/
|
||
├── server-data.ts # Toutes les requêtes DB (server-side)
|
||
├── evaluation-access.ts
|
||
├── export-utils.ts
|
||
└── ai-stub.ts
|
||
prisma/
|
||
├── schema.prisma
|
||
└── seed.ts
|
||
tests/e2e/ # Tests Playwright
|
||
```
|
||
|
||
## Données de seed
|
||
|
||
- **Utilisateur admin** : `admin@peaksys.local` / `admin123`
|
||
- **3 évaluations** de démonstration (Alice Chen, Bob Martin, Carol White) avec équipes
|
||
- **2 templates** : Full 15 dimensions, Short 8 dimensions
|
||
|
||
## Critères d'acceptation
|
||
|
||
- [x] Auth bcrypt multi-utilisateurs, rôles admin/evaluator
|
||
- [x] Dashboard : liste et cartes d'évaluations, groupement par équipe
|
||
- [x] Créer/modifier une évaluation : candidat, rôle, équipe, date, template
|
||
- [x] Templates : Full 15 dim, Short 8 dim
|
||
- [x] Guide d'entretien : définition, rubrique 1→5, signaux, questions par dimension
|
||
- [x] Scoring : note 1–5, justification, exemples, confiance
|
||
- [x] Questions de sondage quand score ≤ 2
|
||
- [x] Assistant IA (stub) : suggestions de relance
|
||
- [x] Radar chart + findings/recommandations auto-générés
|
||
- [x] Export PDF et CSV
|
||
- [x] Administration : templates et gestion des utilisateurs
|
||
- [x] Partage d'évaluation avec d'autres utilisateurs
|
||
- [x] Visibilité publique (`isPublic`)
|
||
- [x] Alerte si tous les scores = 5 sans commentaires
|
||
- [x] Modification post-soumission avec audit log
|
||
- [x] Page paramètres : changer nom et mot de passe
|
||
- [x] Responsive mobile (Tailwind)
|