Initial commit

This commit is contained in:
jeremy bayse
2026-03-20 08:25:58 +01:00
commit a55a33ae2a
143 changed files with 19599 additions and 0 deletions

88
instruction.md Normal file
View File

@@ -0,0 +1,88 @@
📋 Plan de l'Application : RecruitQuizz ProCe document détaille les spécifications pour une plateforme de gestion de candidatures et d'évaluation technique.1. Architecture TechniqueBackend : Laravel 12 (PHP 8.4+)Frontend : Vue.js 3 ou React (via Vite) pour une interface réactive.Base de données : PostgreSQL ou MySQL.Stockage : Driver local ou S3 pour les CV et lettres de motivation.Authentification : Laravel Breeze ou Jetstream (pour gérer les deux types d'accès : Admin et Candidat).2. Structure des Données (Modèles)Voici les entités principales à générer :Candidate : Nom, email, téléphone, liens (GitHub/LinkedIn), status (en attente, testé, retenu).Document : Type (CV, LM), chemin du fichier, lié au Candidat.Quiz : Titre, description, temps imparti.Question : Libellé, type (QCM, texte court), points.Option : Les réponses possibles pour les QCM.Attempt (Essai) : Score final, temps passé, réponses du candidat, statut (terminé ou en cours).3. Fonctionnalités Clés🔐 Espace Administration (Ton interface)Dashboard : Vue d'ensemble (nombre de candidats, moyenne des scores).Gestion des Candidats : * Formulaire de création (Nom, Prénom, Email).Upload de documents avec prévisualisation PDF intégrée.Bouton "Générer Accès" : crée automatiquement un compte utilisateur avec un mot de passe unique.Banque de Questions : Interface pour saisir tes 40 questions et définir la bonne réponse.Comparateur : Tableau triable par score, temps de réponse et date de candidature.📝 Espace Candidat (Interface d'examen)Login Dédié : Accès restreint au quiz assigné.Interface Quiz : * Affichage une question à la fois.Barre de progression et compte à rebours.Sauvegarde automatique des réponses en base de données (pour éviter les pertes en cas de crash navigateur).Fin de test : Message de remerciement (sans afficher le score immédiatement, pour garder la main sur le feedback).4. Logique de ScoringPour comparer efficacement, nous utiliserons un calcul de score pondéré. Si $S$ est le score final, $n$ le nombre de questions, et $w$ le poids de chaque question :$$S = \sum_{i=1}^{n} (réponse_{i} \times poids_{i})$$Tu pourras également intégrer un ratio "Précision/Temps" pour départager deux candidats ayant le même score.5. Roadmap de Développement pour AntigravityDemande à Antigravity de suivre ces étapes dans l'ordre :Step 1 : Setup de Laravel 12 avec l'authentification multi-auth (Admin vs User).Step 2 : Création des migrations pour candidates, quizzes, questions et attempts.Step 3 : Développement du système d'upload de fichiers sécurisé (seul l'admin doit pouvoir lire les CV).Step 4 : Création du moteur de rendu du quiz côté Frontend (Vite/Vue).Step 5 : Développement de la vue "Comparatif" avec filtres et graphiques simples pour les scores.
Structure de la Base de Données
Rôle : Agis en tant qu'expert Architecte Laravel.
Objectif : Générer les migrations, les modèles et les relations Eloquent pour une application de recrutement appelée "RecruitQuizz".
Stack : Laravel 12, PHP 8.4.
Instructions techniques : > Crée les migrations et les modèles avec les champs et relations suivants :
User : Utilise la table par défaut mais ajoute un champ role (enum: admin, candidate).
Candidate : > - Champs : user_id (FK), phone, linkedin_url, status (en_attente, en_cours, termine).
Relation : BelongsTo User, HasMany Documents, HasMany Attempts.
Document : > - Champs : candidate_id (FK), type (cv, cover_letter), file_path, original_name.
Relation : BelongsTo Candidate.
Quiz : > - Champs : title, description, duration_minutes (default 60).
Relation : HasMany Questions.
Question : > - Champs : quiz_id (FK), label (text), points (int), type (qcm, open).
Relation : BelongsTo Quiz, HasMany Options.
Option : > - Champs : question_id (FK), option_text, is_correct (boolean).
Relation : BelongsTo Question.
Attempt (Essai) : > - Champs : candidate_id (FK), quiz_id (FK), score (float, nullable), started_at, finished_at (nullable).
Relation : BelongsTo Candidate, BelongsTo Quiz, HasMany Answers.
Answer : > - Champs : attempt_id (FK), question_id (FK), option_id (FK, nullable pour questions ouvertes), text_content (text, nullable).
Livrables attendus : > - Fichiers de migration complets avec contraintes d'intégrité (onDelete cascade).
Modèles PHP avec les propriétés $fillable et les méthodes de relations (HasMany, BelongsTo).
Interface Admin & UX
Rôle : Expert Frontend & UI/UX Designer.
Objectif : Créer les vues Blade/Vue.js pour le Dashboard Admin de "RecruitQuizz" en utilisant Tailwind CSS.
Directives de Design :
Style : Minimaliste, professionnel, mode sombre (dark mode) supporté.
Framework : Utiliser les composants Tailwind CSS (ou Flowbite/Headless UI).
Navigation : Une barre latérale (sidebar) fixe avec les sections : Dashboard, Candidats, Quiz, Comparateur.
Pages à générer :
Tableau de Bord (Index) : > - 4 "Stats Cards" en haut : Total Candidats, Tests terminés, Moyenne Générale, Meilleur Score.
Un graphique simple (Chart.js) montrant la distribution des scores.
Gestion des Candidats (Liste & Création) :
Un tableau (Datatable) avec recherche et filtres.
Un modal de création incluant l'upload de fichiers (Drag & Drop) pour le CV et la Lettre de Motivation.
Indicateurs visuels par badge pour le statut (ex: Success pour "Terminé", Warning pour "En attente").
Profil Candidat (Détails) :
Un panneau latéral ou une vue scindée : à gauche les infos/documents, à droite les résultats détaillés du quiz.
Intégration d'un Iframe ou Viewer PDF pour consulter le CV sans le télécharger.
Vue de Comparaison (Le "Leaderboard") :
Un tableau comparatif permettant de cocher 2 ou 3 candidats pour comparer leurs scores par catégorie de questions.
Colonnes : Nom, Score %, Temps passé, Date, Actions.
Livrables attendus :
Layout principal (App Layout).
Templates Blade avec composants réutilisables.
Scripts Vite pour la gestion des interactions (modaux, upload).