Personal study archive for a two-year law degree: a Chrome-attached crawler pulls every reading and recording off Moodle, Claude Code subagents turn 50k WhatsApp messages into per-course digests, and one script regenerates course READMEs and a Notion workspace.

A private study archive for a two-year, part-time law programme, built to turn a year's worth of scattered material into something I can actually revise from: an LMS that had just been migrated to a new instance, a 50,000-message batch WhatsApp group, and lecture recordings that only stream inside the LMS player.
It's three pipelines that write into one folder tree per course, plus a generator that turns the tree into readable pages.
core_course_get_contents enumerates every section and activity; resources, folders, pages, forums, assignments and quizzes each get their own handler, and the dated "class recording" labels are paired with the Bunny.net HLS stream embedded in their HTML. A manifest keyed by content id makes re-runs idempotent. Recordings are transcoded with hevc_videotoolbox and copied into the Google Drive app's folder, and only count as done once Drive has assigned the file a cloud id.The repository is private by design — course PDFs belong to the university and the chat belongs to a hundred classmates — so the public part is the tooling and this page. A pre-commit hook runs gitleaks plus a grep for phone numbers and email addresses; browser profiles, tokens, raw exports and the sender map live in ignored directories.
Stack — Python 3.11 · Playwright (CDP) · httpx · ffmpeg (VideoToolbox) · Google Drive for Desktop · Claude Code subagents · Apple Vision via ocrmac · Notion MCP