Structured course player
Sequenced sessions with worked examples, checklists and exam-style problems. Mathematics is typeset with KaTeX.
A private learning platform · Australia
Structured VCE courses, an AI study buddy, and exam-style assessment with AI-assisted marking — private by design.
A private learning platform for VCE students — built for one family, engineered for many.
small on purpose, engineered like it isn’t
Three courses, all original material. Enrichment alongside school — not formal VCE enrolment.
Classroom Glen is an invite-only learning platform for VCE (Victorian Certificate of Education) students, currently serving one family in Australia. Students get structured courses, an AI study buddy, and exam-style assessment with AI-assisted marking; parents get oversight, activity digests, and study plans. Every course is original material — enrichment alongside school, not formal VCE enrolment, and no publisher or VCAA material is hosted.
It was built multi-tenant and data-driven from day one. The platform runs one family today, and is engineered so that “commercial later” means enabling signup and billing — not a rewrite.
Versioned content packs with original problems and marking keys throughout.
The full loop — learn, practise, sit the exam, get marked, appeal — with parents in it.
Sequenced sessions with worked examples, checklists and exam-style problems. Mathematics is typeset with KaTeX.
Maths Buddy and Business Buddy — an AI tutor on Claude Haiku that streams replies live over SSE. Every conversation is consent-gated, capped and logged.
Timed papers served as PDFs from R2 under signed URLs (≤ 120 s), capped attempts, and photo upload of handwritten work.
Multi-dimension marking on Claude Opus with a confidence-gated auto-release — low-confidence marks queue for human review, and students can appeal.
A multi-guardian model (M:N) with ten per-guardian permission toggles, activity emails per course, and parent-owned study plans with reminder emails.
A safety pre-pass on every tutor turn, a crisis-flag sweep, and an operator triage queue.
An eight-tab admin portal — dashboards, people, courses, exam provisioning, grading & appeals, privacy and DSAR queues, ops health, cost roll-ups.
A consent ledger, data export (DSAR), scheduled deletion purge and a PII-free audit log — plus nightly encrypted backups (AES-GCM) with monthly restore-tests.
One Worker, four storage primitives, two external services. Every box below exists.
The entire platform runs at the edge on Cloudflare. A single Worker holds all server logic; everything else is a primitive doing exactly one job. Every student-scoped read — and every signed-URL mint — must pass one permission gate.
Fig. 1 — The request path, left to right. Every student-scoped read and every signed-URL mint crosses the permission gate — canExercise(actor, student, permission) — and a denial is indistinguishable from a 404. The KV session cache routes past the gate: it holds no student-scoped data and is never the source of truth.
Small set of primitives, each doing one job — no servers to patch, nothing idling.
| Primitive | Role |
|---|---|
| Cloudflare Workers | API and all server logic (Hono + TypeScript) |
| Cloudflare Pages | React SPA (Vite + TypeScript + Tailwind) |
| Cloudflare D1 | relational truth — 20 migrations |
| Cloudflare R2 | private blobs, signed URLs ≤ 120 s |
| Cloudflare KV | session cache and rate limits |
| Cloudflare Queues | async AI grading, with a dead-letter queue |
| Cloudflare Cron | hourly housekeeping and backups |
| Anthropic Claude | Haiku (tutor + safety) · Opus (marking + appeals) |
| Resend | email — verification, digests, alerts |
| Vitest + Miniflare | tests run on the same workerd runtime that deploys |
Privacy & security by design — this platform handles children’s data. These are invariants, not aspirations.
Every student-scoped read passes a permission gate — and denials are indistinguishable from “not found” (404).
AI processing, email and accounts each need explicit guardian consent, re-checked on every send and every turn.
Every tutor and marker call goes through consent → spend caps → per-student daily caps → a safety pre-pass, and lands in an AI-processing ledger.
IDs and hashed emails only — nothing in the log identifies a child.
Every file lives in a private bucket, reachable only through signed URLs that expire within 120 seconds.
Sessions are PBKDF2 with signed cookies, and the operator logs in with a password plus TOTP.
Export and deletion are first-class flows, backups are encrypted, and there is no analytics or tracking script on any page — including this one.