🎓 Native GitHub Classroom
GitHub is the LMS. A repo is the coursework. A push is a submission.
Alongside dev management and tech lead work, I teach software engineering part-time. Native GitHub Classroom is the platform I run that side of the week on, and it started out of pure cheapness: no hosted app, no server to babysit between semesters, no budget. A school email quietly unlocks GitHub Education, so I asked what happens if the repo is the platform, not GitHub plus an LMS but GitHub as the LMS. Coursework is a repo, submitting is a push, grading is a GitHub Action, and feedback is a Markdown file that lands in the student's own repo. The only outside system is Canvas, right at the end, to receive final grades.
The trick that keeps it sane is one idea repeated, so four live classes never quietly drift into four snowflakes I can no longer maintain.
One org per course
Locked down so a student sees only their own repos.
One teacher control repo
The engine: the scripts, the workflows, the private grader tests, and the gradebook. The gradebook is the single source of truth. If it is not in the gradebook, it did not happen.
One workspace repo per student
Both their graded coursework and their personal scratch space, which is exactly why the next rule matters so much.
Grading and publishing, separately
The grader scores off a snapshot of the student's repo, against my tests, and never writes back. Delivering grades is a second, deliberate step that dry-runs by default.
The engine is identical across every course. Only the tests and a small config file change: edit once, copy everywhere. And the machine never writes to a student's own work during grading. Anything that writes to a student repo or the gradebook dry-runs first and shows me the plan, so I read what is about to happen before it happens. Those two rules are the reason I can let automation this close to real grades sleep at night.
This is not a product, and that is the point. It is a teacher's tool that happens to be built like real software, with tests and dry runs and audits, because that is the only way I trust a machine anywhere near my students' grades. What it will never have here: course internals or student data. Those stay private.
🤖 Built with Claude. I don't prompt and pray, I prompt and prove. Every commit here is co-authored with an AI, on purpose. How I actually work with AI, receipts and all →