Inspiration

We’ve all been there: sitting in a 75-minute lecture, scribbling notes as fast as possible, only to realize later we didn't actually absorb anything. Traditional note-taking is passive, and by the time you study for the exam, the context is often lost.

Passing Notes was born from the reality that students whisper, pass notes, and quietly sanity-check what they’re hearing. I wanted to capture that experience: the smart friend next to you who nudges you when something matters, flags when something doesn’t make sense, and keeps you engaged without hijacking your attention.

What it does

Passing Notes is an AI-powered lecture companion that transforms passive listening into active learning.

Live Transcription: Using the Web Speech API, it "listens" to the lecture in real-time.

The "Whisper" Summary: Every 30 seconds, the AI (affectionately named Ace) sends a short, conversational summary of the new information, often adding "gossipy" or outside context to keep it interesting.

Interactive Q&A: Users can type questions to clarify concepts on the fly.

Instant Pop Quizzes: At the end of a session, Ace generates a 7-question multiple-choice quiz based specifically on the lecture's content to ensure retention.

Permanent Records: Users can export the entire conversation into a clean PDF for later study.

How we built it

The project is a full-stack web app built around a lightweight, real-time pipeline.

Frontend: Built with plain HTML, CSS, and JavaScript for maximum speed. It utilizes the Web Speech API (webkitSpeechRecognition) for live transcription and html2pdf.js for client-side document generation.

Backend: A Python-based Flask server serves as the orchestrator, handling REST endpoints for side-note generation, grounded Q&A, and quiz creation.

AI Intelligence: We used the OpenRouter API to access GPT-4o mini. This allows for high-quality, conversational responses with low latency.

Efficiency: The system batches transcription chunks every 15–30 seconds rather than streaming continuously, which optimizes API usage and ensures the AI has enough context to be helpful.

Challenges we ran into

Speech Continuity: Browsers often timeout the microphone during moments of silence. We implemented a recursive restart logic to ensure the "recording" stays active throughout the entire lecture duration.

Structured Data Extraction: Getting an LLM to consistently return valid JSON for the quiz feature required robust Regex sanitization to strip out Markdown code blocks and conversational filler.

Context Management: As a lecture grows longer, sending the entire transcript to the AI becomes expensive and slow. We had to balance providing enough "previous context" with the "new chunk" to keep summaries relevant.

Accomplishments that we're proud of

I'm proud of building a fully live lecture companion that feels proactive rather than reactive. Implementing real-time note generation with minimal latency while maintaining a consistent "persona" (Ace) was a significant win.

What we learned

I learned about Asynchronous Data Handling. Managing a live transcript buffer while simultaneously making API calls taught me how to handle state in the frontend without interrupting the user experience.I also explored the science of learning. The quiz feature is based on the Ebbinghaus Forgetting Curve, which suggests that memory retention (R) decreases over time (t) unless the information is reinforced. The formula for this decay is: $$R = e^{-\frac{t}{S}}$$where S is the relative strength of memory. By providing an immediate quiz (t=0), Passing Notes effectively increases S right at the source, significantly improving long-term retention.

What's next for Passing Notes

The future involves Multi-Student Sync, allowing an entire study group to contribute to one "passed note." I also plan to integrate Vision AI to allow students to snap photos of chalkboards/slides, build integrations with Learning Management Systems (LMS) like Canvas or Blackboard, and add a Calendar sync to automatically label notes by course and date.

Built With

Share this project:

Updates