MindLogger About Docs FAQ Code Donate

Code


MindLogger stack architecture diagram

Code base

Our 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.

Architecture

MindLogger'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-end

The 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 schema

The 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.

Contributing

The guidelines for contributing to the mobile app codebase are generally applicable across the repositories.


Bug reports and feature requests


Admin Client (primarily for user management)


User Clients


Back-end APIs

Our servers are managed through MongoDB Atlas with each instance's API served via AWS Elastic Beanstalk.

Community-maintained repos