📋 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).