Chrome extension (Manifest V3) for FPT University students: read exam and class schedules from FAP, view them in the popup, and export .ics calendar files.
- Tabs: Upcoming (Chưa thi) and completed (Đã thi) with counters
- Countdown: Color hints for today, tomorrow, urgent (≤3 days), future, completed
- Types: FE, PE, 2NDFE, 2NDPE
- Filter: Modal with select all / none / apply; preference remembered
- Time formats: Vietnamese (
10h00), colon, dot, hour-only, mixed - Export: Upcoming exams with a confirmed room (skips TBA / no room); reminders 1 day and 1 hour before
- Works offline popup data: After sync, export can work without staying on FAP (uses stored timetable JSON)
- Weekly view from FAP schedule pages (
https://fap.fpt.edu.vn/Schedule/*) - Tải lịch / export class timetable to
.ics - Multi-week sync: Background merge across a range of weeks (service worker +
chrome.storage.localfor progress and merged data)
- Ôn tập strip under each exam card: links by course code (from
study-sources.json) - Fallback links: Quizlet search and Google search (HTTPS only; opens when you click)
- Clean popup UI, system light/dark aware
- Tab navigation: exams + Lịch học
FPTU Schedule on Chrome Web Store — listing title may still show an older name until the next store update.
git clone https://github.com/yunkhngn/fptu-schedule.git
cd fptu-schedule- Open
chrome://extensions/ - Enable Developer mode
- Load unpacked → select the repo folder
./zip-extension.shProduces fptu-schedule.zip (see manifest.json for current version).
- Open
https://fap.fpt.edu.vn/Exam/ScheduleExams.aspxand sign in - Open the extension popup → data syncs on the exam page (or use Đồng bộ)
- Use Chưa thi / Đã thi, Lọc, and Tải xuống lịch .ics (or equivalent) as needed
- Open a FAP Schedule week page (under
https://fap.fpt.edu.vn/Schedule/) - In the popup, open the Lịch học tab → Tải lịch / export as shown
Edit study-sources.json (keys = course codes like PRJ301). Only https: URLs are accepted for suggestions.
- UI: HTML, CSS, vanilla JavaScript
- Chrome:
tabs,scripting,storage(chrome.storage.localfor cached schedule JSON and sync flags — not websitelocalStorage) - Background: Service worker (
background.js) - Calendar: iCalendar (RFC 5545)
fptu-schedule/
├── manifest.json
├── background.js
├── popup.html
├── popup.css
├── popup.js
├── content.js
├── sanitize-utils.js
├── study-sources.json # Optional per-course study links
├── study-suggestions.js # Resolve suggestions + fallbacks
├── icon-16.png / icon-48.png / icon-128.png
├── icon.png # Source asset (see scripts/build-icons.py)
├── zip-extension.sh
├── docs/ # GitHub Pages site
├── scripts/build-icons.py
└── README.md
- Fork the repo
- Branch → commit → push
- Open a Pull Request
- Exam study splash: white CTA buttons on cards; primary actions use blue accent
- Manifest 3.2.0; release zip
fptu-schedule.zip
- Lịch học tab, class timetable extraction and
.icsexport - Multi-week background sync and merge
- Study suggestions module +
study-sources.json - MV3 service worker, narrowed permissions and safer study URLs (HTTPS-only)
- Richer time formats and exam typing
- Tabs with counters, countdown styling, filter modal
- Export rules for rooms / upcoming only
- Upcoming / completed tabs, countdown, filters, Material-style UI
- Initial exam export and type detection
- Chrome / Edge and other Chromium browsers with Manifest V3 support (roughly v88+)
- Timetable data is processed and cached locally in the browser (
chrome.storage.local/ popup flow). - Study links open only on click; suggested URLs are restricted to https.
- No separate analytics server from this repo; FAP remains the source of truth for auth and pages.
| Issue | What to try |
|---|---|
| No exam data | Open the official exam schedule FAP URL while logged in, then sync |
| Empty export | Upcoming export skips exams without a room; check filters |
| Class schedule | Use a Schedule week URL under fap.fpt.edu.vn/Schedule/ |
| Multi-week sync stuck | Log in again on FAP; reopen popup |
Support: Issues · Docs site: yunkhngn.github.io/fptu-schedule
I 💛 FPTU
MIT — see LICENSE.
If this helps your semester planning, a ⭐ on the repo is appreciated.