Froidefond Julien 17f5dfbf94
Some checks failed
Deploy with Docker Compose / deploy (push) Failing after 3s
feat: enhance RadarChart component with initial dimensions
- Added initial dimensions for height and width based on the compact prop to improve layout handling.
- Updated ResponsiveContainer to utilize the new initialDimension prop for better responsiveness.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 14:22:02 +01:00

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 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 Pagesrc/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.tscanAccessEvaluation() 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 15, 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 15, 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

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)

  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

  • 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 15, 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
No description provided
Readme 1.6 MiB
Languages
TypeScript 98.3%
Dockerfile 0.7%
CSS 0.4%
JavaScript 0.3%
Shell 0.3%