A fictional education provider reviews participation, course outcomes and delivery economics across four campuses and six courses.
Open Review → Term performance for the matplotlib figure, then Analysis report for findings calculated from the same extract.
enrolled with contribution_gbp and group by schedule.Activity pipeline processes 500,000 synthetic learning events every 30 seconds. Open Activity extract or Validated activity to explore bounded observations from observe=True. Batch metrics are full-data computations. Every fifth batch models a rise in missing assessment scores. This workload is separate from the fixed term review.
The How it works section watches this HTML guide, pipeline.py and plotsrv.yml using --watch. The reporting script uses ordinary pandas and matplotlib, then publishes its results with a handful of plotsrv calls.
The portal is a tiny local ASGI application. Scripted requests produce real Uvicorn access logs, including deliberate expired-session and unavailable-service responses. Default Uvicorn logs do not include durations, so latency suggestions are intentionally absent.
All business data are synthetic and fixed for repeatable screenshots. Counts refer to enrolments, not unique people. Direct contribution excludes central overheads. No real learner information is used.