01 · Context
A UK higher education provider was running coursework submissions through a combination of email, shared drives, and a legacy VLE that staff had largely stopped trusting. Tutors manually tracked deadlines in spreadsheets. Students had no consistent view of their progress or feedback history. The system worked until it did not, and by the time a submission was lost it was already too late.
02 · Constraints
Everything the solution had to respect from day one.
- 01
Student data falls under GDPR and the provider's own data governance policy. Every record had to be attributable, exportable, and deletable on request.
- 02
The platform had to be usable on low-spec devices and intermittent mobile connections: realistic conditions for commuter students.
- 03
No big-bang cutover. A cohort mid-cycle could not lose their submission history. The migration had to be incremental.
03 · Approach
What we actually built and why, in the order it happened.
- 01
Modelled submissions, feedback, and progress as distinct entities with explicit state machines: draft, submitted, under review, returned. No ambiguous statuses.
- 02
Built a tutor-facing review interface around the workflow tutors already used: see submission, leave structured feedback, set a grade, return. Nothing that required training.
- 03
Used Supabase Row-Level Security to enforce access at the data layer. A student can only see their own records; a tutor can only see the cohorts they are assigned to.
- 04
Ran a parallel period with both systems live for the first cohort. Submissions existed in both places until the provider signed off on parity, then deprecated the old process.
04 · Result
Submission processing time dropped from three days to under four hours. Tutor feedback turnaround fell 58%. Over 600 students were active on the platform at launch with no rollback incidents. The provider has since extended the platform to cover two additional programmes.
- Submission processing time
- 3 days → 4h
- Tutor feedback turnaround
- −58%
- Active student users at launch
- 600+
