All projects

Case study, 2026

CampusContext

CampusContext embeds an AI sidebar directly into Canvas LMS so students get context-aware help without leaving their coursework.

Role
Founder & Engineer
Status
Historical prototype

Problem

Students are constantly copy-pasting assignment prompts, quiz questions, and lecture PDFs into ChatGPT in another tab, losing context and breaking flow. The answers they get back know nothing about their course, their deadlines, or the materials their professor actually uploaded.

Solution

I built a Chrome extension (Manifest V3) that injects an AI sidebar into every Canvas page, indexes each course's materials into a local knowledge base, and streams answers from Google Gemini grounded in the student's actual coursework.

Impact

The historical v0.4 prototype demonstrated streaming Gemini chat, Canvas-material indexing, and inline widgets. The original repo is no longer available, so a rebuild and hardening pass remain planned work.

Build notes

  • JavaScript
  • Manifest V3
  • Chrome Extensions API
  • Google Gemini
  • Express
  • pdf.js

Problem

Students already use AI for coursework. The workflow is copy-paste from Canvas into a generic chatbot that knows nothing about the course, syllabus, files, deadlines, or professor context.

Build

  • Chrome extension injects an AI sidebar into Canvas pages.
  • Course context auto-detects from Canvas and caches for 24 hours.
  • Knowledge base indexes PDFs, DOCX files, Canvas Pages, and discussion threads.
  • Gemini chat streams inside Canvas with direct-answer and study modes.
  • Generative UI widgets render grade breakdowns, reminders, and study plans inside responses.

Technical Signal

  • Built around Manifest V3 constraints: streaming flows server to background to content script.
  • Indexed Canvas materials from PDFs, DOCX, Pages, and discussion threads using the student's active Canvas context.
  • Added SSRF validation on extract-text requests, restricting fetches to Canvas domains.
  • Historical review identified remaining work in widget sanitization, postMessage origin validation, storage partitioning, and keyboard access.

Current State

Version 0.4 was a working prototype of sidebar injection, course detection, material indexing, streaming chat, and inline widgets. The original repo is no longer available. Any return to the product starts with a rebuild, followed by security and accessibility hardening.

Why It Matters

The value is not the model. It is the course context the model normally lacks.