A learning platform with live classes, rebuilt end to end six months in
Courses, quizzes, progress and live video across three surfaces — then all three rebuilt as a second generation inside the same engagement.
- Sector
- Professional-education provider
- Engagement
- April 2022 – October 2022
- Node
- Express
- MongoDB
- React
- Socket.IO
- Agora
- Stripe
Context
Courses, lessons, quizzes and progress tracking are the settled part of a learning platform. Live classes are not. They mean a third-party video vendor, session tokens issued server-side, and a client that has to keep working when that vendor changes — and this codebase carries both sides of exactly that change.
What we built
Backend API
Courses, lessons, assessment, progress and live-class token issuing.
Web app
Learner experience: lessons, quizzes, progress, calendar and live meetings.
Admin console
Course, cohort and user administration on a bought theme.
Architecture
An Express and MongoDB API with Passport and JWT authentication served a React web app and an administrative console. Seventeen route modules on the API line up closely with seventeen on the web client: courses, lessons, lesson PDFs, video, questions, question sets, responses, progress, boards, a calendar and chat. Access tokens for one live-video vendor are minted server-side while a second live-video SDK appears on the client — two stacks coexisting is what a provider migration looks like in a repository, and it is the most interesting thing here. Mail runs through SendGrid, push through Firebase, media and lesson PDFs through S3, payment through Stripe. The administrative console is built on a commercial dashboard theme, so that work was integration rather than interface design. Six months in, all three surfaces were rebuilt as a second generation alongside the first. The engagement ran from April to October 2022.
Stack
- Backend API
- Node
- Express
- MongoDB
- Passport with JWT
- Web app
- React 17
- Socket.IO client
- Admin console
- React 16
- Formik and Yup
- commercial dashboard theme
- Integrations
- Agora access tokens, issued server-side, for live classes
- A second live-video SDK on the web client, from the provider migration
- Stripe for payments
- SendGrid for transactional mail
- Firebase for push notifications
- Amazon S3 for lesson media and PDFs
Scale
Counts that can be re-derived from the same repositories. Nothing here is a business result — a repository cannot evidence one.
- Three delivered surfaces: backend API, web app, admin console.
- 1,018 commits across six repositories — three surfaces, each with a rebuild.
- 17 route modules on the API, 17 on the web client.
- 250 commits in the second-generation rebuild, across three parallel repositories.
Where the evidence stops
- The administrative console is built on a commercial dashboard theme, so that work was integration rather than interface design.
- No learner numbers, completion rates or retention figures are derivable from a repository.
Evidence
Each statement above, and the artefact it was read from. The client cannot be named, so the sources are given instead.
3 surfaces delivered — backend API, web app, admin console.
SourceOne repository per surface, each carrying application code
1,018 commits across six repositories (three surfaces, each with a rebuild).
SourceSum of history.totalCount on each repository's default branch (GitHub GraphQL)
17 route modules on the API, 17 on the web client.
Sourcesrc/routes/ directory listings on both repositories
The second-generation rebuild is 250 commits across three parallel repositories.
Sourcehistory.totalCount on the three v2 repositories
The market is German-speaking continuing education.
SourceA web route folder named with the German term for continuing professional education
Engagement span: 27 April 2022 to 17 October 2022.
SourceFirst and last commit dates on the default branches
Related capability