Goal

The goal with the Learning Management System (LMS) project was to improve tracking of student progress through the curriculum and create a feedback for improving curriculum content.

A secondary goal was to increase curriculum engagement by developing more interactive elements such as multi-choice quizzes and coding sandboxes.

Outcome

The learning management system eventually became a part of every product offering at the company where every single App Academy user progressed from applicant to graduate.

The platform served over 50 courses to over 100,000 users with readings, quizzes, coding projects, videos, and practice problems.

Infrastructure

The LMS began as a Ruby on Rails application hosted on Heroku with a PostreSQL database. The frontend was written with React/Redux.

When the LMS needed to scale we migrated the application to a distributed cloud-based system powered by AWS lambda functions and a MongoDB database.

The frontend remained React but was separated into an S3 bucket delivered with AWS CloudFront.

Lambda functions powered the API layer deployed with the serverless framework.

We build a custom API Gateway to handle our own Authentication/Authorization in a Node/Express application deployed to Amazon ECS. Passport.js was used to handle auth and included patterns for OAuth tokens.

Lambda functions interacted with Mongoose + MongoDB to Create, Read, Update and Destroy data in a the NoSQL database deployed with MongoDB Atlas.

CircleCI was used in all CI/CD pipelines. For the lambda functions unit tests were done with Ava. Integration tests were written and run using Cypress.io.

Monitoring was all handled in AWS CloudWatch.

For Analytics we synced event data into a Redshift database with Segment.io allowing additional services to respond to events without additional engineering support (SalesForce, AutoPilot, etc.).

Additional Features

  • Slack Integration to increase community engagement
  • Offline and cacheing support with service workers