MXJournaling Product Requirements Document v1.0.0 Overview MXJournaling (MXJ) is a SaaS offering that allows companies to journal their email to the system for compliance purposes. Our initial target market is registered investment advisors (RIA), subject to an SEC rule stipulating that they maintain an email journal of at least 5 years. Companies that use this service will want to be able to search their email by To, From, Date, Subject, and Body. The last two are full-text searches. Requirements The requirements are broken into 3 parts: receiving email, searching email, and basic web app functionality. Receiving Email We already have a Dockerized version of Postfix set up to receive emails. The emails are written to a folder on the host machine. This requirement is currently fulfilled. Searching Email After emails are received, they need to be loaded into Elasticsearch. This will be done using a Python service in a Docker container. The service should run every X minutes, where X is configurable through an environment variable. We can set the number low for testing, but in production, the number will probably be 15, 30, or 60 minutes. When a batch of emails are loaded into Elasticsearch, they also need to be zipped and stored in Amazon Web Services (AWS) Simple Storage Service (S3). The zip should be named with a uuid and the uuid needs to be saved in Elasticsearch so that we know which zip contains the email if we need to export it in the future. All records in Elasticsearch also need the organization’s ID (a uuid) so that we only return search results for the user’s organization - this is a standard multi-tenant setup. Standard Web App Functionality Users will need to be able to sign up, login, get a time-bound password reset link, setup and enable multi-factor authentication (MFA), see their current usage, enter payment info, and add other users. Next Steps as of November 7 We need a Dockerized Elasticsearch cluster, a Dockerized Flask server for web app functionality, and a Dockerized Python service to load emails into Elasticsearch and S3. The Python service that handles emails will run on the same hosts as the Postfix containers. The rest of the system will run on a separate host, so the Python service needs to be configurable via environment variables to call Elasticsearch and S3.