What inspired us

We’ve all sat in a 200-person lecture, been completely lost on one slide, and said nothing. Putting your hand up in front of the whole hall feels impossible, especially for international students following in their second language. So we’d go home and paste the question into a chatbot, which just gave us the answer. We felt like we understood it, but we didn’t, and it showed in the exam. Meanwhile, lecturers have no idea which slide lost the room until results come back. We wanted to make that moment of confusion visible, and then help students actually think their way out of it instead of being handed answers.

What we learned Guiding beats answering. Research shows AI tutors that guide rather than answer improve learning, while ones that just answer can make results worse. That shaped the whole coach: guide first, explain only after real attempts, and hints only on assessed work. Rules belong in code, not just prompts. A prompt can be talked around. Mode switching, coursework locking and citation checks all run as checks in code that the student can’t talk around. Privacy is a design decision. The lecturer heatmap only shows a slide once 5 or more students mark it, and audio is never stored, only live text. Real data breaks toy assumptions. Testing on our actual lecture PDFs exposed broken bullets, repeated footers and filler words ruining search, so we fixed them. Merging five people’s work is a project in itself. Shared API contracts and agreeing on route names early would have saved us hours.

How we built it Frontend: React with Vite. Students upload their own module PDFs, read them in a built-in PDF reader, press “I’m lost”, chat with the coach, and see live captions. Lecturers get an insights page. Backend: FastAPI with SQLite for lost moments, student memory, coach sessions, tutor handoffs and an event log, plus WebSockets for the live lecture room and the captions. Slides: PDFs are turned into searchable text, so the coach only ever cites real slides from that lecture. AI coach: Claude, with three modes (Guide, Explain, Hints only), an independent check that stops replies leaking the answer, and memory per student, per lecture and per concept. Live captions: browser speech recognition plus Claude translation, which keeps technical terms in English. Extras: Canvas login, staff accounts, metrics for “is it working”, and Docker for deployment.

Challenges we faced Integration: five branches built in parallel clashed on files, route names and two different login systems. We had to merge them into one app without breaking anyone’s work. Connecting the coach to real slides: it started on hard-coded demo slides. We had to make sure it only searches inside the right lecture, so two lectures never leak into each other, and that coursework status is decided by the server, never the browser. Messy PDFs: real lecture slides came with symbol fonts, ligatures and repeated footers, and search ranked the wrong slides until we fixed it. Tooling: setup issues like a Windows path-length limit and a GitHub app that couldn’t push to our repo cost us time on the day.

Share this project:

Updates

Submission history