Anesthesia Test Prep LMS

This project was made when I was doing freelance work for a client, and it was my first time to do web development. This project uses Angular for the frontend, while the backend uses the GCP Firebase platform which handles cloud storage, cloud functions, authentication, and a Firestore NoSql database which also allows for authorization rules.

The code for this project has to remain private since it was made for a client. However, I can show some of the features of the site. This site uses a variety of learning options, and it gives admin a lot of control over everything on the site including theme and logo, as well as a custom builder for pages.

The Library

The Library is the the section of the website devoted to lessons targeting specific topics. The lessons can include numerous media types like audio, video, and images. Each lesson can also have a list of references, resources, or links for further study. The client wanted topics to be organized under a tree structure and lessons can be found anywhere within that hierarchy. Another structure can be reached by the tabs above the topic tree which organizes the topics with tiles.

Lessons can be changed from the tree view or from the button on the bottom right. The current lesson will always be highlighted in the treeview. Breadcrumbs can also be used for navigation.

test prep library article
A library article

The Written Questions

The written questions have the most functionality and are the most complex. There are multiple test modes including tutor mode, test mode, and timed tests. Tests can be auto generated selecting topics and the type of questions to pull from those topics like new questions, already answered questions, or questions that were previously answered incorrectly.

Precreated "recommended" tests can also be taken by users instead of creating dynamic tests from the question bank. Tests can be saved in progress and revisited later as well.

ffps job details
Written Questions Bank

Tests in tutor mode will immediately display the answer after each question. These views will display the percentage of users who selected each option in the question. There is also an explanation for the answer and a link to the library lesson that is related to the question. A progress bar keeps track and displays the number of questions answered and questions remaining.

ffps skill caps
Written Question Tutor Mode

The normal test mode does not immediately show the correct answer. Answers will be displayed at the end in a report. Like the tutor mode, each question's difficulty can be voted on by the user. These votes are another statistic tracked for each question. Questions can be bookmarked and navigation between questions in the test can be done in the sidebar.

ffps mob search
Normal Test Question

The test report shows various details. It has the percentage the user answered correct and compares it to the percentage other users in various categories like their program and their year got correct. It gives the option to retake a test with just the questions answered incorrectly, the whole test, or a review of the test which includes the same views as tutor mode with the questions already answered by the user's previous reponses.

ffps mob details
Sample Test Report

The Case Sections

The "Case" sections are composed of both the Oral and OSCE prep materials. These sections are organized more simply than the other sections. They are based on topics from the actual exam and each topic has a list of cases underneath it. Each list of cases shows the ones that have been marked as complete, liked, or disliked. The cases shown can be filtered based on several different options.

ffps mob details
Orals Cases

The cases are organized by sections and subsections where either one can contain questions and answers and any item can contain media like images, video, or audio. The questions are treated more like a study guide where the user reads and answers the question, then reveals the answer in the dropdown to verify if they were correct.

ffps mob details
Orals Case Example

The User Dashboard

The user dashboard contains a lot of information. It shows the total number of questions answered and the number of question that remain unanswered. It shows the total number of generated tests taken and recommended tests taken. It also includes a countdown for the number of days before the official test.

The top two charts show a comparison between the scores the user has versus the scores of the site as a whole. These comparisons can be narrowed with select boxes that contain various statuses of users on the site.

ffps item details
User Dashboard Sample

The user dashboard has a history of tests taken with various statistics, and it has several graphs to visualize the user's progress. This dashboard view is specifically for Basic Written questions. There is also an Advanced Written questions view, and separate views for Orals and OSCE.

The Admin Dashboard

The Admin Dashboard contains a summary of site usage, finance, and login history. It also shows statistics for various topics and the users based on their defined statuses. The view can be changed with the select box on the top left to see other categories.

ffps fish search
Admin Dashboard

Creating Lessons

Lessons for the library are organized in a system similar to that seen in the MacOS file system. The admin can add new lessons under a topic or they can edit existing lessons. Topics and lessons can be dragged and dropped to any of the columns.

ffps fish details
Lesson Management

Below is the create/edit lesson view. Here the admin can assign various details or media to a lesson.

ffps fish details
Creating Lessons

Creating Questions

The questions are organized in the same way as the library lessons. The main difference is that there is a separate view to create recommended tests that can be shown by clicking the toggle on the top right. Questions can be edited or added in a similar view as the library lessons.

ffps craft search
Question Management

Creating Cases

Oral and OSCE cases are organized, edited, and added in views similar to the written and library lessons.

ffps craft search
Create a case

Program Dashboards

The program dashboards are built around the idea that users would be organized into programs according to things like school or residency program. This first dashboard view shows a high level breakdown of all the users for the program based on their defined status.

ffps craft search
Program Summary Dashboard

This second dashboard view showed a detailed summary of all the users for the program that are defined with a CA-1 status. It shows a break down of their overall results by topic, and it shows a summary of correct vs incorrect for each user. The program director is able to recommend certain topics to users in this view as well. The percentage correct ranges are all color coded.

ffps craft search
CA-1 Program Dashboard

This last dashboard shows a detailed summary for all users in the program. In this instance it can be seen that the CA-1 users are performing slightly worse than the users with other statuses.

ffps craft search
All Statuses Program Dashboard

Creating Custom Pages

The client wanted full control over the content on the site. This also allowed for someone to change the entire site content to serve another purpose or to be an LMS for another organization. Because of this the home page and other pages outside of the LMS content can be created custom and connected by navigation components.

ffps craft search
Create a custom page

Subscription Options

There were many subscription options created for users to access content on the website. Access to specific parts of the website are based on whether the user has the right kind of subscription for that content.

ffps craft search
Subscription Options

Conclusion

This project was harder than most for me because it required me to follow someone else's vision, and I did not feel much freedom to question things unless I felt it was important. It worked out fine, but it required me to add on a lot of additional functionality that I was not able to include in the original architecture I planned. This was not the fault of me or the client though. I think most of the issues were caused by the fact that the client had tried to create an LMS with a pair of programmers before with a different product, and they had repeatedly told him that things were not possible. This seems to be a trend with some programmers, but I never see things that way. With programming, virtually anything is possible.

Similar to every project I've done, I have a desire to refactor and improve this project. I think I always feel this way because I continue to learn more and more, and find better ways to do things. For this specific project, I would like to remove the dependency on Firebase and use an API that I can have more control over. I would also like to try it with supabase.