Sync ASTU e-Student transcript data to the VentureScope backend using a Chrome Extension (Manifest V3).
This extension uses:
- React (Vite) for the popup UI
- MV3 Service Worker (
background.js) for notifications/settings bootstrap - Content script (
content.js) for transcript scraping
- Node.js + npm
- Google Chrome (or any Chromium-based browser that supports MV3)
Run from the repo root:
cd chrome-extension
npm installcd chrome-extension
npm run buildThis produces a loadable build at:
chrome-extension/dist/
- Open
chrome://extensions/ - Enable Developer mode
- Click Load unpacked
- Select:
chrome-extension/dist
- Click the extension icon (opens the popup)
- Sign in with your VentureScope credentials
- Navigate to the ASTU e-Student portal transcript page
- Click Sync Academic Data
- Review the payload, accept consent, and continue
Run from chrome-extension/:
- Dev server (popup UI only):
npm run dev - Build extension:
npm run build - Preview built UI:
npm run preview
Note: MV3 extensions must be loaded from a folder. The dev server is useful for fast UI iteration, but Chrome must load the unpacked extension from chrome-extension/dist/ after a build.
Source:
chrome-extension/popup.html: Vite entry HTML (React mounts into#root)chrome-extension/src/popup/main.tsx: React bootstrap + legacy initchrome-extension/src/popup/popup-shell.tsx: React popup markup (IDs preserved)chrome-extension/src/popup/popup-legacy.js: existing popup logic (session, sync, API calls)chrome-extension/public/manifest.json: MV3 manifest copied into build outputchrome-extension/public/background.js: MV3 service worker copied into build outputchrome-extension/public/content.js: content script copied into build outputchrome-extension/public/icons/*: extension icons
Build output (load this in Chrome):
chrome-extension/dist/
The original popup logic relied on querying elements by ID and attaching DOM listeners.
In the refactor:
- React renders the same DOM structure (same IDs/classes).
- The existing logic is executed afterwards via
initPopup()frompopup-legacy.js.
This keeps behavior intact while making the popup UI a React project.
- Confirm you selected
chrome-extension/dist(notchrome-extension/). - Rebuild:
cd chrome-extension
npm run build- Make sure the active tab is on
estudent.astu.edu.etand the transcript/history page is open.
- In
chrome://extensions/→ your extension → Inspect views- Check the Service Worker console for background errors
- Check the active tab console for content script errors
- Login and transcript APIs are defined in
chrome-extension/src/popup/popup-legacy.js. - Verify the backend is reachable and CORS/authorization are correct.
- Bump version in
chrome-extension/public/manifest.json - Run:
cd chrome-extension
npm run build- Zip the contents of
chrome-extension/dist/for distribution - Validate in Chrome:
- Install from
dist/ - Login works
- Sync flow works (scrape → review → consent → upload → notification)
- Install from