When you are working every day on something, you don't take the time very often to think about the big picture. I don't want to lose sight of what I would like Monica to accomplish - so here is what I’d like to do in 2018. This post is not a roadmap per se. Think of it as my very own Wishlist.
Launch the mobile application. The work has already started and we are close to a v1 that should ship in the coming weeks. The first version will be read only, and v2 will allow the edition of data. The code of the mobile application is already on GitHub, and is 100% open source (obviously).
GraphQL support: we already have a REST API that the v1 of the mobile application will use. If we truly want a great mobile application, we need to make sure that all the requests made to the API are efficient and GraphQL is the best solution for this.
Support for Carddav and Caldav. I believe this is what will make Monica shine on the long run. These two protocols will let you sync your contacts and calendar entries with your existing mail and calendar apps on mobile or desktops. Monica would become the central source of your social data.
More love to reminders, with the possibility to be warned before an event actually happens.
Provide statistics about your social life: how much time you went out a given month, who do you see the most, where do you hangout the most, etc… The more data you feed to Monica, the more insights you’ll have.
A calendar view that shows reminders, future events,…
The concept of “rich” activity sheets: for instance, if you indicate that you went to a restaurant, have the ability to set where it was (with automatic placement on a map), what you’ve eaten, how long it took, etc… Each type of activities would have specific information to fill.
The journal should become the place where your life is auto documented. This will be great once we’ll have rich activity sheets.
Stabilize the platform, add a lot of tests to make sure we don't break things as we move forward.
- If I have the time, but only if I do: make the app prettier. However I believe it’s more important to have a functional application than a good looking one.
- And last but not least: add more ways of importing data. This will be a real pain as, surprisingly, most social networks or systems are not open source and don't provide you with the data they have on you.
I hope to accomplish all the points above this year. I also know that things are constantly changing for a variety of reasons, so take it with a grain of salt.
A birthdate is composed of a day, a month and a year. Well, in an ideal world, because in practice, most of the time you don't know the year of birth. If it's the birthday of a dear friend of yours who refuses to give you her age, you will only know the day and month to celebrate her birthday every year.
This is why we have added the ability to set a date without knowing the year.
This change applies to birthdates, first met dates and deceased dates. Reminders for those dates will work the same way as before.
This feature was one of the most requested features in our issue tracker. We hope it will help you add more information about your friends and family members.
Notes can now be set as a favorite. Favorites are a great way to keep track of notes that you find interesting.
When a note is set as favorite, it will appear in a new tab on the dashboard, called
In this release, we've also released some goodies:
- Some actions in the UI now have dynamic notifications when adding/updating/deleting data.
- It's now possible to change account's owner first and last names
These changes are in the version 1.3.0 which is already in production, and as always, you can install it on a server that you own.
Adding and managing tasks is now easier than ever in Monica.
We've leveraged our work on v1.1 to allow the management of the tasks right from the contact view page, instead of having to open a new screen to enter task info, or having to wait for a page reload when you delete a task.
Also, and this is an important change, tasks now use checkboxes. Finally. This is something that we wanted to do for a long time.
These changes are in the version 1.2.0 which is already in production, and as always, you can install it on a server that you own.
Some people have one physical address and one Twitter account. Others have multiple addresses, no Twitter at all and one Quora account. It's hard to take all use cases into account, but we want to let users organize their contacts the way they want it.
A physical address, a Twitter account,... we call all these ways of contacting someone a contact field.
Starting now, you can add as many contact fields per contact as you want. Previously you could only have 5 pre-defined fields.
Each contact field has a type: it can be an email, a Facebook account, a fax number. Each account comes with 6 generic contact field types:
- Phone number
You can add or remove contact field types on your account at your leisure, and set their names as you want, in the new Personalization tab under Settings.
Each contact field type can also have a protocol associated with it. A protocol is what the browser should do when you click on a contact field. For instance, for a phone number, the
tel: protocol will tell the browser to launch the software that you use on your computer to make phone calls.
The API has been updated to support those two new concepts (contact fields and contact field types).
We've also reordered a little bit the sidebar when viewing a contact. Information about the partners and children are now at the top of the sidebar, as I believe this is a much more important information that knowing the address of the contact for instance.
These changes are in the version 1.1.0 which is already in production, and as always, you can install it on a server that you own.
Monica is finally ready for v1.0.0.
We try to follow the SemVer approach here at Monica.
Changing a major version number indicates major API changes. This is why I'm
really excited to announce the release of v1.0.0. It adds a lot of features and
will serve as a foundation for all the great things I'm planning to ship in the
coming months. Let's talk first about the features, then the technical changes
that are introduced in this version.
Monica finally has an API. Not everything is available right now through the
API, but most of the data about contacts are. A future version will bring all
the Settings and Account data as well. My goal is that everything is available
through the API. We do support Oauth 2.0 and personal tokens. Under the hood,
Laravel Passport deals with everything Oauth.
Nothing can help developers jump in a project more than a good documentation.
This is why we've also released a new documentation
portal that tries to be as exhaustive as
possible. On each page, we also indicate the date of last update, so you know
how fresh the documentation is.
It's going to be up to the developers now to be creative in using Monica's data
and do great things with it. On our end, we are working on the first official
mobile application for Monica, both for Apple and Android, but you will have
more details on this later this year.
How you've met someone (aka Introductions)
Monica's purpose is to help everyone remember important information about the
ones you care about, privately and for your eyes only. Sometimes, when you do
have a lot of contacts, it's hard to remember how and where you've met them.
This is why you can indicate how you've met someone or if you've been
introduced by another contact. You can even ask to be reminded of the
anniversary of this encounter if you want.
Mark a contact as deceased
Sometimes life is unfair and people die. We've added the possibility to mark a
contact as deceased, and indicate an optional date for this sad event.
Moreover, you can be reminded of this event if you choose to. When a contact is
marked as deceased, there is a small ⚰ next to the name of the contact
throughout the application.
Speed up the Add contacts screen
Our goal is to help you achieve what you want as fast as possible. This is why
we've added a small button on the Add contact screen to let you save the
current contact and add another one right after this one. It'll save you
Big changes under the hood
For v1.0.0, we've upgraded the codebase to Laravel 5.5, in order to take
advantage of the great Resources
functionality introduced in
this version for our API.
Thanks to @mauricew, we've also
replaced the previous front end build system based on Gulp and Bower with mix,
the default build system that ships with Laravel now. We've been able to remove
lots of dependencies, clean up the code and more importantly, make sure that
there won't be any conflicts of CSS and JS files in our pull requests in the
Version 1.0.0 is already in production, and as always, you can install it on a
server that you own.
v1.0.0 has litteraly thousands of new lines of codes. It's the product of an
healthy community. On a personal level, I feel really blessed that Monica helps
so many people. Your continuous feedback helps me tremendously to continue
working as hard as I can on this product. The upcoming months will be very
busy: lots of new features, a mobile application and other surprises. The
future will be bright for our community.
The most requested feature on Monica (since the last one) was the ability to
designate an existing contact as a significant other or a child. With 0.6.3,
this is now possible.
How does it work
When you add a significant other or a kid, you now have access to two new
- You can either create a partial contact, or a real contact when adding this
new person. A partial contact is the old way of doing things: those contacts
are not listed in the list of contacts, and you can't add specific reminders or
notes about them. A "real" contact will actually create a new contact entry for
this person, and you will be able to add their own children or significant
others to them.
- Instead of creating a new contact, you can simply link an existing contact to
be a kid or a significant other of this contact.
This change was the biggest change in the codebase so far, and the one that
took the most time. For the ones who host Monica themselves, be careful when
updating your instance - make sure you backup the database before upgrading.
Other important changes in this release
- For the ones who like polygamy, you can have more than one significant other
- New translations added: Italian, German. Thank you to the community for this.
- Add support for Markdown on the Notes and the Log calls. This will let you
use lists, for instance.
- We now support all the currencies in the world.
- A lot of bug fixes as well as some security bugfixes.
- We've started to use Tachyons as a new CSS framework.
This will gradually replace Bootstrap.
Version 0.6.3 is already in production, and as always, you can install it on a
server that you own.
If you install Monica on a server that you own, chances are that you will want
to be aware when a new version is available. With Monica 0.5.0, this is exactly
what you get.
How does this work
In short, your Monica instance will send a daily ping to
https://version.monicahq.com. The ping contains three information:
- a UUID: the unique, anonymous identifier of your instance.
- the current version of your instance
- the number of contacts in your instance.
The last information is used to know the size of the instances of the people who
download Monica. I need to know this information (and only this information) so
I can move forward with better knowledge of how people use Monica. Also, there
is no way to know who you are: the UUID is random, unique and anonymous.
The code of https://version.monicahq.com is open-source, stored
on GitHub like everything we do.
In return of this call, you will get a JSON with:
- if a new version is available as a boolean,
- what is the latest version available,
- all the release notes for each release that has been made since the version of
- the number of versions available since the version of the ping.
This information will be used in the UI. In the footer, a new link will appear
if a new version is available. If you click on this link, a popup will appear,
with the release notes of the new version.
How to disable this feature
Every feature that changes how Monica fundamentaly works can be disabled, and
this feature is no different. If you want to disable sending any information
to https://version.monicahq.com, simply add the following to your
And that's it. No information will ever leave your server. The drawback is that
you won't be able to be automatically alerted when a new release is available.
Search your contacts
You can now search your contacts with a new search box in the header. The search
will look at the following information in your contacts:
- First and last name
- Postal code
- Food preferencies
Searches should be pretty fast too. We are super excited about this feature.
Version 0.5.0 is already in production, and as always, you can install it on a
server that you own.
Keeping track of what you said to the people you care about is important. It was
already possible to store notes about your contacts. Now you can also log a
phone call, which will be super convenient to know when you last called someone
and what you talked about during this call.
Version 0.4.0 is already in production, and as always, you can install it on a
server that you own.
Note: this is a technical post.
After launching Monica on Hacker News, I received a lot of questions about why
I chose to write the tool with PHP and Laravel in particular.
I was actually surprised to receive so many questions about this topic because
I consider that a language does not matter - only counts what you do with it.
In this post I'll share why I chose PHP and Laravel and the difficulties I had
to overcome to build the first version of the product. This post is not meant
to start a war between languages.
PHP has an interesting history. A lot of great web developers, who probably do
not use PHP anymore, have learned the basics of programing with it. It was so
simple to use and get started with, and while it wasn't an elegant language, it
paved the way for making a career in web development. Then over time, PHP
became less loved, to the point where it was almost shameful to use PHP or even
say in meetups that your company was using it. Other languages, arguably more
elegant, gain a lot of popularity (Python, Ruby) thanks to wonderful frameworks
built upon them. At the same time, new PHP frameworks appeared. Symfony for
instance. But Symfony was still hard to learn and use. And then PHP died. Or so
that's what people said, ignoring apparently the fact that a lot of
business was still using it and loving it. Then PHP 5.5 was created, followed
by PHP 7, and a new framework with a weird name appeared, Laravel. And things
changed entirely in people's mindset. PHP is still not as elegant as other
popular languages, but things got a lot better. It became also fast.
But regardless of this, PHP is still the language people love to hate,
especially on Hacker News. They say PHP is not scalable. This is probably why
Facebook and Mailchimp, amongst other big names, use PHP today, at great
Why this context in mind - why did I chose PHP and Laravel?
- PHP is simple to learn, and simple to use.
- There are a lot of PHP developers out there, and if people want to work with
me on the project, there is a potential larger pool of PHP developers, at least
from where I live, than Ruby or Python developers. Also, there are a lot of
people on GitHub using PHP, and if I wanted this open source project to gain
any traction, I had to write it in a language where people with different
coding level skills could contribute easily.
- The most important thing to consider when choosing a technology stack for a
new project, is how easy it'll be to maintain it on the long run. PHP is
simple. It's easy to debug (although it could be better) and easy to scale
(although it's not my concern right now at all).
- Laravel is by far the best PHP framework I've ever used. It makes it so easy
to do complex things. It's clear that the framework has been created to start
new web applications really quickly, and it's truly a pleasure to use. But
Laravel's killer feature is the quality of the documentation, compared to other
PHP frameworks or even a lot of frameworks in other languages. Everything is
extremely well documented. I can't emphasize how important a good documentation
is (this reminds me that I should document Monica even more).
- There is a huge community around PHP and Laravel in particular: Laracasts,
Forge, Envoyer, a strong Slack community to name a few. If you need help, there
is a lot of people out there ready to give a hand.
What are the challenges I faced during the development of this project?
Overall I didn't have that many challenges while developing the current version
of Monica. It's not a complex application, and I don't have scaling challenges
as the user base is quite small still (around 7800 users total and 4300
active). But there are some implementation details that I did wrong - not
because it was bad coding practice, but because my technical skills were not
good enough to overcome those problems on the short term. Hopefully, listing
those mistakes will help others not make them - or nice people will send me
emails on how I could have fixed them.
- In an earlier versions, I used a lot of events and listeners. While the
concept is awesome, I had a lot of problems with unit testing the base classes
because to them. Moreover, the more I was using them, the more magic happened
behind the hood. I thought that people who would jump in the codebase would
struggle to understand how come some stuff happened when an object was created
for instance. In my mind events and listeners would make the application harder
to understand, so I decided to remove them all (well, 99% of them, there is
still two listeners that I need to get rid off).
- At the beginning, the database was entirely encrypted. For reasons I still
haven't understood, from time to time there were bugs with the decryption
process, leading to data I couldn't recover. Because I didn't want to deal with
this problem at this stage, I decided to remove the encryption. Moreover,
having data encrypted made it impossible to operate any kind of sorting or
search in my queries, which could have been problematic on the long run. I'm
sure there are solutions to these two problems but I wanted to focus on
creating new features instead of fixing this single one problem.
- I didn't write unit tests before launching the application. This really hurt
me bad. I don't think we should aim for 100% test coverage, but at least, have
some kind of tests for the main features of your site. Otherwise you end up
with a s**t ton of bugs that you didn't think about, and while you try to fix
it, other parts of the application are affected by your fix. This becomes
quickly a nightmare. Laravel makes unit testing super easy - I should have
taken this more seriously. Starting with the next version of Laravel, no pull
request will be merged unless there are unit tests and perhaps even functional
These are some reasons why I chose Laravel. As I said at the beginning of this
post, your project is not about the language. Unless your project is about
learning a new language, you should not spend weeks choosing a language or
framework. Stick with what you know, and just make something. Your users won't
care that your code is ugly or that you chose Python over Ruby.