function InstructorPortal({ onNavigate }) { const [riskOnly, setRiskOnly] = React.useState(false); const batch = [ { name: 'Rahul Kumar', trade: 'Fitter', roll: 'FTR-24-018', prog: 68, score: 82, streak: 12, risk: null }, { name: 'Pooja Devi', trade: 'Fitter', roll: 'FTR-24-032', prog: 91, score: 88, streak: 21, risk: null }, { name: 'Amit Verma', trade: 'Fitter', roll: 'FTR-24-041', prog: 42, score: 61, streak: 3, risk: 'medium' }, { name: 'Suresh Naik', trade: 'Fitter', roll: 'FTR-24-054', prog: 24, score: 48, streak: 0, risk: 'high' }, { name: 'Priya Behera', trade: 'Fitter', roll: 'FTR-24-071', prog: 76, score: 79, streak: 9, risk: null }, { name: 'Manoj Sahu', trade: 'Fitter', roll: 'FTR-24-089', prog: 58, score: 72, streak: 5, risk: null }, { name: 'Ritika Panda', trade: 'Fitter', roll: 'FTR-24-092', prog: 84, score: 91, streak: 18, risk: null }, { name: 'Deepak Meher', trade: 'Fitter', roll: 'FTR-24-101', prog: 34, score: 56, streak: 2, risk: 'medium' }, ]; return (
Instructor Portal

Fitter · Batch F-2024-A

Semester 3 · 38 students · Govt ITI Cuttack

{/* Top KPI row */}
{[ { k: '38', v: 'Students in batch', s: '2 at risk', color: 'var(--red-600)' }, { k: '64%', v: 'Avg. course completion', s: '↑ 6% this week', color: 'var(--green-600)' }, { k: '74', v: 'Avg. assessment score', s: 'On track for AITT', color: 'var(--green-600)' }, { k: '11 / 14', v: 'Practicals cleared (avg)', s: '3 batches lagging', color: 'var(--saffron-600)' }, ].map(s => (
{s.k}
{s.v}
{s.s}
))}
{/* Roster */}
Student roster
Sortable by progress, score, or streak
{(riskOnly ? batch.filter(s => s.risk) : batch).map((s, i) => ( ))}
STUDENT PROGRESS SCORE STREAK STATUS
{s.name.split(' ').map(w => w[0]).slice(0, 2).join('')}
{s.name}
{s.roll}
= 75 ? 'var(--green-600)' : s.prog >= 50 ? 'var(--saffron-500)' : 'var(--red-600)' }}/>
{s.prog}%
{s.score} = 7 ? 'var(--saffron-600)' : 'var(--ink-600)' }}> {s.streak}d {s.risk === 'high' && ● At risk — 3 missed} {s.risk === 'medium' && ◐ Falling behind} {!s.risk && ● On track}
{/* Performance heatmap */}
Concept mastery heatmap
Weakest concepts across the batch
{[ { t: 'Bench work — filing', v: 84 }, { t: 'Measuring — vernier caliper', v: 71 }, { t: 'Marking — surface plate', v: 78 }, { t: 'Fits & tolerances', v: 52 }, { t: 'Sheet metal joining', v: 46 }, { t: 'Drilling — speed & feed', v: 68 }, { t: 'Threading — dies', v: 61 }, { t: 'Reading engineering drawings', v: 39 }, ].map(c => (
{c.t} {c.v}%
))}
Today's classes
{[ { t: '09:00', c: 'Theory: Fits & tolerances', room: 'CR-3' }, { t: '11:30', c: 'Practical: Filing exercise', room: 'W-1' }, { t: '14:00', c: 'Virtual lab: MIG welding', room: 'Digital Lab' }, ].map(x => (
{x.t}
{x.c}
{x.room}
))}
); } window.InstructorPortal = InstructorPortal;