Skip to content
← Work

LessonDesk

Lead frontend engineer

LessonDesk was a learning platform for organisations running training: content, learners, classes, schedules, assessments, reporting, and the compliance side of all of it. By the time I worked on it, it had grown into a suite, older and newer web apps, learner portals, a classroom portal, public sites, shared packages, email templates, and the infrastructure under them.

I was a core frontend engineer and client-app maintainer across that web platform, working on both the original Head Office app and the later React/Next.js suite, through user-facing flows, shared UI, API clients, releases, monitoring, and production support.

What I built

  • Head Office and the management portal: branches, sites, learners, users, groups and roles, clients and accounts, library content, lessons and courses, assessments, scheduling, reporting, and the admin dashboards over all of it.
  • The learning-content toolchain: media libraries, documents, video handling, lesson-builder integration, assessment question flows, surveys, peer review, SCORM completion, content previews, and multilingual metadata.
  • The learner experience across the individual portals: routing and auth, profile and report views, enrolled and scheduled content, lesson previews, video and PDF assessments, survey flows, peer review, and progress UI.
  • Big chunks of the Svelte/Sapper classroom portal: auth, class creation, subject management, agendas, live-session join states, resource modals, discussion posts, recordings, and media proxying.
  • The public and partner-facing sites: marketing, benefits and solutions, news, contact and careers, a CMS/CDN proxy, conversion tracking, and an SEO-oriented Next.js setup.
  • The shared platform underneath all of it: API clients, a component library (tables, forms, modals, reporting), Keycloak helpers, Sentry and analytics, PWA support, the Cypress/Jest/Storybook setup, CI and Docker builds, release tooling, and MJML email templates.

Hard parts

The platform had a lot of audiences, administrators, trainers, learners, classroom facilitators, public visitors, internal support, and each one interacted with it differently. The job was to keep the shared pieces genuinely reusable without flattening the differences between content management, learning delivery, live classrooms, and reporting.

It was also old, in the way that real systems are old: several generations of frontend architecture stacked on top of each other. A good part of the work was shipping new product while keeping the older surfaces stable and slowly improving the shared tooling, rather than rewriting everything at once.

Stack

Play Framework and Scala on the original app; React, Next.js, and a Svelte/Sapper classroom portal on the newer ones; styled-components, styled-system and Emotion; Formik and Yup; Keycloak for auth; Sentry, Video.js, React PDF and SCORM integration; Cypress, Storybook and Testing Library; MJML email; a Redis-backed proxy; and Docker over Jenkins and GitHub Actions.