Students often spend hours rewatching long educational videos while trying to identify what will actually matter in an exam. Passive watching also makes it difficult to check whether they truly understand the material. I created VidTutor to turn a video into an active study session with explanations, recall practice, and a tutor students can question.

VidTutor accepts a public YouTube video with accessible captions and transforms it into:

  • A clear paragraph summary
  • Five important, exam-focused concepts
  • An optional detailed explanation
  • Six interactive question-and-answer flashcards
  • A conversational tutor grounded in the video's transcript

The interface was built with React, Vite, and CSS, while an Express and Node.js backend handles YouTube URLs, caption retrieval, study generation, validation, caching, and tutor conversations.

VidTutor defaults to a local Llama 3.1 8B model served through llama.cpp's OpenAI-compatible interface. This allows judges and students to run it without purchasing an API key. The backend also supports GPT-5.6 through the OpenAI API as an optional provider.

Generated content is passed through structured validation, sanitization, quality checks, and repair prompts. This prevents malformed summaries, incomplete responses, generic concepts, and repetitive flashcards from being displayed directly to students.

A Python launcher makes installation reproducible. On its first run, it detects CPU or NVIDIA GPU support, downloads pinned model and runtime files, verifies their SHA-256 hashes, installs npm dependencies, builds the application, starts both servers, and opens VidTutor in the browser.

I built VidTutor through an iterative collaboration with Codex using GPT-5.6. Codex helped translate the original idea into a working React interface and Express backend, integrate the model providers, design validation and repair logic, and create the automatic installation process.

I tested each iteration myself and used screenshots and concrete feedback to direct changes. This process identified issues such as schema fragments appearing inside summaries, invalid model responses, weak or repetitive questions, broken card-flip animations, and unreadable layouts. Codex helped diagnose and implement fixes, while I made the central product and design decisions.

The largest challenge was making a small local model produce reliable educational material. A valid response was not necessarily a useful response, so I added checks for exact concept and question counts, meaningful answer lengths, distinct question structures, and malformed content.

Another challenge was distribution. The model and llama.cpp binaries are more than 5 GB and cannot reasonably be stored in GitHub. I solved this with a resumable, checksum-verified first-run installer while keeping those artifacts out of the repository.

Built With

Share this project:

Updates

Submission history