Remote Exam Proctoring Tool
Proctoring Dashboard
Live Student Monitoring
Select a student from the Dashboard to begin monitoring.
Screen Share
Simulated Screen Share Feed
Webcam Feed
Simulated Webcam Feed
Event Log
Proctoring Configuration
Allowed Applications & Websites
Export Proctoring Report
Monitor a student session to generate a report for export.
A report for is ready. Click below to download the detailed proctoring session as a PDF.
${e.time} ${e.msg}
`).join(''); // Show export option exportPlaceholder.classList.add('hidden'); exportContent.classList.remove('hidden'); reportStudentName.textContent = student.name; } // --- EVENT HANDLERS & LOGIC --- window.monitorStudent = (studentId) => { renderMonitoringView(studentId); changeTab(null, 'monitoring'); } function addWhitelistItem() { const item = whitelistInput.value.trim(); if (item && !whitelistedItems.includes(item)) { whitelistedItems.push(item); renderWhitelist(); whitelistInput.value = ''; } } window.removeWhitelistItem = (index) => { whitelistedItems.splice(index, 1); renderWhitelist(); } function addEventToLog(studentId, msg, level = 'warning') { const student = students.find(s => s.id === studentId); if(student) { const time = new Date().toLocaleTimeString('en-US', { hour12: false }); student.events.push({ time, msg }); if(level === 'danger') student.status = 'danger'; else if(level === 'warning' && student.status !== 'danger') student.status = 'warning'; if(monitoredStudentId === studentId) { renderMonitoringView(studentId); } renderStudentGrid(); } } flagBtn.addEventListener('click', () => { if(monitoredStudentId) { addEventToLog(monitoredStudentId, 'Proctor manually flagged session for review.', 'warning'); } }); endSessionBtn.addEventListener('click', () => { if(monitoredStudentId && confirm('Are you sure you want to end this session? This action cannot be undone.')) { addEventToLog(monitoredStudentId, 'Proctor manually ended the session.', 'danger'); // In a real app, this would also terminate the student's exam access. } }); function downloadPDF() { const student = students.find(s => s.id === monitoredStudentId); if (!student) { alert('No student session is being monitored.'); return; } const pdfContentEl = document.getElementById('pdf-content'); // Create the report content dynamically pdfContentEl.innerHTML = `Proctoring Report
Student: ${student.name}
ID: ${student.id}
Date: ${new Date().toLocaleDateString()}
Event Log
| Time | Event Description |
|---|---|
| ${e.time} | ${e.msg} |
