- Dates are flat ISO directories (
YYYY-MM-DD), not nested by year and month. - Times are
HHMMSS, so several scrapes per day sort correctly. - Test data uses the same layout under
snapshots/synthetic/andindex/synthetic/. The frontend’sDATA_PREFIXsetting chooses which tree it reads.
Examples on this page use generated test data. Names are invented.
assignments.json
An array with one object per assignment row in the class’s portal table.assignments.json
Assignment name as shown in the portal. Together with
due_date, it identifies the assignment across snapshots.Score text exactly as displayed, for example
47.7/60. Kept alongside the parsed numbers so nothing is lost in normalization.metadata.json
One per snapshot. Built by n8n from the scrape response and committed after the class files.metadata.json
Keyed by class slug. A class present in one snapshot and absent from the next is reported as a class-level change.
rolling_index.json
A single file with one entry per snapshot, oldest first. The calendar reads only this file, so it never has to fetch individual snapshots to color a month.rolling_index.json
A summary of each class in the snapshot: course, final grade, final percent, and assignment count.