diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index e8cc8fe..bdfff08 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -208,6 +208,7 @@ function TutorApp({ currentUser, onLogout }) {
const [audioDebug, setAudioDebug] = useState([])
const [voiceProfiles, setVoiceProfiles] = useState([])
const [selectedVoiceProfileId, setSelectedVoiceProfileId] = useState('')
+ const [progressPanelOpen, setProgressPanelOpen] = useState(false)
const mediaRecorderRef = useRef(null)
const mediaStreamRef = useRef(null)
const recordedChunksRef = useRef([])
@@ -491,6 +492,7 @@ function TutorApp({ currentUser, onLogout }) {
stopSpeechPlayback()
deactivateAutoListening(false)
setSessionActive(false)
+ setProgressPanelOpen(false)
setCurrentInstruction('')
setAssessment(null)
setAssessmentAnswer('')
@@ -871,6 +873,151 @@ function TutorApp({ currentUser, onLogout }) {
}
}
+ const lastAssistantMessage = [...messages].reverse().find((message) => message.role === 'assistant')
+ const lastUserMessage = [...messages].reverse().find((message) => message.role === 'user')
+ const lessonSummary = lastAssistantMessage?.content || 'Aucune ancienne seance trouvee pour le moment. Professeur TOP commencera par une reprise courte.'
+ const lastStudentWork = lastUserMessage?.content || 'Aucune reponse recente enregistree.'
+ const nextLessonAdvice = lessonFocus
+ ? `Conseil: reprendre ${lessonFocus.label}, puis lancer un exercice court pour equilibrer la progression.`
+ : 'Conseil: demarrer une seance pour laisser Professeur TOP choisir la prochaine lecon.'
+
+ if (isStudentUser) {
+ return (
+
+ {!sessionActive ? (
+
+
+
+
Bonjour
+
{selectedStudent?.first_name || currentUser.username}
+
{selectedStudent?.grade || 'Classe non renseignee'}
+
+
+
+
+
+
+
+
+
+ Derniere seance
+ {lessonSummary}
+
+
+
+ Derniere reponse
+ {lastStudentWork}
+
+
+
+
+ Avancement
+ {lessonPercent}%
+
+ {lessonFocus?.label || 'Programme a definir'}
+
+
+
+
+ Prochaine lecon conseillee
+ {nextLessonAdvice}
+
+
+
+ {voiceStatus && {voiceStatus}
}
+ {errorMessage && {errorMessage}
}
+
+ ) : (
+
+
+
+
+ Professeur TOP
+ {currentInstruction ? (
+ {currentInstruction}
+ ) : (
+ Professeur TOP prepare la suite de la lecon.
+ )}
+
+
+
+ Ta reponse
+ {lastStudentTransmission || 'Dicte ou ecris ta reponse quand tu es pret.'}
+
+
+
+
+ {(voiceStatus || errorMessage || isAutoListening) && (
+
+ {errorMessage || voiceStatus || `Niveau micro: ${Math.round(Math.min(micLevel * 1200, 100))}%`}
+
+ )}
+
+ {progressPanelOpen && (
+ setProgressPanelOpen(false)}>
+
+
+ )}
+
+ )}
+
+ )
+ }
+
return (