<commit_before><p align="center"><img src="https://app.monicahq.com/img/small-logo.png"></p>
<h1 align="center">Monica</h1>

<p align="center">
<a href="https://travis-ci.org/monicahq/monica"><img src="https://travis-ci.org/monicahq/monica.svg?branch=master" alt="Build Status"></a>
<a href="https://github.com/djaiss/monica/blob/master/LICENSE"><img src="https://img.shields.io/badge/License-AGPL-blue.svg" alt="License"></a>
</p>

* [Introduction](#introduction)
   * [Purpose](#purpose)
   * [Who is it for?](#who-is-it-for)
   * [What Monica isn't](#what-monica-isnt)
* [Vision, goals and strategy](#vision-goals-and-strategy)
   * [Vision](#vision)
   * [Goals](#goals)
   * [Strategy](#strategy)
   * [Why Open Source?](#why-open-source)
* [Get started](#get-started)
   * [Running with Docker](#running-with-docker)
      * [Use docker-compose to run a pre-built image](#use-docker-compose-to-run-a-pre-built-image)
      * [Use docker-compose to build and run your own image](#use-docker-compose-to-build-and-run-your-own-image)
      * [Use Docker directly to run with your own database](#use-docker-directly-to-run-with-your-own-database)
   * [Setup the project on your server](#setup-the-project-on-your-server)
   * [Update your server](#update-your-server)
   * [Deploy on Heroku](#deploy-on-heroku)
   * [Importing vCards (CLI only)](#importing-vcards-cli-only)
* [Contribute as a developer](#contribute-as-a-developer)
   * [Setup Monica](#setup-monica)
   * [Setup the testing environment](#setup-the-testing-environment)
   * [Front-end](#front-end)
      * [Bower](#bower)
      * [Watching and compiling assets](#watching-and-compiling-assets)
      * [Bootstrap 4](#bootstrap-4)
   * [Backend](#backend)
      * [Email testing](#email-testing)
      * [Email reminders](#email-reminders)
   * [Statistics](#statistics)
* [Contributing](#contributing)
   * [How the community can help](#how-the-community-can-help)
* [License](#license)

## Introduction

Monica is an open-source web application to manage your personal relationships.
Think of it as a CRM for your friends or family. This is what it currently
looks like:

![screenshot of the application](https://app.monicahq.com/img/screenshot.png)

### Purpose

Monica allows people to keep track of everything that's important about their
friends and family. Like the activities done with them. When you last called
someone. What you talked about. It will help you remember the name and the age
of the kids. It can also remind you to call someone you haven't talked to in a
while.

### Who is it for?

This project is for people who have hard time remembering details about other
people's lives - especially the ones they care about. Yes, you can still use
Facebook to achieve this, but you will only be able to see what people do and
post - and if they are not on Facebook, you are stuck anyway.

I originally built this tool to help me in my private life: I've been living
away of my own country for a long time now. I want to keep notes and remember
the life of my friends in my home country and be able to ask the relevant
questions when I email them or talk to them over the phone. Moreover, as a
foreigner in my new country, I met a lot of other foreigners - and most come
back to their countries. I still want to remember the names or ages of their
kids. Call it cheating - I call it caring.

We've already received numerous feedback of users who suffer from Asperger's
syndrome who use this application on a daily basis. It helps them have better
social interactions.

### What Monica isn't

Monica is not a social network and never will be. It's not meant to be social.
In fact, it's for your eyes only. Monica is also not a smart assistant - it
won't guess what you want to do. In fact it's pretty dumb: it will send you
emails only for the things you asked to be reminded of.

## Vision, goals and strategy

We want to use technology in a way that does not harm human relationships, like
big social networks can do.

### Vision

Monica's vision is to **help people have more meaningful relationships**.

### Goals

We want to provide a platform that is:

* **really easy to use**: we value simplicity over anything else.
* **open-source**: we believe everyone should be able to contribute to this
tool, and see for themselves that nothing nasty is done behind the scenes that
would go against the best interests of the users. We also want to leverage the
community to build attractive features and do things that would not be possible
otherwise.
* **easy to contribute to**: we want to keep the codebase as simple as possible.
This has two big advantages: anyone can contribute, and it's easily maintainable
on the long run.
* **available everywhere**: Monica should be able to run on any desktop OS
or mobile phone easily. This will be made possible by making sure the tool is
easily installable by anyone who wants to either contribute or host the platform
themselves.
* **robust API**: the platform will have a robust API so it can communicate both
ways to other systems.

### Strategy

To reach this ambitious vision, we'll use technology in a way that does not harm
human relationships, like big social networks can do.

We think Monica has to become a platform more than an application, so people can
build on it.

Here what we should do in order to realize our vision:
* Build an API in order to create an ecosystem. The ecosystem is what will make
Monica a successful platform.
* Build importers and exporters of data. We don't want to have any vendor
lock-ins. Data is the property of the users and they should be able to do
whatever they want with it.
* Create mobile apps.
* Build great reports so people can have interesting insights.
* Create a smart recommandation system for gifts. For instance, if my nephew is
soon 6 years old in a month, I will be able to receive an email with a list of
5 potential gifts I can offer to a 6 year old boy.
* Add more ways of being reminded: Telegram, SMS,...
* Create Chrome extensions to load Monica's data in a sidebar when viewing a
contact on Facebook, letting us take additional notes as we see them on Facebook.
* Add modules that can be activated on demand. One would be for instance, for
the people who wants to use Monica for dating purposes (yes, we've received this
kind of feedback already).
* Add functional and unit tests so the main features are tested. Stability is
key.

### Why Open Source?

Why is Monica open source? Is it risky? Will someone steal my code and do a
for-profit business that will kill my own business? Why reveal my strategy to
the world? This is the kind of questions we've received by email already.

The answer to these questions is simple: yes, you can fork the project and do a
competing project, make money out of it (even if the license is not super
friendly to achieve that) and I'll never know. But it's ok, I don't mind.

I wanted to open source this project for several reasons:

* I believe, perhaps naively, that this project can really change people's
lives. While I aim to make money out of it, I also want everyone to benefit<commit_msg>Fix typo in README (#229)<commit_after><p align="center"><img src="https://app.monicahq.com/img/small-logo.png"></p>
<h1 align="center">Monica</h1>

<p align="center">
<a href="https://travis-ci.org/monicahq/monica"><img src="https://travis-ci.org/monicahq/monica.svg?branch=master" alt="Build Status"></a>
<a href="https://github.com/djaiss/monica/blob/master/LICENSE"><img src="https://img.shields.io/badge/License-AGPL-blue.svg" alt="License"></a>
</p>

* [Introduction](#introduction)
   * [Purpose](#purpose)
   * [Who is it for?](#who-is-it-for)
   * [What Monica isn't](#what-monica-isnt)
* [Vision, goals and strategy](#vision-goals-and-strategy)
   * [Vision](#vision)
   * [Goals](#goals)
   * [Strategy](#strategy)
   * [Why Open Source?](#why-open-source)
* [Get started](#get-started)
   * [Running with Docker](#running-with-docker)
      * [Use docker-compose to run a pre-built image](#use-docker-compose-to-run-a-pre-built-image)
      * [Use docker-compose to build and run your own image](#use-docker-compose-to-build-and-run-your-own-image)
      * [Use Docker directly to run with your own database](#use-docker-directly-to-run-with-your-own-database)
   * [Setup the project on your server](#setup-the-project-on-your-server)
   * [Update your server](#update-your-server)
   * [Deploy on Heroku](#deploy-on-heroku)
   * [Importing vCards (CLI only)](#importing-vcards-cli-only)
* [Contribute as a developer](#contribute-as-a-developer)
   * [Setup Monica](#setup-monica)
   * [Setup the testing environment](#setup-the-testing-environment)
   * [Front-end](#front-end)
      * [Bower](#bower)
      * [Watching and compiling assets](#watching-and-compiling-assets)
      * [Bootstrap 4](#bootstrap-4)
   * [Backend](#backend)
      * [Email testing](#email-testing)
      * [Email reminders](#email-reminders)
   * [Statistics](#statistics)
* [Contributing](#contributing)
   * [How the community can help](#how-the-community-can-help)
* [License](#license)

## Introduction

Monica is an open-source web application to manage your personal relationships.
Think of it as a CRM for your friends or family. This is what it currently
looks like:

![screenshot of the application](https://app.monicahq.com/img/screenshot.png)

### Purpose

Monica allows people to keep track of everything that's important about their
friends and family. Like the activities done with them. When you last called
someone. What you talked about. It will help you remember the name and the age
of the kids. It can also remind you to call someone you haven't talked to in a
while.

### Who is it for?

This project is for people who have hard time remembering details about other
people's lives - especially the ones they care about. Yes, you can still use
Facebook to achieve this, but you will only be able to see what people do and
post - and if they are not on Facebook, you are stuck anyway.

I originally built this tool to help me in my private life: I've been living
away of my own country for a long time now. I want to keep notes and remember
the life of my friends in my home country and be able to ask the relevant
questions when I email them or talk to them over the phone. Moreover, as a
foreigner in my new country, I met a lot of other foreigners - and most come
back to their countries. I still want to remember the names or ages of their
kids. Call it cheating - I call it caring.

We've already received numerous feedback of users who suffer from Asperger's
syndrome who use this application on a daily basis. It helps them have better
social interactions.

### What Monica isn't

Monica is not a social network and never will be. It's not meant to be social.
In fact, it's for your eyes only. Monica is also not a smart assistant - it
won't guess what you want to do. In fact, it's pretty dumb: it will send you
emails only for the things you asked to be reminded of.

## Vision, goals and strategy

We want to use technology in a way that does not harm human relationships, like
big social networks can do.

### Vision

Monica's vision is to **help people have more meaningful relationships**.

### Goals

We want to provide a platform that is:

* **really easy to use**: we value simplicity over anything else.
* **open-source**: we believe everyone should be able to contribute to this
tool, and see for themselves that nothing nasty is done behind the scenes that
would go against the best interests of the users. We also want to leverage the
community to build attractive features and do things that would not be possible
otherwise.
* **easy to contribute to**: we want to keep the codebase as simple as possible.
This has two big advantages: anyone can contribute, and it's easily maintainable
on the long run.
* **available everywhere**: Monica should be able to run on any desktop OS
or mobile phone easily. This will be made possible by making sure the tool is
easily installable by anyone who wants to either contribute or host the platform
themselves.
* **robust API**: the platform will have a robust API so it can communicate both
ways to other systems.

### Strategy

To reach this ambitious vision, we'll use technology in a way that does not harm
human relationships, like big social networks can do.

We think Monica has to become a platform more than an application, so people can
build on it.

Here what we should do in order to realize our vision:
* Build an API in order to create an ecosystem. The ecosystem is what will make
Monica a successful platform.
* Build importers and exporters of data. We don't want to have any vendor
lock-ins. Data is the property of the users and they should be able to do
whatever they want with it.
* Create mobile apps.
* Build great reports so people can have interesting insights.
* Create a smart recommendation system for gifts. For instance, if my nephew is
soon 6 years old in a month, I will be able to receive an email with a list of
5 potential gifts I can offer to a 6 year old boy.
* Add more ways of being reminded: Telegram, SMS,...
* Create Chrome extensions to load Monica's data in a sidebar when viewing a
contact on Facebook, letting us take additional notes as we see them on Facebook.
* Add modules that can be activated on demand. One would be for instance, for
the people who wants to use Monica for dating purposes (yes, we've received this
kind of feedback already).
* Add functional and unit tests so the main features are tested. Stability is
key.

### Why Open Source?

Why is Monica open source? Is it risky? Will someone steal my code and do a
for-profit business that will kill my own business? Why reveal my strategy to
the world? This is the kind of questions we've received by email already.

The answer to these questions is simple: yes, you can fork the project and do a
competing project, make money out of it (even if the license is not super
friendly to achieve that) and I'll never know. But it's ok, I don't mind.

I wanted to open source this project for several reasons:

* I believe, perhaps naively, that this project can really change people's
lives. While I aim to make money out of it, I also want everyone to benefit
{'fraction_non_alphanumeric': 0.08329243497160485, 'fraction_numerical': 0.0011918951132300357, 'mean_word_length': 4.103398926654741, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 29, 'https://': 12, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3647650', 'n_tokens_mistral': 4065, 'n_tokens_neox': 3838, 'n_words': 2039}