Problem
Lectures are the densest course material and the hardest to search. Students scrub through hour-long videos to find one explanation, and generic chatbots answer confidently without showing where the answer came from, so nothing can be verified.
Constraints
I built it solo on free tiers, with no GPU in the cloud. Citations had to be trustworthy, because an invented timestamp is worse than no answer. Professors upload raw video up to 2 GB and 2 hours long, and processing couldn’t depend on anyone’s laptop being on.
Approach
Lectures are transcribed with Whisper, and slides are detected by scene change and read with Gemini. Transcripts are split into 60–90 second segments plus 20 second sub-chunks. Retrieval fuses vector and full-text search, and a similarity gate returns “Not covered” before any model is called. An LLM reranker narrows the results, and Groq writes the answer. Every citation is validated in code and then refined to the exact sentence.
Architecture
Next.js 16 on Vercel, Supabase Postgres with pgvector, Auth and an Edge Function for embeddings, and Cloudflare R2 for video. A Python worker on GitHub Actions claims jobs straight from Postgres using SKIP LOCKED, with no Redis. It runs resumable pipeline stages and writes results back to R2 and Postgres. Row-level security handles access control.
Results
On a 150-question eval set, the right passage ranks first 80% of the time and is in the top six 95% of the time. Every answer passed citation validation, 95% of citations land inside the correct passage, and median answer time is 1.78 seconds. CI blocks any push that drops recall. It runs for $0 a month.
