The context
Consultants across the network must be trained on products and procedures that change constantly, and that training must be certifiable. A dedicated platform was needed to organise learning paths, measure real progress and issue certifications.
The specific requirement lies in tracking granularity: knowing a consultant "started a module" has no value; knowing they completed a specific lesson on a specific date does.
What I built
Structured learning paths
categories, modules, courses, chapters and lessons, with multiple media types.
Fine-grained progress tracking
completion state recorded at every level of the pedagogical hierarchy.
Quiz engine
questions with predefined answers, controlled sequencing and retention of submitted answers.
Certifications
certificate templates and named PDF generation.
Goals and leaderboards
individual statistics, achievements and rankings.
Events and announcements
sessions, personal calendar and communications.
Generated API documentation and shared types with the front-end.
Architecture & technical decisions
Progress tracking is modelled with a join table at each level (module, chapter, lesson, quiz). It is more verbose than a single percentage stored on the enrolment, but it is the only way to answer "what did this person actually complete?" precisely — the question a training audit asks.
Content durations are extracted automatically from audio and video media on import rather than typed in: manually entered data drifts, and then distorts every training-time calculation.
The API contract is generated from the code, with shared types on the front-end. On an application rich in nested entities, that removes an entire class of integration errors.
Certificates retain their generation data, not just the output file, so a document can be regenerated identically or verified later.
Technical challenges
A deep hierarchy. Five nested levels make every progress query expensive if written naively — aggregations and eager loading are structural here.
Content that evolves. Editing a course already in progress must not invalidate acquired progress or issued certificates.
Quiz fairness. Controlling question sequencing and retaining every answer so a result can be contested.
Meaningful leaderboards. A ranking motivates only if it stays readable and honest — hence prepared aggregations rather than on-the-fly computation.
Exports. Excel extractions for administrative follow-up, generated in the background so the interface never blocks.