LMS for the casino industry

LMS for the casino industry

Itransition delivered a SCORM-compliant and multi-tenant LMS, introducing process automation and providing customization options.


Our customer, Vector Solutions, is a US-based provider of industry-focused SaaS products that help organizations prepare for more challenging workplaces. The customer's product set includes training and learning management, career pathing and assessment software, risk and safety management, emergency communications software, workforce scheduling and evaluations, and more. With 20+ years on the market, the company boasts 34,000+ customers worldwide and over 31 million active users.

Initially, Itransition was approached by Casino Essentials – a company that was acquired by Vector Solutions in 2018. Casino Essentials was a leading educational provider in the gaming industry, offering industry- and casino-specific training courses to the employees of several casinos across North America. With an active user base of approximately 65,000, they were looking to grow it to 600,000+ users.

Casino Essentials used a learning management system (LMS) on a subscription basis to deliver courses, tests, and certificates to their clients. The legacy LMS did not provide the necessary customization, flexibility, and scalability to fully meet the customer’s needs. Thus they were looking to develop a custom multi-tenant LMS platform from scratch to keep up with competing casino training providers.

Casino Essentials did not have an in-house team to develop and support the application. They were searching for a dedicated technology partner that could help them carry out the project from the ground up, starting with the requirements formalization and consulting on to development and testing. They decided to choose Itransition, as we have successfully delivered and supported several complex educational solutions and possess diverse tech expertise to select the technology that would meet the needs of the project best.


Discovery phase

Itransition proposed starting the project with a discovery phase to achieve the following goals:

  • Discussing the platform's business requirements and specifying the technology stack for the platform
  • Creating functional and technical specifications
  • Conducting a joint review of the list of features, involving Itransition’s business analyst and the customer’s product owner
  • Defining an implementation plan

Drawing on discovery phase outcomes, together with the customer, we defined the following characteristics of the future LMS:

  • A cloud-based responsive SaaS product with the capability to support up to 600,000 registered users according to the customer’s growth plans
  • Creating and customizing courses and surveys (tests) for each client based on their needs SCORM-compliance
  • Centralized update management with updates/upgrades synchronization across selected tenants
  • Built-in reporting capabilities with the possibility to track course data such as online course completion and test pass/fail

The flexibility of the system to provide more customization options for end clients should be achieved due to:

  • Multi-tenant architecture with the ability to create a tenant for each client (casino) with support of at least 500 tenants
  • Support of white labeling, including dedicated instance URL for every tenant (subdomains), settings to customize the banner, header/footer, and the login page for every tenant

Additionally, the system was expected to support a number of automated processes, e.g., bulk uploading of users to assign courses, versioning of lessons, and report notifications for certain users, which would help reduce the time spent on them.

The customer was considering Moodle as a platform on which the new solution should be built, given that their legacy system was based on it. Their previous vendor failed to develop it as per customer needs because the platform required a lot of custom coding. However, the customer’s internal processes worked differently than those set in Moodle. After thoroughly discussing the project needs with our technical experts, it was decided to design the solution in Java to better meet the project’s requirements.

We suggested dividing the solution into two logical modules: the portal used by the customer’s admins and the learning portal for end clients. For the client-facing part of the platform, we suggested using the single-page application (SPA) approach. In an SPA, either all necessary code – HTML, JavaScript, and CSS – is retrieved with a single page load, or partial changes are performed by loading new code on demand from the web server, usually triggered by user actions. The page neither automatically reloads during user interaction with the application nor controls transfer to another page, resulting in faster transitions that make the website feel more like a native app.

LMS development

LMS structure

Our team has developed a new LMS from scratch and keeps adding new functionality and improving and increasing the solution’s performance. The end users of the solution are casino employees (learners) and administrators who curate the learning process. The solution consists of two modules:

  • Central panel
    An administrative panel that the customer support staff uses to manage the entire system. It allows for managing users and tenants and enabling specific functionality for them – lessons and courses creation, enrollments (subscriptions to courses) management, report generation, etc. The admins on the customer’s side are able to control and execute any features of any tenants from the central panel without logging into the tenant’s account.
Central panel, tenant administration
  • Tenant portal
    A part of the system that is used directly by casinos and their employees, who are provided with a unique access URL. The tenant panel is divided into two parts: 1) administrative panel, where end client admins can create users (casino employees) individually or through bulk upload of XLS files/sending JSON files via public API calls, manage users, create/manage and assign lessons and courses, create surveys, and generate reports; 2) learner panel, where users take courses assigned by the admin. It includes a user dashboard allowing a learner to view the courses they are enrolled for; a course page to search for courses and view the list of all existing courses in the tenant; a calendar and a messenger.
Tenant portal, assessment management


Courses can be general, required by US legislation, or tenant-specific. The customer offers general courses to casinos on a paid basis by uploading them to the tenant panel and assigning them to a specific tenant or multiple tenants at the same time. Some examples of general courses are employee safety training, responsible gaming awareness training, cybersecurity awareness, conflict management for improved performance, bullying in the workplace, and counterfeit currency prevention. Any tenant can also create their own lessons and courses and assign them to learners.

Tenant portal, courses

Courses consist of several lessons, which can include video lessons with the possibility of attaching links to external learning materials, PDFs, presentations, and SCORM packages. SCORM packages represent ZIP archives with data (HTML, CSS, JS code) defined by the SCORM standard and launched by the integrated Rustici engine. The Rustici engine provides the communication method and data models that allow the learning content and the LMS to work together. Due to this, end clients can create or customize courses (e.g. add new languages) on their own and offer them to other users. Tenant-specific courses can be customized during their creation by defining necessary conditions and applying course dependencies. For example, a course can not be completed without passing a certain lesson or can not be started without completing another course.

Tenant portal, lesson upload

Each course can contain a survey – a questionnaire with answering options (true/false, multiple choice, single response) with scores that should be completed in order for a course to be considered passed. Tenants can define the order of lessons or the passing score for each lesson and configure sending a certificate upon course completion.

Tenant portal, surveys


Reporting involves tracking system activities and/or modifications made. There are basic reports available by default with the possibility to create customized reports by users having corresponding permissions. The reporting functionality is flexible and adaptable for each specific user and provides a subscription option. While creating a report, users can select specific parameters and apply filtering options to display only the fields needed with the possibility to save the configuration. For example, reports can feature the students who passed a test or failed it, track assignments to specific courses, provide overview information on which courses are created, show course statuses, and so on. Reports can provide information on upcoming deadlines for passing certain courses by learners, who could be sorted out by departments and job titles, or show user activity in the system. For reports customization, we leveraged Criteria API for Java – queries, which are based on fields and filters that a user picks, are formed dynamically at runtime, selecting only the data that is needed. Such an approach helped optimize data processing by using less system RAM.

Central panel dashboard, reports

Course matrix

According to the customer’s requirements, it was necessary to provide great flexibility of settings for all functionality with multiple variations of use to fit end client needs. As a result, the solution has complex logic on the backend, processing a huge number of settings. To facilitate this process and exclude the possibility of errors, we created course matrix functionality.

Tenants can have thousands of employees, and the process of manually assigning courses to each of them and tracking their learning activities can be very time-consuming, especially given that employees might occasionally change their job titles and/or transition to other departments. Course matrix functionality enables the automation and systematization of course assignments to students within each tenant. It enables choosing specific departments and job titles to assign courses to employees quickly and easily. 

By adding courses to the course matrix, admins have the possibility to choose specific departments and job titles, view enrollments, add enrollment start, end, and due dates, and so on. Admins can also select exception settings for an enrollment to restrict certain users inheriting it (e.g. not allowed if the course was taken in the last 90 days). After assigning a course or a lesson to a new user, the system automatically verifies whether this lesson had already been passed by the user or assigned to them.

After any change, the system initiates a recalculation of all data by necessary criteria to exclude the possibility of errors. For example, there could be 800 enrollments with 5000 assigned users recalculated. We implemented a separate microservice responsible for recalculating all dependencies between course assignments. The most complex thing is the logic of recalculation, which occurs on the code level and cannot be realized by means of third-party utilities. It allows for customizing almost any functionality – user profiles, templates and report filtering, creating various types of lessons and courses with different conditions for their passing, automating the assignment of courses, etc. As a result, the logic represents highly connected components that depend on each other – changing one course’s setting options can cause thousands of assigned courses to be recalculated.

Tenant portal, course matrix

Over time, after adding new tenants with thousands of users, the number of dependencies of one component from another (or from itself) has grown significantly, slowing down the processing time. Sometimes the processing of such a matrix could take up to 12 hours. We managed to optimize the initial data recalculation time through code optimization and algorithms modification. Instead of full-cycle processing and checking all system components for updates, we enabled the system to automatically allocate processing areas with data updates and skip the areas it already checked, marking them correspondingly and moving to finding and fixing bottlenecks. Thanks to that, the data processing time of 800+ enrollments was reduced by about 200 times.


To minimize the risk of missing defects, Itransition’s QA team carried out the following QA activities:

  • Test design – writing test documentation, fully covering the functionality with tests
  • New feature testing – functional and GUI testing of a new feature set
  • Defect validation, carried out for all the defects with the NFT label or at the request of the customer for defects with other labels
  • Regression testing – the testing of existing features that could be affected after changes were made to the system
  • Smoke testing – acceptance testing, carried out on the pre-production environment after performing all the above steps

Based on the task, the following testing sequences can be distinguished:

  • New functionality (no dependencies with the existing functionality): Test design – NFT – DV – Smoke testing
  • New functionality (having dependencies with the existing functionality): Test design – NFT – Regression testing – DV – Smoke testing
  • Existing feature update: Test design (if needed) – Regression testing – DV – Smoke testing

Integration and unit tests were written in Java and Kotlin. For manual tests, we utilized the following tools:


Сreating, updating, storing, and passing tests


Testing on different devices, browsers, and OS versions


API testing system to manage system users through API (creation, update)

Virtual machines

Testing on different operating systems


Tracking errors, configuring/managing traffic, working with different devices and screen resolutions




The solution has a mixed type architecture. Initially, it was designed as a monolith service, where the most important business logic is concentrated, such as creating and managing courses, users, and enrollments. Later, according to best practices, we started adding new functionality like separate microservices. The solution comprises six microservices for such features as course matrix, reporting, certificates creation, scheduler, reporting scheduler, and notification services. Allocating new functionality in microservices allows for better monitoring and tracking of services and improves the overall solution’s performance.

The solution was written in Java and Kotlin. The backend was built with the Spring framework, while for the frontend, we utilized Angular. We chose PostgreSQL as a database. For reporting, we maintain a separate database as report generation consumes a lot of RAM. It also serves as a read replica of the main database to scale the read workload, increasing the solution’s performance and used as recovery. The Spring Security framework provided for authentication, authorization, and managing user permissions, enabling or restricting the functionality accordingly. Hibernate enabled the interaction of the solution with the database. Docker allowed for delivering the software in containers.

The LMS is integrated with the following services:


Identity provider enabling single sign-on from tenants’ own systems to the LMS.

Fullstory SDK

Customer experience platform tracking all user activities on the UI.

ChurnZero REST API + SDK

Customer success management platform tracking data across the customer lifecycle point-wise, e.g. creating a course, user, logging in the tenant portal, etc.

Rustici engine

Managing and launching of SCORM packages, ensuring compliance with the SCORM standard, and defining communications between educational content and the LMS.

AWS infrastructure

Taking into account the performance and scalability requirements for the solution, we suggested hosting the solution infrastructure on AWS. Amazon EC2 provided computing capacity for running two LMS server instances (with seven separate services on each) and two SCORM server instances. Using two servers for each instance allows for distributing load between them. LMS servers contain the main logic, such as starting a course, assigning a user to it, checking out permissions, etc. Amazon S3 serves as a cloud object storage with publicly accessible (frontend) and private (backend, containing assets uploaded by end clients such as videos, PDFs, SCORM packages, etc.) buckets. For operating databases (main, reporting, and SCORM) in the cloud, we leverage Amazon RDS. Data isolation between different tenants happens on a code level in the database through an add-in. All requests to the majority of instances are filtered according to tenant IDs and only those matching a specific tenant ID are selected. Elastic Load Balancer (ELB) enabled load distribution between servers. There are two ELBs – the main one handles the LMS servers and the additional one curates requests to the SCORM servers (e.g. launching a SCORM package). Amazon Route53 acts as a DNS service and enables data routing. Amazon CloudFront serves as a CDN, caching frontend files and the assets on edge locations. CloudFront speeds up the interaction between user and the website serving as a caching system for each region to avoid repeated downloading of data when a user from a given region has already accessed the website. As a message broker enabling communication between microservices, we employed Amazon SQS message queueing service. Amazon SNS enables sending notifications, and for email sending, we use Amazon SES.

AWS architecture

Being an AWS Advanced Consulting Partner and a confirmed AWS Well-Architected Partner, Itransition has been utilizing the AWS Well-Architected Framework (WAF) for several years in order to build reliable, high-performing, and secure AWS-based systems.

As part of the technical coordination process, Itransition's CTO office periodically conducts project audits to control the quality of the projects developed in the company. To analyze and summarize the solution’s current state, measure its architecture against AWS Well-Architected best practices, and identify areas for improvement, we carried out the AWS Well-Architected Review (WAFR). WAFR outcomes help the customer make informed decisions about how to reduce risks or make improvements to achieve desired benefits and understand the pros and cons of the decisions they make while building the system.

Itransition’s WAF expert, a project team lead, and a business analyst took part in the WAFR. Together, they filled in a questionnaire and carried out the solution’s assessment with the help of the AWS Well-Architected Tool. During WAFR execution, the total number of evaluated categories amounted to 58. As a result of the review, the AWS Well-Architected Tool generated a report on possible improvements, underlining system issues prioritized by severity and importance from the AWS point of view. In several categories, no possible improvements were identified. Here are some examples of the tool’s suggestions and our improvements:

  • Designing the solution in a way to easily understand its state
    We integrated an application and user activity telemetry tool to gather data on the use and performance of the application and its components.
  • Understanding the solution’s operation health
    We define, collect, and analyze operation metrics and set up alerts when operation anomalies are detected. Itransition provided the customer with all the tools to visualize a complete picture of the solution's operational health, which they, along with our project team, regularly monitor.
  • Protecting data in transit
    Our team ensures that the communication between the resources within the solution as well as the communication between end users and other services occurs in a secure way. For this purpose, we implement secure key and certificate management, enforce encryption in transit, and authenticate network communications.
  • Planning network topology
    We arrange the elements of the communication network by using highly available network connectivity (DNS, CDN, load balancing) for the solution’s public endpoints, which are located outside the virtual network. We also make sure that IP address ranges in Amazon VPC are large enough to accommodate project requirements, such as expansion and allocation of IP addresses to subnets across AWS Availability Zones.
  • Configuring networking solution
    We apply Elastic Load Balancing and leverage encryption offloading, which implies that load balancers take care of the TLS/SSL processes in order not to affect the web server’s performance.

Based on the received information, our WAF expert prepared a custom report, taking into account project specifics and with an eye on customer needs and priorities. Ultimately, we formed an improvement backlog that will contribute to the solution's rapid and steady growth by ensuring operational excellence, security, reliability, performance efficiency, sustainability, and cost optimization.


The LMS delivered by Itransition helped Casino Essentials increase its client base more than two times in six years. A 200x performance increase in matrix data processing boosted customer satisfaction, while making it possible to further grow the number of clients without compromising user experience. 

Ultimately, Vector Solutions, an eLearning and performance support company, added the platform to its portfolio as a leading training and compliance solution for the gaming industry. The customer receives roughly $3.5m in annual contract value through the delivered solution.