Monica v3 arrive avant la fin de 2026. Reconstruite de zéro. Toujours open source. Découvrir ce qui arrive
Monica

Blog

Notes sur la construction de Monica, sur la confidentialité des données personnelles et sur la petite mécanique du fait de rester en contact.

Flux RSS

Page 4 sur 5

2 min de lecture
Les champs de contact multiples arrivent
Regis Freyd

Certaines personnes ont une adresse postale et un compte Twitter. D'autres ont plusieurs adresses, pas de Twitter du tout et un compte Quora. Il est difficile de prévoir tous les cas de figure, mais nous voulons laisser chacun organiser ses contacts comme il l'entend.

Une adresse postale, un compte Twitter... nous appelons toutes ces façons de joindre quelqu'un un champ de contact.

À partir de maintenant, vous pouvez ajouter autant de champs de contact que vous voulez par contact. Auparavant, vous n'aviez droit qu'à 5 champs prédéfinis.

La fiche d'un contact avec l'adresse e-mail, l'adresse postale, la rencontre et les informations professionnelles sur le côté.

Chaque champ de contact a un type : cela peut être un email, un compte Facebook, un numéro de fax. Chaque compte est livré avec 6 types de champs génériques :

  • Email
  • Numéro de téléphone
  • Facebook
  • Twitter
  • Whatsapp
  • Telegram

Vous pouvez ajouter ou supprimer des types de champs de contact sur votre compte à votre guise, et les nommer comme vous le souhaitez, dans le nouvel onglet Personnalisation des réglages.

Chaque type de champ de contact peut aussi être associé à un protocole. Un protocole indique au navigateur ce qu'il doit faire quand vous cliquez sur un champ de contact. Pour un numéro de téléphone, par exemple, le protocole tel: demandera au navigateur de lancer le logiciel que vous utilisez sur votre ordinateur pour passer des appels.

L'écran de réglages listant les types de champs de contact, chacun avec le protocole utilisé par ses liens.

L'API a été mise à jour pour prendre en charge ces deux nouveaux concepts (les champs de contact et les types de champs de contact).

Nous avons aussi légèrement réorganisé la barre latérale de la fiche d'un contact. Les informations sur les conjoints et les enfants sont maintenant en haut, car je pense qu'elles comptent bien plus que l'adresse du contact, par exemple.

Ces changements sont dans la version 1.1.0, déjà en production, et comme toujours vous pouvez l'installer sur un serveur qui vous appartient.

Bonne découverte !

4 min de lecture
Monica 1.0.0 avec l'API, les rencontres et les contacts décédés
Regis Freyd

Monica est enfin prête pour la v1.0.0.

Chez Monica, nous essayons de suivre l'approche SemVer. Changer de version majeure signale des changements majeurs dans l'API. C'est pourquoi je suis vraiment heureux d'annoncer la sortie de la v1.0.0. Elle ajoute beaucoup de fonctionnalités et servira de socle à toutes les belles choses que je prévois de livrer dans les mois à venir. Parlons d'abord des fonctionnalités, puis des changements techniques introduits dans cette version.

L'API

Monica a enfin une API. Tout n'est pas encore accessible, mais la plupart des données concernant les contacts le sont. Une version future apportera aussi les réglages et les données du compte. Mon objectif est que tout soit disponible via l'API. Nous prenons en charge OAuth 2.0 et les jetons personnels. En coulisses, Laravel Passport gère tout ce qui touche à OAuth.

Rien n'aide autant les développeurs à se lancer dans un projet qu'une bonne documentation. C'est pourquoi nous publions également un nouveau portail de documentation qui se veut le plus exhaustif possible. Sur chaque page, nous indiquons la date de dernière mise à jour, pour que vous sachiez à quel point elle est fraîche.

La page d'accueil de la documentation de l'API de Monica.

Ce sera maintenant aux développeurs de faire preuve de créativité avec les données de Monica. De notre côté, nous travaillons sur la première application mobile officielle de Monica, pour Apple comme pour Android, mais vous en saurez plus d'ici la fin de l'année.

Comment vous avez rencontré quelqu'un

Monica a pour but d'aider chacun à se souvenir d'informations importantes sur les personnes qui comptent, en privé et pour vos yeux seulement. Quand on a beaucoup de contacts, il est parfois difficile de se rappeler comment et où on les a rencontrés. Vous pouvez désormais indiquer comment vous avez rencontré quelqu'un, ou si un autre contact vous a présentés. Vous pouvez même demander à être rappelé de l'anniversaire de cette rencontre.

Le panneau « comment vous vous êtes rencontrés » d'un contact : qui vous a présentés, quand et où.

Marquer un contact comme décédé

La vie est parfois injuste et les gens meurent. Nous avons ajouté la possibilité de marquer un contact comme décédé et d'indiquer une date facultative pour ce triste événement. Vous pouvez aussi choisir d'être rappelé de cette date. Quand un contact est marqué comme décédé, un petit ⚰ apparaît à côté de son nom dans toute l'application.

Un contact marqué comme décédé, avec un cercueil à côté du nom et la date sur la fiche.

Un écran d'ajout de contact plus rapide

Notre objectif est de vous aider à faire ce que vous voulez le plus vite possible. Nous avons donc ajouté un petit bouton sur l'écran d'ajout de contact pour enregistrer le contact en cours et en ajouter un autre dans la foulée. Cela vous fera gagner de précieuses secondes.

De gros changements en coulisses

Pour la v1.0.0, nous avons mis le code à niveau vers Laravel 5.5, afin de profiter de l'excellente fonctionnalité Resources introduite dans cette version pour notre API.

Grâce à @mauricew, nous avons aussi remplacé l'ancien système de build front-end basé sur Gulp et Bower par mix, le système de build livré par défaut avec Laravel. Nous avons pu supprimer beaucoup de dépendances, nettoyer le code et, surtout, garantir qu'il n'y aura plus de conflits sur les fichiers CSS et JS dans nos futures pull requests.

Pour finir

La version 1.0.0 est déjà en production et, comme toujours, vous pouvez l'installer sur un serveur qui vous appartient.

La v1.0.0 représente littéralement des milliers de nouvelles lignes de code. C'est le fruit d'une communauté en bonne santé. Sur un plan personnel, je me sens très chanceux que Monica aide autant de monde. Vos retours continus m'aident énormément à travailler aussi dur que possible sur ce produit. Les mois qui viennent seront très chargés : beaucoup de nouvelles fonctionnalités, une application mobile et d'autres surprises. L'avenir sera radieux pour notre communauté.

Bonne découverte !

2 min de lecture
Point d'étape, septembre 2017
Regis Freyd

J'ai été un peu moins actif côté communication ces 40 derniers jours. Je suis aussi plus lent à répondre aux tickets et à intégrer les pull requests. Cette situation ne me plaît pas, mais il me sera difficile de la changer dans le mois qui vient. Cela ira mieux ensuite.

Qu'est-ce que je fabrique en ce moment

Je travaille autant que possible sur le projet. Chaque heure libre dont je dispose est investie dans Monica. Pour rassurer toutes les personnes qui m'écrivent au sujet de mon engagement et du risque de voir le projet mourir : je suis toujours aussi motivé qu'avant et cela reste une priorité pour moi.

En ce moment, je travaille cependant sur l'API et je m'assure qu'elle fonctionne comme elle le devrait. Je construis aussi la documentation autour, car cette documentation doit être excellente pour que les gens utilisent l'API. Pour ces raisons, et aussi parce que cela reste un projet parallèle tant que je n'aurai pas trouvé le moyen d'en faire mon métier à plein temps, je ne veux pas être distrait par les retours, les bugs ou les nouvelles fonctionnalités pour l'instant. Dès que l'API sera terminée, je reviendrai vers la communauté. Malheureusement, je n'ai tout simplement pas le temps de faire tout ce que j'aimerais faire, et je dois me concentrer avec beaucoup de fermeté si je veux avancer.

La suite

Dans les prochains jours, une première version de l'API sera publiée, avec de nouvelles méthodes ajoutées ensuite.

Une fois l'API terminée, nous devrons soigner la notion d'activités partagées avec vos contacts. Nous devrions aussi rendre le tableau de bord plus utile et transformer le journal pour qu'il devienne vraiment utile. Il faudra également implémenter le protocole CardDAV, même si je ne sais pas encore à quel point il s'intégrera bien dans la pile actuelle.

Je suis convaincu que ce projet a un potentiel énorme. Si vous êtes déjà utilisateur, je cherche toujours des retours et des témoignages. Merci pour votre aide.

2 min de lecture
Monica 0.6.3 avec une meilleure gestion des contacts et le Markdown
Regis Freyd

La fonctionnalité la plus demandée sur Monica (depuis la précédente) était la possibilité de désigner un contact existant comme conjoint ou comme enfant. Avec la 0.6.3, c'est désormais possible.

Comment cela fonctionne

Quand vous ajoutez un conjoint ou un enfant, vous avez accès à deux nouvelles choses :

  • Vous pouvez créer soit un contact partiel, soit un vrai contact au moment d'ajouter cette personne. Un contact partiel correspond à l'ancien fonctionnement : ces contacts n'apparaissent pas dans la liste des contacts et vous ne pouvez pas leur ajouter de rappels ou de notes spécifiques. Un « vrai » contact crée une véritable fiche pour cette personne, à laquelle vous pourrez ajouter ses propres enfants ou conjoints.

Le formulaire d'ajout du conjoint d'un contact, avec l'option de lui créer sa propre fiche.

  • Au lieu de créer un nouveau contact, vous pouvez simplement relier un contact existant comme enfant ou conjoint de ce contact.

Le même formulaire sur son autre onglet, qui relie un contact existant comme conjoint.

Ce changement est le plus important qu'ait connu le code jusqu'ici, et celui qui a demandé le plus de temps. Pour celles et ceux qui hébergent Monica eux-mêmes, soyez prudents lors de la mise à jour de votre instance : sauvegardez bien la base de données avant de mettre à niveau.

Autres changements importants de cette version

  • Pour les adeptes de la polygamie, vous pouvez avoir plusieurs conjoints par contact.
  • Nouvelles traductions : italien, allemand. Merci à la communauté.
  • Prise en charge du Markdown dans les notes et les appels enregistrés. Vous pouvez ainsi utiliser des listes, par exemple.
  • Nous prenons désormais en charge toutes les devises du monde.
  • Beaucoup de corrections de bugs, dont des correctifs de sécurité.
  • Nous avons commencé à utiliser Tachyons comme nouveau framework CSS. Il remplacera progressivement Bootstrap.

Pour finir

La version 0.6.3 est déjà en production et, comme toujours, vous pouvez l'installer sur un serveur qui vous appartient.

Bonne découverte !

1 min de lecture
50 000 contacts
Regis Freyd

Nous venons d'atteindre un cap incroyable.

Des ballons devant un mur, avec la légende : 50 000 contacts sont gérés avec Monica.

C'est formidable et c'est un cap que je voulais partager avec vous tous. Les utilisateurs ont enregistré plus de 50 000 contacts sur Monica jusqu'ici, et le chiffre grandit chaque jour. Cela ne comprend pas les instances téléchargées et installées sur des serveurs personnels.

Sur un plan plus personnel, la communauté autour du projet m'épate. Sur GitHub, nous avons reçu plus de 200 pull requests de la communauté et les gens semblent partager le projet un peu partout sur Internet pour faire passer le mot.

J'ai hâte de voir où nous en serons dans un an. Merci à tous pour votre confiance.

2 min de lecture
Monica 0.5.0 avec le suivi des versions et la recherche
Regis Freyd

Si vous installez Monica sur un serveur qui vous appartient, vous voudrez sans doute être prévenu quand une nouvelle version sort. Avec Monica 0.5.0, c'est exactement ce que vous obtenez.

Comment cela fonctionne

En résumé, votre instance Monica envoie un ping quotidien à https://version.monicahq.com. Ce ping contient trois informations :

  • un UUID : l'identifiant unique et anonyme de votre instance,
  • la version actuelle de votre instance,
  • le nombre de contacts de votre instance.

La dernière information sert à connaître la taille des instances des personnes qui téléchargent Monica. J'ai besoin de cette information (et uniquement de celle-là) pour avancer en sachant mieux comment les gens utilisent Monica. Par ailleurs, il n'y a aucun moyen de savoir qui vous êtes : l'UUID est aléatoire, unique et anonyme.

Le code de https://version.monicahq.com est open source, hébergé sur GitHub comme tout ce que nous faisons.

En retour de cet appel, vous recevez un JSON avec :

  • un booléen indiquant si une nouvelle version est disponible,
  • la dernière version disponible,
  • toutes les notes de version de chaque publication faite depuis la version du ping,
  • le nombre de versions parues depuis la version du ping.

Ces informations sont utilisées dans l'interface. Dans le pied de page, un nouveau lien apparaît si une version est disponible. En cliquant dessus, une fenêtre s'ouvre avec les notes de la nouvelle version.

Le pied de page de Monica, affichant le numéro de version et une pastille annonçant qu'une nouvelle version est disponible.

Comment désactiver cette fonctionnalité

Toute fonctionnalité qui change le fonctionnement fondamental de Monica peut être désactivée, et celle-ci ne fait pas exception. Si vous ne voulez envoyer aucune information à https://version.monicahq.com, ajoutez simplement ceci à votre fichier .env :

  • CHECK_VERSION=false

Et c'est tout. Aucune information ne quittera jamais votre serveur. L'inconvénient est que vous ne serez plus averti automatiquement quand une nouvelle version paraît.

Chercher dans vos contacts

Vous pouvez désormais chercher vos contacts grâce à un nouveau champ de recherche dans l'en-tête. La recherche porte sur les informations suivantes :

  • Prénom et nom
  • Email
  • Rue
  • Ville
  • Code postal
  • Province
  • Préférences alimentaires
  • Métier
  • Entreprise

Les recherches devraient aussi être plutôt rapides. Nous sommes très heureux de cette fonctionnalité.

Les résultats de recherche qui apparaissent à la frappe, listant les contacts dont le nom correspond.

Pour finir

La version 0.5.0 est déjà en production et, comme toujours, vous pouvez l'installer sur un serveur qui vous appartient.

Bonne découverte !

1 min de lecture
Monica 0.4.0 avec les appels téléphoniques
Regis Freyd

Garder une trace de ce que vous avez dit aux personnes qui comptent pour vous est important. Il était déjà possible d'enregistrer des notes sur vos contacts. Vous pouvez maintenant consigner aussi un appel téléphonique, ce qui est très pratique pour savoir quand vous avez appelé quelqu'un pour la dernière fois et de quoi vous avez parlé.

Le panneau des appels d'un contact, vide, proposant de consigner un appel.

La fenêtre pour consigner un appel, demandant de quoi vous avez parlé.

Un appel consigné sur la fiche d'un contact, avec sa date et ce qui s'est dit.

La version 0.4.0 est déjà en production et, comme toujours, vous pouvez l'installer sur un serveur qui vous appartient.

Bonne découverte !

6 min de lecture
Pourquoi Laravel ?
Regis Freyd

Note : cet article est technique.

Après avoir lancé Monica sur Hacker News, j'ai reçu beaucoup de questions sur les raisons qui m'ont poussé à écrire l'outil en PHP, et avec Laravel en particulier. J'ai été surpris d'en recevoir autant sur ce sujet, car je considère qu'un langage n'a pas d'importance : seul compte ce que l'on en fait.

Dans cet article je vais expliquer pourquoi j'ai choisi PHP et Laravel, et quelles difficultés j'ai dû surmonter pour construire la première version du produit. Ce texte n'a pas vocation à déclencher une guerre entre langages.

PHP a une histoire intéressante. Beaucoup d'excellents développeurs web, qui n'utilisent probablement plus PHP aujourd'hui, y ont appris les bases de la programmation. Il était si simple à prendre en main et, même sans être un langage élégant, il a ouvert la voie à des carrières dans le web. Puis, avec le temps, PHP a été de moins en moins aimé, au point qu'il devenait presque honteux de l'utiliser ou même de dire en meetup que son entreprise s'en servait. D'autres langages, sans doute plus élégants, ont gagné en popularité (Python, Ruby) grâce à d'excellents frameworks. En parallèle, de nouveaux frameworks PHP sont apparus. Symfony par exemple. Mais Symfony restait difficile à apprendre et à utiliser. Et puis PHP est mort. Du moins c'est ce que l'on disait, en ignorant apparemment qu'énormément d'entreprises l'utilisaient encore et l'appréciaient. Ensuite PHP 5.5 est arrivé, puis PHP 7, et un nouveau framework au nom étrange est apparu : Laravel. Et les mentalités ont complètement changé. PHP n'est toujours pas aussi élégant que d'autres langages populaires, mais les choses se sont beaucoup améliorées. Il est aussi devenu rapide.

Malgré tout, PHP reste le langage que les gens adorent détester, surtout sur Hacker News. On dit qu'il ne passe pas à l'échelle. C'est probablement pour cela que Facebook et Mailchimp, entre autres grands noms, utilisent PHP aujourd'hui, à très grande échelle.

Avec ce contexte en tête, pourquoi ai-je choisi PHP et Laravel ?

  • PHP est simple à apprendre et simple à utiliser.
  • Il y a beaucoup de développeurs PHP, et si des gens veulent travailler avec moi sur le projet, le vivier de développeurs PHP est potentiellement plus large, au moins là où je vis, que celui des développeurs Ruby ou Python. Il y a aussi beaucoup de monde sur GitHub qui utilise PHP, et si je voulais que ce projet open source prenne, je devais l'écrire dans un langage où des personnes de niveaux très variés pourraient contribuer facilement.
  • La chose la plus importante quand on choisit une pile technique pour un nouveau projet, c'est la facilité à le maintenir sur la durée. PHP est simple. Il est facile à déboguer (même si cela pourrait être mieux) et facile à faire grossir (même si ce n'est pas du tout ma préoccupation aujourd'hui).
  • Laravel est de loin le meilleur framework PHP que j'aie utilisé. Il rend les choses complexes très simples. On sent que le framework a été créé pour démarrer de nouvelles applications web très vite, et c'est un vrai plaisir à utiliser. Mais sa fonctionnalité imbattable, c'est la qualité de la documentation, comparée aux autres frameworks PHP et même à beaucoup de frameworks dans d'autres langages. Tout est extrêmement bien documenté. Je ne dirai jamais assez à quel point une bonne documentation compte (ce qui me rappelle que je devrais documenter Monica davantage).
  • Il y a une immense communauté autour de PHP et de Laravel en particulier : Laracasts, Forge, Envoyer, une communauté Slack très active, pour ne citer qu'eux. Si vous avez besoin d'aide, beaucoup de monde est prêt à vous en donner.

Quels défis ai-je rencontrés pendant le développement de ce projet ?

Globalement je n'ai pas eu tant de difficultés en développant la version actuelle de Monica. Ce n'est pas une application complexe, et je n'ai pas de problèmes de montée en charge car la base d'utilisateurs reste modeste (environ 7800 utilisateurs au total, 4300 actifs). Mais certains détails d'implémentation sont mauvais, non par mauvaise pratique, mais parce que mes compétences techniques n'étaient pas suffisantes pour résoudre ces problèmes à court terme. J'espère que lister ces erreurs aidera d'autres personnes à ne pas les commettre, ou que des gens bienveillants m'écriront pour me dire comment j'aurais pu les corriger.

  • Dans les premières versions, j'utilisais beaucoup d'événements et de listeners. Le concept est formidable, mais j'ai eu énormément de mal à tester unitairement les classes de base à cause d'eux. De plus, plus je les utilisais, plus la magie opérait en coulisses. Je me suis dit que les personnes plongeant dans le code auraient du mal à comprendre pourquoi certaines choses se produisaient à la création d'un objet, par exemple. Dans mon esprit, les événements et les listeners rendaient l'application plus difficile à comprendre, alors j'ai décidé de tous les supprimer (enfin, 99 % d'entre eux, il reste deux listeners dont je dois me débarrasser).
  • Au début, la base de données était entièrement chiffrée. Pour des raisons que je n'ai toujours pas comprises, il y avait de temps en temps des bugs dans le déchiffrement, ce qui menait à des données irrécupérables. Comme je ne voulais pas traiter ce problème à ce stade, j'ai décidé de retirer le chiffrement. Par ailleurs, des données chiffrées rendaient impossible tout tri ou toute recherche dans mes requêtes, ce qui aurait posé problème sur la durée. Il existe sûrement des solutions à ces deux problèmes, mais je voulais me concentrer sur de nouvelles fonctionnalités plutôt que sur celui-ci.
  • Je n'ai pas écrit de tests unitaires avant de lancer l'application. Cela m'a vraiment coûté cher. Je ne pense pas qu'il faille viser 100 % de couverture, mais il faut au moins des tests pour les fonctionnalités principales de son site. Sinon on se retrouve avec une tonne de bugs auxquels on n'avait pas pensé et, en essayant de les corriger, d'autres parties de l'application sont touchées par le correctif. Cela devient vite un cauchemar. Laravel rend les tests unitaires très faciles : j'aurais dû prendre cela plus au sérieux. À partir de la prochaine version, aucune pull request ne sera fusionnée sans tests unitaires, voire sans tests fonctionnels.

Conclusion

Voilà quelques raisons pour lesquelles j'ai choisi Laravel. Comme je le disais au début, votre projet ne se résume pas au langage. À moins que votre projet ne soit précisément d'apprendre un nouveau langage, vous ne devriez pas passer des semaines à choisir un langage ou un framework. Restez sur ce que vous connaissez et construisez quelque chose. Vos utilisateurs se moquent que votre code soit laid ou que vous ayez choisi Python plutôt que Ruby.

1 min de lecture
Monica 0.3.0 avec les tags
Regis Freyd

Seulement 5 jours après la v0.2.0 et déjà une autre grosse version. Assez grosse pour mériter un nouveau numéro.

Quand vous avez beaucoup de contacts dans votre compte, vous pouvez désormais les classer avec des tags. Les tags fonctionnent comme des dossiers, sauf qu'un contact peut en avoir plusieurs. Vous gardez ainsi une souplesse maximale pour organiser vos contacts comme vous le souhaitez.

L'écran de gestion des tags de Monica, vide, expliquant que les tags fonctionnent comme des dossiers.

Les tags se saisissent juste sous le nom du contact.

Des tags saisis sur la fiche d'un contact, juste sous son nom.

Une fois les contacts taggés, vous voyez leurs tags dans la liste des contacts, et vous pouvez cliquer dessus pour filtrer la liste.

La liste des contacts filtrée sur les deux contacts portant le tag famille.

Enfin, vous pouvez supprimer des tags depuis la vue d'un contact ou depuis un nouveau panneau de réglages créé pour cela.

Les réglages des tags, listant chaque tag avec le nombre de contacts qui l'utilisent.

La version 0.3.0 est déjà en production et, comme toujours, vous pouvez l'installer sur un serveur qui vous appartient.

Bonne découverte !

1 min de lecture
Monica 0.2.0 avec vCard
Regis Freyd

L'une des fonctionnalités les plus demandées est la possibilité d'importer ses contacts depuis Google. Google permet d'exporter les données de vos contacts au format vCard, le standard universel d'échange d'informations de contact. Monica 0.2.0 ajoute la possibilité d'importer vos données depuis un fichier vCard (.vcard ou .vcf), pour remplir votre compte avec la plupart de vos données au lieu d'ajouter vos amis un par un.

L'écran d'import de Monica avant tout import, proposant de récupérer des contacts depuis un fichier vCard.

Juste après l'import de vos contacts, vous êtes redirigé vers un tableau de bord où vous pouvez suivre l'état de l'import. Comme certains utilisateurs peuvent avoir des milliers de contacts, Monica les importe de façon asynchrone. Il faudra patienter un peu avant que tous les contacts soient importés.

La liste des imports vCard passés, chacun avec le nombre de contacts importés et ignorés.

Vous pouvez cliquer sur un import précis pour voir ce qui s'est passé.

Un rapport d'import listant chaque contact du fichier, marqué importé ou ignoré.

Nous avons aussi ajouté la possibilité de réinitialiser votre compte, bien pratique si vous importez des milliers de contacts et que quelque chose se passe mal. Réinitialiser un compte supprime tout, sauf vous.

La version 0.2.0 est déjà en production et, comme toujours, vous pouvez l'installer sur un serveur qui vous appartient.

Bonne découverte !