7
Apps
5
Content Scripts
4
LMS Platforms
7
Shared Packages
Coursology is a comprehensive AI-powered study platform spanning 7 applications in a Turborepo monorepo: a main web app, a Chrome browser extension, a React Native mobile app, an AI essay writer, a quiz generator, a podcast generator, and a marketing site — all sharing code through 7 internal packages.
The Chrome extension acts as a 'study sidekick' that injects AI assistance directly into any webpage, with dedicated integrations for Canvas, Blackboard, Moodle, and Brightspace LMS platforms. Students can screenshot questions, select text for explanations, right-click to solve, and annotate directly on their coursework.
The platform's AI capabilities include an essay writer with vector search for style learning, a podcast generator that creates multi-voice audio study content, a quiz generator with shareable graded sessions, and a chat interface over uploaded study materials.
The Chrome extension is the most technically ambitious piece. Built with Plasmo (MV3), it runs 5 content scripts simultaneously on every page: a screenshot AI explainer, a text-selection assistant, a right-click context menu solver, a canvas overlay for question annotation, and LMS-specific injection scripts.
Each content script uses Shadow DOM isolation to prevent CSS conflicts with host pages. The implementation uses a custom Emotion cache whose container is a <style> node injected into the shadow tree — this lets Chakra UI components render correctly inside the shadow boundary without leaking styles to or from the host page.
For LMS platforms, a custom getMountShadowHost function finds specific DOM anchors (buttons, toolbars) within each LMS interface, wraps the shadow host in a styled container, appends it next to the anchor, and disconnects the MutationObserver — achieving precise UI placement per platform without fragile global overlays.
The AI essay writer uses LangChain with Pinecone for RAG: uploaded source documents are split with RecursiveCharacterTextSplitter (chunk size 1000, overlap 100), embedded with OpenAI, and stored in Pinecone. Retrieval uses a similarity threshold of 0.85 for autocomplete and panel chat — balancing relevance with coverage.
The podcast generator orchestrates a multi-step Inngest pipeline: first generating a structured transcript with speaker assignments via OpenAI, then synthesizing each line with the appropriate ElevenLabs voice, and finally assembling and storing the audio in Vercel Blob. An interject API allows real-time interaction with the generated podcast.
The background script in the extension broadcasts authentication state changes to all tabs by listening to cookies on the Coursology domain and sending update_settings messages — ensuring content scripts stay authenticated without page reloads.