01
Retrieval pipeline
A FastAPI ingestion service fetches transcripts (youtube-transcript-api with a yt-dlp fallback), chunks them semantically while preserving timestamps, embeds each chunk with sentence-transformers (all-MiniLM-L6-v2), and stores vectors in ChromaDB. Retrieved chunks are injected into Gemini Flash prompts so every answer can cite the moment it came from.
- ▸Timestamp-preserving chunking enables [MM:SS] citations in chat answers.
- ▸ChromaDB vector store with ONNX embeddings keeps retrieval fast and local.
- ▸SQLite + SQLAlchemy persist video metadata, summaries, and the user library.
02
Classical ML inside a GenAI app
A TF-IDF + Logistic Regression intent classifier (~85% accuracy) routes each user query to the right skill — RAG chat, summary, quiz, or flashcards — so the LLM is called with a purpose-built prompt instead of one generic prompt.
- ▸scikit-learn model trained on labelled query intents.
- ▸Deterministic routing keeps token cost and latency predictable.
- ▸slowapi rate limiting and JWT verification protect the public API.
03
Product surfaces
The web client is React 18 + Vite with Tailwind CSS v4, shadcn/ui, Framer Motion, and TanStack Query; the mobile app is Expo / React Native with Expo Router and shared UI patterns. Both share the same REST API, and the web app supports anonymous browser-local identity for instant access.
- ▸Chat, summary, quiz, and flashcard panels in a single video workspace.
- ▸Browser-local library to revisit previous learning sessions.
- ▸Packaged for autoscale deployment; walkthrough captured in the demo video and report.