Product
Jarito
Keeps watch over your course deadlines, in Canvas and Brightspace

Walkthrough
The problem
Canvas updates a due date quietly. A student juggling five courses sees assignments course by course, and a deadline an instructor pulled forward or pushed back looks exactly like it always did, so the change surfaces only when it is already too late or too early to matter.
What I did
- 01
Read the calendar feed rather than the REST API, because most schools don't let students create API tokens but every Canvas and Brightspace account has a feed link
- 02
Detect edits by hashing each assignment's title, due date and description, because the real feed reports SEQUENCE 0 on every event and can't be trusted to signal a change
- 03
Unfold ICS line continuations before parsing and convert UTC deadlines to the student's local day, since an 11:59 pm Pacific deadline is the next day in UTC and would otherwise show a day late
- 04
Keep everything on the device: no accounts and no database, with the feed link, assignments and progress in local storage and a stateless proxy only because Canvas sends no CORS headers
- 05
Lock the proxy to Canvas feed paths over HTTPS with redirects refused, a 2 MB response cap and a per-IP rate limit, so a public endpoint can't become an open proxy
- 06
Make daily use effortless with an installable PWA, instant open from cache, and a QR hand-off that moves the feed link to a phone in the URL fragment, which never reaches a server
- 07
Built a Manifest V3 Chrome extension that finds the feed link on the open Canvas tab in one click, asking for that one site only during the click and giving the access back if no link turns up
- 08
Re-read the feed hourly from the extension's service worker, merging each result into whatever the popup changed meanwhile, so a background check never undoes a tick — and raise one notification for a moved date or new assignment
Jarito for Chrome

What changed since the student last looked, above everything else. 
Set up in one click from an open Canvas tab, with pasting a link as the fallback. 
An hourly check in the background, and a notification when a date moves. 
Every course in one list, grouped by day with overdue work first.
Outcome
Extracted from the coursework module of D.O.O., my personal operations dashboard, and rebuilt to run with no account
Parser tested against fixtures taken verbatim from a real university Canvas feed
A sample-coursework demo so anyone can see a moved deadline get caught without a school account
Brightspace / D2L support built from D2L's documented feed format and confirmed by a student with a real feed
Chrome extension live on the Chrome Web Store two days after the first commit, sharing the web app's sync logic rather than a copy of it
Open source under MIT at github.com/Davisoduor/jarito
Built with
- React 19
- TypeScript
- Vite
- Vercel Functions
- Service worker / PWA
- Chrome extension (Manifest V3)
- Vitest