Inspiration

Every student has had the experience of searching through dozens of lecture slides at 2 am trying to find one formula or definition. Course materials are scattered across LMS platforms — PDFs, slides, scanned notes, past exams — and no search tool actually understands what's in them. We wanted to build something that reads your course materials like a study partner and gives you cited, trustworthy answers grounded in your actual syllabus.

What it does

CourseChat is a Chrome extension that lives in your browser's side panel. You upload your course materials — lectures, assignments, exams, tutorials, textbook chapters — and it indexes them server-side using Backboard.io. Then you ask questions in plain English, and it answers using only your course content with inline citations back to the exact source document, page, and section. Math-heavy answers render cleanly with Unicode notation instead of raw LaTeX. It works with any course, any subject, any school.

How we built it

  • Chrome Manifest V3 extension with a React-based side panel UI
  • PDF.js for client-side text extraction across 15+ file formats (PDF, PPTX, DOCX, Jupyter notebooks, source code, LaTeX, and more)
  • Drag & drop file upload — students can drop one or many files directly into the panel
  • Backboard.io handles all RAG orchestration: chunking, embeddings, vector search, and answer generation
  • BYOK (Bring Your Own Key) model — users provide their free Google Gemini API key, achieving $0 cost
  • Multi-model fallback chain (gemini-3.6-flash → gemini-3.5-flash-lite → gemini-2.5-flash-lite) with programmatic retry logic for HTTP 429/404 resilience
  • Direct-Gemini fallback path when Backboard is unreachable — answers still work using locally cached context
  • Property-based testing with fast-check: 97 tests covering the RAG engine, Gemini wrapper, indexing orchestrator, and Backboard client
  • GitHub Actions CI/CD pipeline that runs tests, builds, and auto-bumps the version on every successful push

Challenges we ran into

  • Handling the variety of document formats students actually use (multi-part chapter PDFs, PPTX with embedded content, DOC legacy formats, Jupyter notebooks)
  • Designing the fallback chain to be truly transparent — users never know which model answered their question or whether Backboard or direct-Gemini handled it
  • Getting LaTeX math to render cleanly in a side panel — Gemini outputs raw LaTeX notation ($2^{12}$, \times) which looks terrible in a chat UI, so we built a client-side LaTeX-to-Unicode converter
  • Ensuring course context isolation so indexed materials never leak across courses
  • Removing legacy constraints (80k character cap, 300-word answer limit) that made sense before Backboard but were choking real-world usage with 30+ file courses

Accomplishments that we're proud of

  • Zero-cost AI tutoring — students with a free Gemini API key get full RAG capabilities without paying anything
  • Every answer has inline citations tied to the exact file and page of the source material — right under each bullet point, not lumped at the bottom
  • No document size limit — students uploaded 36 files (240k+ characters) in testing without hitting any cap
  • 15+ file format support covering CS, humanities, business, and STEM courses
  • Property-based testing with formal correctness guarantees: confidence thresholds, word limits, citation completeness, and course isolation are all verified programmatically
  • Clickable file tiles that let you preview the extracted text, so you can verify exactly what the AI is reading

What we learned

  • RAG systems need strict confidence thresholds — without them, the model hallucates "close enough" answers from unrelated chunks
  • Browser extension architecture (Manifest V3 service workers) has unique constraints around lifecycle and memory that don't exist in normal web apps
  • Backboard.io's API simplified what would have been weeks of vector database setup into a clean integration
  • LaTeX in chat UIs is a universal pain point — the solution was converting client-side at the rendering layer rather than fighting the model's output format
  • File format diversity is the real challenge — students don't just use PDFs; they have .docx lecture notes, .ipynb lab notebooks, .py starter code, and .pptx presentations all for one course

What's next for CourseChat

  • Chrome Web Store publication (in review)
  • Auto-detect course materials from LMS pages (Brightspace, Canvas) so students don't need to manually upload
  • AI Vision for diagrams — use Gemini's image understanding to read figures, flowcharts, and scanned pages that standard text extraction can't handle
  • Incremental textbook indexing — index 1500-page textbooks chapter by chapter across sessions on the free tier
  • Collaborative study groups — share a Course Context with classmates
  • Browser-native offline mode — cache recent answers locally for study without internet

Built With

  • ai
  • backboard.io
  • chrome-extension-(manifest-v3)
  • chrome-storage-api
  • education
  • fast-check
  • github-actions
  • google-gemini-api
  • pdf.js
  • rag
  • react
  • typescript
  • vite
  • vitest
Share this project:

Updates