CAPTAIN
CAPTAIN is an acronym for Computer Assisted Personal Tutor with Adaptive Instruction. It is basically an open source learning app that is based on the philosophy that knowledge can always be improved upon and reused indefinitely. You create topics that are generalized and small enough that they can be independently improved again and again, and can be re-used in multiple study paths from various domains. A study path is a sequence of topics that are arranged to train a student for a particular goal. More about this has been explained in the philosophy section.
Tech
This project has been a closed source personal project of mine back in 2019 when it was originally implemented in PHP and MySQL, but recently I decided to make it open source and rebuild it from scratch on the component based approach. This project is being developed incrementally, so not all features in the philosophy section have been implemented in the open source yet.
The backend is built on Django and uses a PostgreSQL database.
The web frontend (for staff accounts) is built on NextJS, which is a framework based on React. To access the full capabilities of the platform you need to have a staff account. Create a normal account on the platform and ping me and I will promote you to a staff account.
The app for learning is built on EXPO, which is a framework built on top of React Native. It is currently private and will be made public here soon.
Features
The features that have been implemented are listed below.
Path & Topic Editor
You can craft topics with the drag-drop supported editor, topics can have other topics as a prerequirement so they can be added resulting in a relationship that is synonymous to a graph - but when a staff is adding a topic B as a requirement for topic A and somewhere down the requirement chains of B we have A as a prerequirement - this should not be permitted because it means topic A requires knowledge of topic A as a prerequirement for reading topic A - but the system takes care of this and makes sure there are no requirement cycles.
The previewer is designed to give the staff member a glimpse of how the topic or path they're editing will display on the phone. You can check out the previewer too.
A topic's theory content supports editing in markdown format. This is done to enable all the features of github flavoured markdown and a user can structure content using various heading levels, add topics, images, links, math formulas etc.
Subjects
Subjects can be organized using drag-drop and nested in one another synonymous to a folder structure in an operating system. A subject is a grouping for similar topics, decided by staff members. Topics can be dragged an dropped on to other subject for quick reassignment.
User Accounts
There are different user account levels - learner account, staff account, admin account and admin can upgrade users. Sign in is done using JSON Web Token based authentication. The paths and topics created by a staff account belong to them only, and other staff cannot edit/change/or delete them.
Path Progress
The learner's every progress about reading a topic or completing a question, is all recorded to be used for learner profiling, and even improving the topic relationships for everyone (read philosophy).
Theming
The code has been written such that if follows a centralized theming and colors architecture - the base fonts and colors of various natures can be customized to reflect in the overall system by simply editing the tailwind.config.js file. Also supports dark mode toggle (near the logo) and appropriate theme colors for dark mode.
Upcoming Features
Although the long term goal is to implement all of the features that align with the philosophy section, the features currently being developed are as follows.
  • Bring learner app to the public.
  • Allowing users to submit questions and classifying them to appropriate topics/subjects, then showing them to the user interface of the staff who concers with those topics, and also to the learners who have completed those topics.
  • Adapting a new path to a learner in the start using learner profiling using the assessment activities and relationships between the topics.
Philosophy
The structure of a topic in the system is depicted through the following diagram. A topic has content in the form of steps - theory step, question step, more type of steps, and it has an evaluation activity, which could be a question or any activity that can be used to evaluate anyone's knowledge on the topic. Since the topics are tiny generalized learnable units, they can specify which other topics they require as a pre-requirement - to be completed by a student before being eligible to study this topic.
An example would be topic that teaches you about calculating the mean of a bunch of numbers can be useful in study paths related to something in mathematics, statistics, machine learning, or even in some computer science related study paths. Now that topic about calculating means can be improved and revised countless times, getting better and better until its the perfect tutorial on calculating means. When a topic is improved, all the paths that contain the topic are improved in quality as a result. And this is done without disturbing all the different study paths this topic is in, because while teaching means we do it in a basic and general sense, and we do not assume the overall application that is being carried out in the path, since it could be any type of study path and our student could be from any domain.
When topics can specify other topics as a pre-requirement, it creates a structure of a directed graph with topics as nodes and edges as requirement connections, but it should not have any cycles because a cycle would mean a topic somewhere down the requirement chain has itself as its own pre-requirement. The system takes care of preventing formation of requirement cycles, so the graph remains a directed acyclic graph as illustrated in the following figure.
These connections are specified by subject experts who have access to the system as staff accounts. But the topics can be related to each other in more ways than those specified by human subject experts. When we have enough natural usage data of students using the system, studying paths and topics, we can use that usage data to intelligently find out more relations between topics[1], as was found out through a test run and illustrated in the following figure.
These relations can be used for student profiling - when the student is about to start a study path, we do not assume that the student needs to study every topic in that path, as there might be some topics that the student knows. So a small activity in the start of a path can help cut-off many topics from the path for that specific student and save so much time. This has been illustrated in detail my paper[1].
Also, since the topics have requirements and a study path is a sequence of some particular topics, the study path might not contain all the topics that these topics in the study path require. As a result, the remaining required topics become the pre-requirements of the study path as illustrated in the diagram below.
The questions are an important asset to the system and the system uses them wisely. The system assigns any user submitted questions to the appropriate topics[2], and if no close match then to appropriate subjects (a subject is just a folder/grouping of topics). The question can then be shown to the appropriate subject experts that deal with the related topics and even to the learners who have completed those topics. This helps in getting appropriate solutions to questions and the question is attached forever to the system, expanding the knowledge content of the system[3] not arbitrarily but in the direction of its learners.
References
[1]S. Singh and V. Singh, “A Graph Based Approach to Learner Profiling in an Intelligent Tutoring System,” Indian J. Comput. Sci. Eng., vol. 13, no. 3, 2022, doi: 10.21817/indjcse/2022/v13i3/221303048
[2]S. Singh and V. Singh, “Mapping User-Submitted Short Text Questions to Subjects of Study: A Multinomial Classification Approach,” in Communication and Intelligent Systems, Singapore, 2022, pp. 843–852. doi: 10.1007/978-981-19-2130-8_65
[3]S. Singh and V. Singh, “An Architecture of Domain Independent and Extensible Intelligent Tutoring System based on Concept Dependencies and Subject Paths,” Int. J. Adv. Comput. Sci. Appl., vol. 13, no. 5, 2022, doi: 10.14569/IJACSA.2022.0130538