Hub / Dashboard
The Dashboard is a standalone page (dashboard.html) that opens in a new browser tab. It is the central view for all cached courses - showing grades, GPA, sparklines, category breakdowns, and links to the Details view. Open it by clicking Dashboard in the overlay panel header, or from the extension popup.
Layout
[ Welcome message ]
Current Year GPA: N.NN Cumulative GPA: N.NN
[N courses] [N total courses (M from past report cards)]
[ Sort: Updated ▾ ] [ ⟳ Refresh all ]
┌─────────────────────────────────────────┐
│ COURSE NAME Fresh/OK/Stale │
│ Updated: MM/DD/YYYY, HH:MM AM │
│ 93.45% (A) │
│ [sparkline chart] │
│ ── Category breakdown by quarter ── │
│ Take me there View details [Delete] │
└─────────────────────────────────────────┘
... (one card per cached course)
── Past Report Cards ──
[ Add Report Card ]
[report card list]
Welcome Message
On each load, one of several welcome message variants is chosen at random. If a user name was entered in Options → Appearance, some variants personalize the message (e.g. "Hello, Sam!" or "Sam, the moment of truth..."). The first time the Dashboard loads it may prompt for a name via window.prompt().
GPA Row
Current Year GPA
Calculated live from all cached courses with a course weight > 0. For each course:
- The grade percentage is converted to a letter grade using the configured scale.
- The letter grade's GPA point value is looked up.
- That value is multiplied by the course's credit weight (default 1.0; configurable in Options → Course Weights).
- A credit-weighted average over all qualifying courses is computed:
sum(weight × gpa) / sum(weights).
A course is excluded from GPA if its weight is set to 0 in Options → Course Weights. Courses with no graded assignments are also skipped.
Cumulative GPA
Combines all current-year courses plus any past report cards you have added. Uses GPAEngine.calculateCumulativeGPA() which:
- Converts each course's final mark (percent or letter) to base GPA points.
- Applies configurable honor/AP/IB weighting bumps (default: +0.5 for Honors, +1.0 for AP, +1.0 for IB, +0.0 for Regular).
- Multiplies by the course's credit value.
- Returns
totalQualityPoints / totalCredits, rounded to the configured number of decimal places (default: nearest 3).
GPA Cards Click-to-JET
Clicking either the Current Year GPA card or the Cumulative GPA card opens the JET (Joint Estimate Trajectory) section and smooth-scrolls to it. The GPA input field is auto-focused. Both cards have hover animations: a subtle lift effect (translateY(-3px)), accent-colored border highlight, and enhanced shadow on hover.
Hide Grades
The eye icon button in the header toolbar toggles visibility for all grade information on the Dashboard:
- GPA values are blurred (25px Gaussian blur). Hovering partially reveals them (8px blur).
- Course cards (the entire courses grid) are also blurred, preventing casual reading of grades. The section header remains visible.
- State is persisted in
ICI_GPA_HIDDENinchrome.storage.local, so the setting survives page reloads.
Course Cards
Each card shows:
- Course name (bold)
- Freshness badge: Fresh (cached < 12 hours ago), OK (12-24 hours), or Stale (> 24 hours). Freshness thresholds are configurable in Options → Appearance.
- Last updated timestamp
- Overall grade percentage (2 decimal places) and letter grade
- Grade change indicator (delta badge): if the grade has changed since a previous snapshot, an up arrow (▲ green) or down arrow (▼ red) badge appears next to the percentage, showing the change amount (e.g.
▲ +0.3%). Tooltip shows the date of the comparison snapshot. Only appears when the change is >= 0.05%. - Sparkline - a tiny 32 px-tall canvas showing grade history over time (hidden if fewer than 2 snapshots)
- Category breakdown - one row per category per quarter, showing the category average
- Action links:
- Take me there - opens the original IC course URL in a new tab
- View details - opens
details.html?key=<courseKey>in a new tab - Delete (red button) - removes the course from local storage after confirmation
Sorting
Four sort modes are available, selectable via a dropdown above the course list:
| Mode | Description |
|---|---|
| Updated (default) | Most recently cached courses appear first. |
| Custom | Drag-and-drop order, saved in ICI_DASHBOARD_SORT. Course cards show a ⋮⋮ drag handle on the left side of their header. |
| Best Grades | Highest grade percentage first. |
| Worst Grades | Lowest grade percentage first. |
The sort order is persisted. Fake-grades testing mode uses a separate custom order so it does not interfere with real course ordering.
Bulk Refresh
The ⟳ Refresh all button opens a pre-flight dialog that checks your Infinite Campus session status and lets you choose a refresh strategy:
- Network Refresh - calls the IC REST API directly from the extension's background service worker. No browser tabs are opened. Results arrive in seconds.
- Classic Refresh - opens each course URL in a background tab, waits for the page to load, scrapes the DOM, then closes the tab. Slower but reliable.
Both methods require you to be signed in to Infinite Campus. If you are not signed in, both buttons are disabled. A warning is shown if the current time is a weekday between 8 AM and 4 PM, when your school may have disabled gradebook access.
See Network Refresh for full details on how Network Refresh works, the API endpoints used, and troubleshooting.
Past Report Cards
Below the course cards, a section lets you store previous year report cards for cumulative GPA. Each report card holds:
- Title (e.g. "2023-24 Final")
- School year, marking period, issued date
- A list of courses, each with: name, teacher, final mark (percent or letter), credits, and weight type (Regular / Honors / AP / IB)
Actions: View courses (expand), Edit, Delete.
Automatic History Snapshot Capture
Every time the Dashboard loads and renders course cards, it automatically captures a history snapshot for every course using the already-computed overall grade. These auto-snapshots are deduplicated: consecutive auto-snapshots with the same grade are collapsed, keeping only the point where the grade changed. Manual snapshots (triggered by Cache on the overlay) are always preserved.
Duplicate Course Merging
If two cached courses have exactly the same name (can happen after an IC URL format change), the Dashboard automatically merges them: the most recently updated entry is kept, all quarters from both are merged (preferring the entry with more categories for each quarter ID), and history snapshots are combined and deduplicated. The older entry is then deleted from storage.
Testing Mode (Fake Grades)
When Testing Mode is enabled in Options → Fake Grades, the Dashboard replaces all real course data with randomly generated fake courses. Take me there / View details / Delete are disabled in this mode. Disable testing mode to restore real data.