EduFeedbackPro
Operational analytics platform for a 1,000+ student institution. Teachers needed answers in the five minutes between lessons, not after a weekly reporting meeting, so the architecture prioritised fast operational workflows over perfectly fresh reporting.
- reports3min to <10sec
- release10 to 5 days
- 1,000+students
- TypeScript
- Next.js
- PostgreSQL
- BigQuery
- SSE
- Playwright
- Docker
- Redis

Postgres for ops state, BigQuery for reporting
Dashboard aggregations were degrading write latency during peak marking windows. Splitting the workloads bought predictable writes; reports became eventually consistent, usually within minutes, which teachers never noticed.
SSE over WebSockets
Updates only flowed server to browser. SSE rides plain HTTP, survives school proxies, and reconnects natively; WebSockets would have added a second operational surface for bidirectional capability nothing used.
Capabilities over role hierarchy
Staff responsibilities changed faster than job titles. Modelling permissions as capabilities made access changes data updates rather than code changes.
Inference moved on-device
Server round-trips on 600+ low-spec iPads cost 2s per prediction. Moving model execution to TensorFlow.js in the browser cut it to 600ms and removed the network from the prediction path entirely.























