← Selected Work

Product

Jarito

Keeps watch over your course deadlines, in Canvas and Brightspace

Jarito interface

Walkthrough

A professor moves a deadline, and Jarito shows what changed — on sample coursework, no school account needed.

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

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  • The Jarito popup over a Canvas page, highlighting two changes since the last look: a project proposal moved from October 20 to October 27, and a new pop quiz
    What changed since the student last looked, above everything else.
  • The Jarito setup screen offering a Get my link from this tab button on a Canvas page, with a field to paste a feed link instead
    Set up in one click from an open Canvas tab, with pasting a link as the fallback.
  • A system notification from Jarito reading Due date moved: Project proposal, was Tue Oct 20, now Tue Oct 27, with a gold badge on the toolbar icon
    An hourly check in the background, and a notification when a date moves.
  • The Jarito to-do list grouped into Overdue, Today, Tomorrow and Monday, each assignment with its course code, due time and a Start button
    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