Monica is an open-source web application to manage your personal relationships. Think of it as a CRM for your friends or family.
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. It's like an assistant (some call it spouse) you dream you had.
Monica is not a social network. 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.
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.
Monica is the simplest, yet most complete, open-source tool to manage your personal relationships. It's available on any platform, is easy to contribute to and has a robust API to talk to other systems.
We provide a hosted version of this application on https://monicahq.com.
If you prefer to, you can simply clone the repository and set it up yourself on any hosting provider, for free. I'm just asking that you don't try to make money out of it yourself.
The best way to setup the project locally is to use Homestead. This is what is used to develop Monica and will provide a common base for everyone who wants to contribute to the project. Once Homestead is installed, you can pull the repository and start setup Monica.
composer install
cp .env.example .env
to configure Monicanpm install
to install bower and gulp.bower install
to install front-end dependencies in thevendor
folder.- Create 2 databases:
monica
andmonica_test
php artisan migrate
to run all migrationsphp artisan db:seed
to load all seeds.php artisan storage:link
to access the avatars.
Note that the seeders will create two accounts.
- First account is
admin@admin.com
with the passwordadmin
. This account contains a lot of fake data that will let you play with the product. - Second account is
blank@blank.com
with the passwordblank
. This account does not contain any data and shall be used to check all the blank states.
Monica uses the testing capabilities of Laravel to do unit and functional testing. While all code will have to go through to Travis before being merged, tests can still be executed locally before pushing them. In fact, we encourage you strongly to do it first.
To setup the test environment, create a separate testing database locally. Smart
defaults are provided in .env.example
.
Don't forget to run the migrations and seeders before running the first test.
php artisan migrate --database testing
php artisan db:seed --database testing
To run the tests, use the phpunit
command.
If you use TravisCI to test the application, it is setup to automatically do these actions.
We use Bower to manage front-end dependencies. The first time you install the
project, you need to bower install
in the root of the project. When you want
to update the dependencies, it's bower update
.
To install a new package, use bower install jquery -S
. The -S
option is to
update bower.json to lock the specific version.
All the assets are stored in resources/vendor
.
CSS is written in SASS and therefore needs to be compiled before being used by
the application. To compile those front-end assets, use gulp
.
To monitor changes and compile assets on the fly, use gulp watch
.
At the current time, we are using Bootstrap 4 Alpha 2. Not everything though - we do use only what we need. I would have wanted to use something completely custom, but why reinvent the wheel? Anyway, make sure you don't update this dependency with Bower. If you do, make sure that everything is thorougly tested as when Bootstrap changes version, a lot of changes are introduced.
Monica makes use of events and observers.
For instance, once a contact is created, an event ContactCreated
is
broadcasted and a couple of things happen after this (for instance, the action
is logged in the database so it can appear later on the dashboard).
Emails are an important of Monica. Emails are still the most significant means of communication and people like receiving them when they are relevant. That being said, you will need to test emails to make sure they contain what they should contain.
For development purposes, you have two choices:
- You can use Mailtrap. This is an amazing service that provides a free plan that is plenty enough to test all the emails that are sent.
- If you use Homestead to code on your local machine, you can use
mailhog that is built-in. To use it, you
first need to start mailhog (
sudo service mailhog restart
). Then, head up to http://localhost:8025 in your browser to load Mailhog's UI.
Reminders are generated and sent using an Artisan command
monica:sendnotifications
. This command is scheduled to be triggered every hour
in app/console/Kernel.php
.
Statistics are generated by the Artisan command monica:calculatestatistics
every night at midnight and this cron is defined in app/console/Kernel.php
.
We welcome contributions of all kinds from anyone. We do however have rules.
- Monica is written with a great framework, Laravel. We care deeply about keeping Monica very simple on purpose. The simpler the code is, the simpler it will be to maintain it and debug it when needed. That means we don't want to make it a one page application, or add any kind of complexities whatsoever.
- That means we won't accept pull requests that add too much complexity, or written in a way we don't understand. Again, the number 1 priority should be to simplify the maintenance on the long run.
- It's better to move forward fast by shipping good features, than waiting for months and ship a perfect feature.
I'm looking for people willing to write tests for the existing features.
Copyright (c) 2016-2017 Regis Freyd
Licensed under the MIT License