corenthin-lebreton 401146a34a Dockerfile modif
2026-02-26 22:13:38 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 22:07:18 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 22:13:38 +01:00
2026-02-26 22:13:38 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00
2026-02-26 20:10:14 +01:00

SolyQuiz 🎯

Plateforme de gestion de quiz interactifs pour formateurs et étudiants.

Stack Technique

  • Frontend/API: Next.js 15 (TypeScript, Tailwind CSS, App Router)
  • Base de données & Auth: Supabase (PostgreSQL, Supabase Auth, Supabase Realtime)
  • IDs courts: nanoid (codes de session 6 caractères)

Installation

1. Prérequis

2. Configuration

# Cloner et installer les dépendances
npm install

# Copier le fichier d'environnement
cp .env.local.example .env.local

Remplir .env.local avec vos credentials Supabase :

NEXT_PUBLIC_SUPABASE_URL=https://votre-projet.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=votre-anon-key
SUPABASE_SERVICE_ROLE_KEY=votre-service-role-key
NEXT_PUBLIC_APP_URL=http://localhost:3000

3. Base de données

Exécuter le script SQL dans l'éditeur SQL de votre projet Supabase :

# Copier le contenu de supabase/schema.sql dans l'éditeur SQL Supabase

4. Démarrer

npm run dev

L'application sera disponible sur http://localhost:3000

Architecture des Pages

Route Description
/login Authentification formateur
/dashboard Dashboard overview (KPIs + sessions actives)
/dashboard/quizzes Gestion des quiz (catégories/chapitres)
/dashboard/sessions/create Création d'une nouvelle session
/dashboard/sessions/[id]/live Dashboard temps réel de la session
/dashboard/reports Liste des rapports de sessions
/quiz/[code] Page de connexion étudiant (via short_code)
/quiz/[code]/exam Interface de quiz pour l'étudiant
/quiz/[code]/results Page de résultats avec correction détaillée

API Routes

Endpoint Méthode Description
/api/upload-quiz POST Import d'un quiz via fichier JSON
/api/sessions/create POST Créer une session avec short_code unique
/api/sessions/[id]/toggle PATCH Activer/désactiver une session
/api/student/join POST Rejoindre une session (crée une participation)
/api/student/submit-answer POST Enregistrer une réponse étudiant
/api/student/finish POST Terminer le quiz et calculer la note
/api/student/results GET Récupérer les résultats détaillés

Format JSON pour l'import de Quiz

{
  "title": "Titre du Quiz",
  "category": "Catégorie (optionnel)",
  "subchapter": "Sous-chapitre (optionnel)",
  "questions": [
    {
      "question": "Texte de la question",
      "explanation": "Explication affichée après (optionnel)",
      "answers": [
        { "text": "Réponse A", "correct": false },
        { "text": "Réponse B", "correct": true },
        { "text": "Réponse C", "correct": false },
        { "text": "Réponse D", "correct": false }
      ]
    }
  ]
}

Voir quiz-example.json pour un exemple complet.

Calcul de la Note

La note est calculée côté serveur avec la formule :

Note = (C / N) × 20

Où :

  • N = nombre total de questions
  • C = nombre de bonnes réponses

Le résultat est arrondi à 2 décimales.

Sécurité

  • Row Level Security (RLS) activé sur toutes les tables
  • Les formateurs ne voient que leurs propres quizzes/sessions
  • Les étudiants accèdent uniquement via un short_code actif
  • Middleware Next.js pour la protection des routes /dashboard

Temps Réel

Le dashboard formateur (/dashboard/sessions/[id]/live) utilise Supabase Realtime pour afficher en temps réel :

  • Les nouveaux participants qui rejoignent
  • La progression (en_cours → terminé)
  • Les scores finaux
Description
No description provided
Readme 435 KiB
Languages
TypeScript 98.4%
Dockerfile 1%
CSS 0.6%