Application de révision des vérifications du permis de conduire (banque officielle DSR/BRPCE) avec saisie libre et analyse sémantique des réponses, pour s'entraîner dans des conditions proches de l'examen.
- Fonctionnement
- Fonctionnalités
- Lancement
- Structure du projet
- Déploiement Netlify (avec Gemini)
- Configuration Gemini
- Dépannage (Troubleshooting)
- Pas de QCM : vous répondez en saisie libre, comme à l'examen.
- Analyse IA (Gemini) : en production sur Netlify, les réponses sont analysées par l'API Gemini pour une évaluation contextuelle.
- Fallback automatique : si Gemini est indisponible (quota, erreur), l'app utilise l'analyse par mots-clés. L'app reste utilisable à 100 %.
- Indicateur de source : le feedback indique « Analyse IA » ou « Mots-clés » selon la méthode utilisée.
| Fonctionnalité | Description |
|---|---|
| Filtres par catégorie | VI, VE, Sécurité, Secours |
| Saisie libre | Réponse comme à l'examen, pas de QCM |
| Analyse Gemini | Évaluation contextuelle (contexte, reformulation) |
| Analyse mots-clés | Fallback si Gemini échoue |
| Indicateur source | Badge « Analyse IA » ou « Mots-clés » dans le feedback |
| Loading state | Bouton « Vérification… » pendant l'appel API |
| Questions avec images | Zones cliquables pour les vérifications (voir data/images-config.json) |
npm startPuis ouvrez http://localhost:3000.
Note : En local, la fonction Netlify (
/.netlify/functions/analyze-gemini) n'est pas disponible. L'app utilisera toujours l'analyse par mots-clés. Pour tester Gemini, déployez sur Netlify.
Exemple Netlify : projet test
Permis/
├── index.html # Page principale
├── app.js # Logique (questions, analyse, UI)
├── styles.css # Styles
├── data/
│ ├── questions.json # Banque de questions + keyPoints
│ └── images-config.json # Images et zones cliquables (VI/VE)
├── netlify/
│ └── functions/
│ └── analyze-gemini.js # Fonction serverless appelant l'API Gemini
├── netlify.toml # Config Netlify
└── README.md # Ce fichier
Chaque question dans data/questions.json contient :
question: la question poséeexpectedAnswer: la réponse de référencekeyPoints: notions à retrouver dans la réponse (pour l'analyse mots-clés)
- Créez un site Netlify à partir du dépôt GitHub.
- Dans Site settings → Environment variables, ajoutez :
GEMINI_API_KEY: clé depuis Google AI Studio- (optionnel)
GEMINI_MODEL: modèle forcé, ex.gemini-2.5-flash
- Déployez. Netlify publie le site et la fonction
/.netlify/functions/analyze-gemini.
| Variable | Obligatoire | Description |
|---|---|---|
GEMINI_API_KEY |
Oui | Clé API depuis Google AI Studio |
GEMINI_MODEL |
Non | Force un modèle (ex. gemini-2.5-flash). Si absente, plusieurs modèles sont essayés. |
gemini-2.5-flashgemini-2.5-flash-litegemini-2.0-flashgemini-1.5-flashgemini-1.5-pro
En cas de 404, le modèle suivant est essayé. En cas de 429 (quota), la fonction retente avec des délais (4 s, 8 s, 12 s).
Causes possibles :
- Test en local : la fonction Netlify n'existe pas localement. Déployez sur Netlify pour tester Gemini.
- Clé manquante : vérifiez que
GEMINI_API_KEYest définie dans les variables d'environnement Netlify. - Erreurs API : regardez les logs Netlify (Functions → Logs) pour voir les erreurs.
Les modèles gemini-1.5-* et gemini-pro peuvent être dépréciés selon votre compte.
Solution : définir GEMINI_MODEL=gemini-2.5-flash (ou gemini-2.0-flash) dans les variables Netlify.
Le quota gratuit Google AI Studio est d’environ 15 requêtes par minute.
Solutions :
- Attendre 1 minute avant de refaire une requête.
- Activer la facturation sur le projet Google Cloud pour augmenter les limites.
- L’app fait déjà des retries avec délais (4 s, 8 s, 12 s) avant de passer au fallback mots-clés.
La fonction peut durer jusqu’à ~30 s en cas de retries 429. Si Netlify timeout (10 s gratuit, 26 s Pro), la fonction est coupée et l’app bascule sur les mots-clés.
Solution : réduire les retries ou augmenter le timeout Netlify (plan Pro).
L’analyse par mots-clés compare la réponse aux keyPoints définis dans questions.json. Si la plupart des mots sont présents (même hors contexte), le score est élevé.
Solution : la qualité de l’analyse dépend de Gemini. En cas de 429/404, l’app utilise les mots-clés par défaut.
Projet personnel – Banque officielle DSR/BRPCE.