Code baseOur entire code base is accessible as online GitHub repositories, and is licensed under an extremely permissive, Open Source Initiative-approved open-source license, the Common Public Attribution License (CPAL-1.0). The license requires that attribution be given by including (1) the copyright notice: “Copyright (c) 2017 MATTER Lab at the Child Mind Institute”, (2) the URL: “https://matter.childmind.org”, (3) the Child Mind Institute’s logo, and (4) the attribution phrase: “Child Mind Institute product intended for building applications for good.”
The computer security firm Alpine Security has conducted extensive cybersecurity penetration tests to ensure that MindLogger follows best practices for privacy and security.
ArchitectureMindLogger's architecture consists of a set of User-facing front-ends (two mobile applications and a web application) and Organizer-facing front-ends (an admin panel, data dashboard, and applet builder) with a shared RESTful HTTP API using MongoDB for data storage. The mobile front-ends, Android and iOS apps, are built using React Native. The web application is a ReactJS browser-based counterpart to the mobile applications. Organizers (Managers, Coordinators, Editors, and Reviewers) have access to different single-page applications built using VueJS. The admin panel and applet builder are for managing user roles and applets, and the data dashboard is for reviewing User data, with custom charts implemented using d3.js.
Back-endThe back-end API is built in Python using the CherryPy framework (and Girder, which builds on top of CherryPy). This software layer provides a set of RESTful endpoints that allow you to manage Users, applets, activities, items (such as individual questions), and User responses. All User data is stored in a MongoDB database hosted in an Amazon Web Services cloud instance with password-based encryption to ensure HIPAA compliance. We have HIPAA compliance agreements with Amazon Web Services, Google Cloud Platform, and MongoDB Atlas, and we will support arbitrary backend servers in the near future. For improved performance, MindLogger uses a Redis instance as a temporary storage for data caching. MindLogger uses Firebase as a messaging channel for sending notifications from the back-end API to the User's mobile device. All additional data is consumed from the back-end API through HTTP requests.
Data schemaThe applets, activities, and items are described using ReproSchema, an emerging standard to capture and harmonize cognitive, clinical, and behavioral assessments and responses in a provenance-preserving manner. The schema uses JSON-LD as its representation format and captures, as a connected graph of information, the details of the questions, presentation logic based on responses or scheduling, computation of scores, and interface hints for applications such as MindLogger. The schema uses GitHub to maintain versions and provide persistent URIs for applets and activities, supports multilingual applets, and uses W3C-PROV to establish provenance between the response, the responder, and the applet.
The guidelines for contributing to the mobile app codebase are generally applicable across the repositories.
Bug reports and feature requests
- MindLogger-bug-reports repo to keep track of bug reports and feature requests
- Git Reports to report a bug or request a feature without a GitHub account
Admin Client (primarily for user management)
- mindlogger-app repo for the iOS and Android apps in React Native
- mindlogger-web repo for the MindLogger web app
Back-end APIsOur servers are managed through MongoDB Atlas with each instance's API served via AWS Elastic Beanstalk.
- mindlogger-app-backend repo