Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

๐ŸŽ“ CourseTracker AI

โœจ Track every lecture. Never lose your place. โœจ

A modern Chrome Extension that auto-detects course websites and adds a smart progress-tracking system beside every video.

Manifest V3JavaScriptLicenseStatus


๐Ÿš€ What it does

Open a course page โ†’ checkboxes appear โ†’ tick what you've watched โ†’ progress bar updates โ†’ state is saved forever.

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CourseTracker AI โ”‚
โ”‚ Progress 18 / 45 40% โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ˜‘ 1. Introduction
โ˜‘ 2. Setup
โ˜ 3. Variables & Types
โ˜ 4. Functions

โœจ Features

๐ŸŽฏ Auto detectWorks on Udemy, Coursera, YouTube playlists, 100xDevs, and any generic course-style site
โœ… Inline checkboxesTick lectures right where they live in the page
๐Ÿ“Š Live progress barFloating sidebar shows completion in real time
โฑ๏ธ Total playlist durationSee watched / remaining / total time at a glance
๐Ÿ’พ Persistent statechrome.storage.local keeps your progress across sessions
๐ŸŒ— Dark / Light / AutoAdapts to your system theme automatically
โธ๏ธ Stop / โ–ถ๏ธ ResumeOne click to pause tracking on any page
๐Ÿ™ˆ Hide / ๐Ÿ™‰ ShowCollapse to a floating handle when you don't need it
๐Ÿ”„ SPA-awareMutationObserver + URL polling keeps up with React / lazy-load
๐Ÿ–๏ธ Draggable sidebarGrab the header to move the tracker anywhere; double-click the brand to reset
โœจ AI Playlist BuilderDescribe what you want ("all backend videos") and Groq picks the right lectures
๐Ÿ“‚ Custom playlistsCherry-pick lectures into named playlists that open in a dedicated tab
โ–ถ๏ธInline mini-playerPlay YouTube / Vimeo videos right inside the playlist tab โ€” minimize to a floating bottom-right window or close anytime
๐Ÿ“ค Export / ImportBackup your progress as JSON
โšก Zero buildPure vanilla JS โ€” no bundler, no dependencies

๐ŸŒ Supported Platforms

PlatformStatus
๐ŸŽฌ YouTube playlistsโœ…
๐ŸŸช Udemyโœ…
๐Ÿ”ต Courseraโœ…
๐ŸŸง 100xDevsโœ…
๐ŸŒ Generic course sitesโœ…

๐Ÿ“ฆ Installation โ€” Load into Chrome

โš ๏ธ This extension is not on the Chrome Web Store yet, so you'll install it manually via "Load unpacked" โ€” takes about 60 seconds.

Step 1 โ€” Get the code

Clone the repo (or download the ZIP from the green Code button โ†’ Download ZIP and unzip it):

git clone https://github.com/mightbeanshuu/CourseTracker-AI.git
cd CourseTracker-AI

Step 2 โ€” Open Chrome's extensions page

In the address bar, type:

chrome://extensions/

This works in Chrome, Brave, Edge, Arc, Opera, and any other Chromium-based browser.

Step 3 โ€” Enable Developer Mode

Toggle Developer mode ON (top-right corner of the extensions page). Three new buttons will appear: Load unpacked, Pack extension, Update.

Step 4 โ€” Load the extension

Click Load unpacked, then in the file picker select the CourseTracker-AI folder you just cloned (the folder that contains manifest.json โ€” not a parent folder, not an inner subfolder).

You'll see a new card appear:

๐ŸŽ“ CourseTracker AI 1.5.0
Automatically detects online course websitesโ€ฆ
ID: <auto-generated>
[ Details ] [ Remove ] [ โ†ป ] [ โ—โ”โ” ] โ† make sure the toggle is ON

Step 5 โ€” Pin it to the toolbar

Click the ๐Ÿงฉ puzzle-piece icon in Chrome's toolbar โ†’ find CourseTracker AI โ†’ click the ๐Ÿ“Œ pin icon so the toolbar button is always visible.

Step 6 โ€” Try it

Open any supported course page (a YouTube playlist works best for a first test):

https://www.youtube.com/playlist?list=PLu0W_9lII9ai6fAMHp-acBmJONT7Y4BSG

Within ~1 second you should see:

  • โœ… A floating CourseTracker AI sidebar in the top-right of the page with a 0% progress bar
  • โœ… A small checkbox appearing next to each video in the playlist
  • โœ… The toolbar icon opens a popup showing the lecture list, My Playlists, and the โœจ AI Playlist Builder

If anything's missing, refresh the tab once โ€” the content script needs a clean page load to inject.


๐Ÿ”„ Updating to the latest version

cd CourseTracker-AI
git pull

Then on chrome://extensions/ click the โ†ป reload icon on the CourseTracker AI card. Refresh any open course tabs afterward so they pick up the new content script.


๐Ÿค– Optional โ€” Enable the AI Playlist Builder

The AI feature is Bring-Your-Own-Key to keep things free and private. The key never enters the repo and never leaves your machine except to call Groq.

  1. Grab a free key at console.groq.com/keys
  2. Either:
    • (Easiest) Open the extension popup โ†’ click โš™ in the โœจ AI Playlist Builder card โ†’ paste your key โ†’ Save, or
    • (Auto-hydrate) Copy local.config.example.json to local.config.json, paste your key into the aiKey field. The popup will auto-load it on first open. (local.config.json is gitignored โ€” it stays on your machine.)
  3. On any course page, type a prompt like "all backend videos" and click Generate playlist โ€” the AI builds a curated playlist for you in seconds.

๐Ÿงฏ Troubleshooting

SymptomFix
Sidebar doesn't appearRefresh the tab once after loading the extension. Content scripts only inject on fresh page loads.
"Extension context invalidated" errorsYou reloaded the extension while tabs were open. Close those tabs, open them fresh. Errors are harmless and self-clear.
Progress shows 0/0The DOM hasn't rendered the lectures yet. Wait for the page to finish loading, then click Rescan in the sidebar.
Checkboxes overlap weirdlyThe site's CSS conflicts with the injected checkbox. Open an issue with the URL and I'll add a targeted style fix.
AI says "no matching lectures"The lecture titles may not match your prompt. Try a more inclusive phrase or list specific titles: "add: routing, middleware, auth".

๐ŸŽฎ Usage

ActionWhere
Tick a lectureCheckbox beside the lecture title
See progressFloating sidebar (top-right)
Pause trackingโธ button in sidebar or popup
Hide sidebarโœ• button โ†’ floating handle returns it
Rescan pageSidebar โ†’ "Rescan" or popup โ†’ "Rescan"
Toggle themeSidebar โ†’ "Theme" cycles dark / light / auto
Export / ImportPopup โ†’ bottom buttons
Reset coursePopup โ†’ "Reset this course"

๐Ÿ—๏ธ Architecture

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manifest.json โ”‚ โ† MV3
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
โ”‚backgroundโ”‚ โ”‚ content.jsโ”‚ โ”‚ popup/ โ”‚
โ”‚ worker โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ utils/ โ”‚
โ”‚ โ€ข domScanner โ”‚ platform detect + lecture extract
โ”‚ โ€ข progress โ”‚ completion math
โ”‚ โ€ข storage โ”‚ chrome.storage.local wrapper
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Folder Structure

CourseTracker-AI/
โ”œโ”€โ”€ ๐Ÿ“„ manifest.json
โ”œโ”€โ”€ โš™๏ธ background.js
โ”œโ”€โ”€ ๐Ÿง  content.js
โ”œโ”€โ”€ ๐Ÿ“ popup/
โ”‚ โ”œโ”€โ”€ popup.html
โ”‚ โ”œโ”€โ”€ popup.js
โ”‚ โ””โ”€โ”€ popup.css
โ”œโ”€โ”€ ๐ŸŽจ styles/
โ”‚ โ””โ”€โ”€ content.css
โ”œโ”€โ”€ ๐Ÿ”ง utils/
โ”‚ โ”œโ”€โ”€ domScanner.js
โ”‚ โ”œโ”€โ”€ storage.js
โ”‚ โ””โ”€โ”€ progress.js
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ assets/
โ”œโ”€โ”€ icon16.png
โ”œโ”€โ”€ icon48.png
โ””โ”€โ”€ icon128.png

๐Ÿงฎ Progress Formula

Completion % = (Completed Videos / Total Videos) ร— 100

Updates instantly on every tick / untick.


๐Ÿ’พ Data Schema

{
"ct_courses": {
"udemy.com/course/example": {
"url": "udemy.com/course/example",
"lectures": {
"lec_abc_0": { "done": true, "title": "Intro", "index": 0, "duration": "4:12" },
"lec_def_1": { "done": false, "title": "Setup", "index": 1, "duration": "8:30" }
},
"meta": { "createdAt": 1700000000000, "updatedAt": 1700000000000 }
}
},
"ct_settings": {
"theme": "auto",
"enabled": true,
"hidden": false
}
}

๐Ÿ” Permissions

["storage", "activeTab", "scripting"]

๐ŸŸข No tracking. No analytics. No network calls. Everything stays on your device.


๐Ÿ› ๏ธ Tech Stack

  • ๐Ÿงฉ Chrome Extension Manifest V3
  • ๐ŸŸจ Vanilla JavaScript (no build step)
  • ๐ŸŽจ CSS custom-properties (Tailwind-style tokens)
  • ๐Ÿ’พ Chrome Storage API
  • ๐Ÿ‘๏ธ MutationObserver + SPA URL listener

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿค– AI-generated lecture notes & summaries
  • ๐Ÿ“ Resume-where-you-left
  • ๐Ÿ”” Smart reminders & streaks
  • ๐ŸŽฏ Focus / Pomodoro mode
  • โ˜๏ธ Cloud sync (Supabase / Firebase)
  • ๐Ÿ“ฑ Cross-device sync via chrome.storage.sync
  • ๐Ÿ“ˆ Daily study analytics

๐Ÿง‘โ€๐Ÿ’ป Development

# 1. Make your changes# 2. Reload the extension at chrome://extensions/# 3. Refresh the course tab โ€” done. No build step.

Adding a new platform? Extend utils/domScanner.js:

casePLATFORMS.MY_NEW_PLATFORM:
items=scanMyNewPlatform();break;

๐Ÿ“œ License

MIT ยฉ mightbeanshuu


โญ Star the repo if it helps you stay on track!

Made with ๐Ÿ’œ for self-learners everywhere

About

๐ŸŽ“ Chrome Extension that auto-detects course websites (Udemy, Coursera, YouTube, 100xDevs) and adds lecture checklists with an animated progress sidebar.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages