Skip to content
d.nikolaev
All projects
FlagshipProductUnder NDA

Course builder

An authoring tool for learning programmes: module tree, longreads, tests, publishing

Role
Frontend engineer: features, refactoring, optimisation, review
Period
Sep 2023 — present
Team
5 people
Company
LazurM

Details and code are covered by an agreement: I describe the problems and solutions without exposing internals.

Anonymised course builder interface marked NDA

The tool where instructional designers and teachers assemble courses: a module and lesson tree, a longread content editor, a test builder, projects and publishing to the player. My longest-running project — over seven hundred commits.

What I did

  • Over 700 commits: from individual features to reshaping application layers
  • Module and lesson tree with drag and drop, moving and bulk operations
  • Longread editor on an in-house library — a single content layer for the builder and the player
  • Test builder: question types, ranking, matching, answer validation
  • GPT scenarios: refining and extending course content directly in the editor
  • Strict FSD dependency rules verified by a linter in CI

Context

The product

The builder is the entry point for course authors. Here the programme is assembled: modules, lessons, longreads, webinars, tests and projects. The result goes to the player where students take it.

The product is alive: requirements come from instructional designers, teachers and administrators, so the editor constantly gains new content types and rules.

Problem

The problem

The editor’s main difficulty is state. The course tree, block drafts, element order, uncommitted edits and validation all live at once, while the user expects nothing to be lost.

The second is content shared with the player. The same longread must be editable in the builder and render identically for the student, otherwise the author cannot tell what the group will see.

The third is codebase growth. Over several years the editor turned from a set of pages into a large application, and without formal dependency rules the links between modules would quickly become tangled.

Solution

The solution

The builder and the player share one content layer: the author edits the same blocks the student sees. New material types can be added without breaking courses that already exist.

Outcome

The outcome

The builder is the product I worked on the longest and where the accumulated effect is visible: the application structure survived several waves of new requirements, and a typical feature no longer requires edits across half of the codebase.

This is the project I am most proud of: it combines architectural work, product scenarios and a reusable library that lives its own life in other applications.

Interface

Anonymised course builder interface marked NDA

Related projects