hello 👋

i’m https://nodokas.com/.

this is development log of my open-source contribution to https://github.com/JamesNZL/notion-assignment-import. in my Blog macOS Optimization and Shell Tools I mentioned that I use https://chromewebstore.google.com/detail/notion-canvas-assignment/elbkjcjgakaoccocmbglokgmalkoacie to pull Assignments from Canvas to Notion database.

i decided to build a better version of this for myself and others. after a few hours of digging into Chrome internals and TypeScript since midnight, I finally got it working.

"In real open source, you have the right to control your own destiny"

— Linus Torvalds (Creator of Linux, a.k.a open source legend👑)

Where the heck do I start…


when I forked https://github.com/JamesNZL/notion-assignment-import I had one goal: no more manual imports.

the way the original plugin works is repetitive. you have to open every course page individually and click import for every single class. I didn't see why this couldn't just be automated so I wouldn't have to click through everything.

the motivation was clear, but I had one obvious problem: I didn’t know typeScript or mcp. I spent a good hour just staring at the codebase, realized I didn't understand a single line, and ended up back on youtube just to figure out the absolute basics before I could even start.

<aside>

how I started 📹:

MCP > HTTPS → my takeaway

MCP > HTTPS → my takeaway

</aside>

Figured out what I need to do to achieve my goal!


have a background service worker would wake up on a chrome.alarms trigger, fetch the latest data, and update the Notion database. seems simple enough, I got to hacking 50 minutes after midnight.

Then, an hour into coding, hit a wall 🐞


when https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3 (the new, stricter set of rules for chrome extensions) started being my worst nightmare, i tried to fire the sync function in the background. i was half-asleep so i couldn't tell if it was an actual nightmare, but then everything silently exploded 💥 so yes, this was very real.