d9073c29bc1752bd9d2e54b0db1e82a2d7961083
- Enhanced the matcher configuration to exclude SVG, PNG, JPG, JPEG, GIF, WEBP, and ICO file types from middleware processing, improving asset handling.
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
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.
Note : Si la DB existe déjà (créée avec db push), pour basculer sur les migrations :
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)
docker compose -f docker-compose.dev.yml up
Production — SQLite (simple, port 3044)
AUTH_SECRET=$(openssl rand -base64 32) \
DB_VOLUME_PATH=/chemin/vers/data \
docker compose up -d
Production — Postgres
docker compose -f docker-compose.postgres.yml up -d
Le
Dockerfileinclut le client Prisma compilé pour Linux (debian-openssl-3.0.x). La base est migrée automatiquement au démarrage viadocker-start.sh.
Architecture
Flux de données (server-first)
- Server Page →
src/lib/server-data.ts(appelleauth()+ Prisma) - La page passe les données sérialisées aux Client Components (
src/components/) - Les composants clients appellent les Server Actions (
src/actions/) pour les mutations - 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) etadmin - 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 :
isPublicrend 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
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
# 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)
- Configurer
DATABASE_URLvers Postgres (Supabase, Neon, etc.) - Générer
AUTH_SECRET:openssl rand -base64 32 - Appliquer les migrations :
pnpm db:migrate - Seeder si besoin :
pnpm db:seed - Build :
pnpm build && pnpm start - 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
- Auth bcrypt multi-utilisateurs, rôles admin/evaluator
- Dashboard : liste et cartes d'évaluations, groupement par équipe
- Créer/modifier une évaluation : candidat, rôle, équipe, date, template
- Templates : Full 15 dim, Short 8 dim
- Guide d'entretien : définition, rubrique 1→5, signaux, questions par dimension
- Scoring : note 1–5, justification, exemples, confiance
- Questions de sondage quand score ≤ 2
- Assistant IA (stub) : suggestions de relance
- Radar chart + findings/recommandations auto-générés
- Export PDF et CSV
- Administration : templates et gestion des utilisateurs
- Partage d'évaluation avec d'autres utilisateurs
- Visibilité publique (
isPublic) - Alerte si tous les scores = 5 sans commentaires
- Modification post-soumission avec audit log
- Page paramètres : changer nom et mot de passe
- Responsive mobile (Tailwind)
Description
Languages
TypeScript
98.3%
Dockerfile
0.7%
CSS
0.4%
JavaScript
0.3%
Shell
0.3%