C'est une proposition à discuter : vos retours sont attendus, notamment sur les questions ouvertes en fin de document.
- La vision en une minute
- La fiche contact, cœur du module
- Design : toute la relation sur une page
- Synchronisation bidirectionnelle avec Outlook
- E-mails : envoi et suivi type discussion
- Besoins du client : un suivi qui évolue
- Rendez-vous & interactions
- Timeline & vues chronologiques
- Champs libres multi-types & pièces jointes
- Confidentialité par donnée
- Intégration Tiime : du besoin à la facture
- Découpage en 8 lots livrables
- Questions ouvertes — votre avis compte
🧭 La vision en une minute
Astrolabe sait aujourd'hui gérer les projets, les tâches et le temps. Il lui manque la dimension relation client : qui sont nos contacts, qu'est-ce qu'on s'est dit, de quoi ont-ils besoin, et où en est-on.
Le module CRM apporte sept briques :
Un carnet d'adresses partagé, synchronisé dans les deux sens avec les contacts Outlook de chacun.
Envoi de mails depuis Astrolabe et historique des échanges présenté comme un fil de discussion.
Chaque besoin identifié est suivi dans le temps, avec son statut et l'historique de ses évolutions.
RDV, réunions, entrevues, déjeuners… associés au contact et synchronisés avec le calendrier Outlook.
Tout l'historique de la relation en un fil chronologique — par client, par collaborateur ou global.
Chaque donnée peut être privée, partagée avec certains collègues, ou visible de tous.
Du besoin gagné au devis, à la facture et au paiement — la boucle commerciale se ferme dans Tiime.
🗂️ La fiche contact, cœur du module
Chaque contact a une fiche unique, partagée par l'équipe, qui regroupe tout ce qu'on sait de lui. Aperçu de l'organisation cible :
Champs de base
- Civilité, prénom, nom, société, fonction
- E-mails et téléphones multiples (pro, perso, mobile…)
- Adresse, notes, tags libres
- Propriétaire de la fiche et visibilité par défaut
Création et modification depuis l'interface web et depuis le CLI astro
(contact:add, contact:list, contact:show…).
Liens avec les projets et les tâches
Un contact peut être relié à aucun, un ou plusieurs projets et/ou tâches Astrolabe :
- depuis la fiche contact : section « Projets & tâches liés », avec un rôle optionnel (décideur, interlocuteur technique, facturation…) ;
- depuis un projet ou une tâche : la liste des contacts liés — « qui appeler sur ce sujet » ;
- navigation croisée dans les deux sens.
🎨 Design : toute la relation sur une page
Proposition de design de la fiche client, dans la charte Astrolabe (bleu nuit, orange, turquoise, titres Bebas Neue, texte Outfit). Le principe : tout se lit sur une seule page, sans navigation intermédiaire — la timeline donne la carte, le fil donne le détail, la colonne donne les repères.
Comment ça se lit
- ① Timeline horizontale : l'axe chronologique de toute la relation, une pile de pastilles par jour (couleur = type d'événement, légende cliquable pour filtrer), les jours sans activité restant de fins traits — les creux de la relation se voient d'un coup d'œil. Au-delà de trois événements, la pile affiche « +n ». « Aujourd'hui » est à droite, souligné d'orange — exactement là où commence le fil en dessous — et les événements à venir (prochain RDV) apparaissent en pointillé après l'axe. Sélecteur de période (30 j / 90 j / 1 an / tout), survol = infobulle du jour, clic = le fil se cale sur ce jour, molette = défilement vers le passé.
- ② Fil de la relation : tous les canaux dans un seul flux, du plus récent au plus ancien, présenté comme une messagerie — e-mails entrants à gauche, sortants à droite (fond légèrement teinté), notes d'appel et cartes d'événements (RDV, besoins, factures) en pleine largeur, avatars pour identifier les personnes en un coup d'œil, pièces jointes en pastilles cliquables. La barre de filtres (type + recherche plein texte) est en tête, suivie du composeur (e-mail, note, RDV) puisque le nouveau contenu arrive en haut. Au survol d'une bulle : répondre, lier à un besoin, partager, épingler. En bas, « charger les échanges précédents » — ou remonter directement via la timeline.
- ③ Colonne de repères : la visibilité par défaut du contact en tête (§ confidentialité), puis coordonnées et tags, besoins avec statut, projets et tâches liés, fichiers et factures Tiime — chaque section a son bouton d'ajout +, et un fichier peut être déposé par glisser-déposer n'importe où sur la fiche. La colonne est sticky : elle reste visible pendant qu'on remonte le fil.
Micro-interactions & accessibilité
- Synchronisation bidirectionnelle : cliquer une pile cale le fil sur ce jour ; inversement, faire défiler le fil surligne le jour correspondant sur la timeline. On sait toujours quand on est.
- Épingles : un élément épinglé remonte dans un bandeau compact sous la timeline (décision clé, engagement pris) — la mémoire longue de la relation.
- Raccourcis clavier :
enouvel e-mail,nnote,rRDV,/recherche,↑/↓navigation dans le fil. - États vides parlants : un contact sans historique affiche directement le composeur avec « Écrivez le premier message ou importez les échanges Outlook existants ».
- Accessibilité : la couleur n'est jamais seule porteuse de sens
(icône + libellé sur chaque élément), focus clavier visible, contrastes AA sur le
bleu nuit,
prefers-reduced-motionrespecté (pas d'animation de défilement).
🔄 Synchronisation bidirectionnelle avec Outlook
Les contacts Astrolabe et les contacts Outlook restent alignés automatiquement, dans les deux sens :
- Astrolabe → Outlook : un contact créé ou modifié dans Astrolabe est poussé dans le carnet d'adresses Outlook de l'utilisateur connecté.
- Outlook → Astrolabe : un contact créé ou modifié dans Outlook est rapatrié dans Astrolabe à la synchronisation suivante.
On réutilise les mécanismes déjà en production pour le calendrier :
- table de correspondance (mapping) pour une synchro idempotente — jamais de doublon ;
- journal de synchronisation consultable depuis « Mon compte » ;
- gestion du throttling Microsoft (retries avec
Retry-After) et auto-réparation des correspondances mortes ; - conflits : la dernière modification gagne, avec trace dans le journal.
Contacts.ReadWrite s'ajoute aux autorisations actuelles. Chaque utilisateur
déjà connecté devra re-valider sa connexion Microsoft une fois (un clic).À l'import, un dédoublonnage est appliqué : clé sur l'e-mail principal, sinon nom + société.
✉️ E-mails : envoi et suivi type discussion
Depuis la fiche d'un contact, on peut écrire et envoyer un e-mail sans quitter Astrolabe (l'envoi part de la boîte Outlook de l'utilisateur, via Microsoft Graph).
Les échanges — envoyés et reçus — sont regroupés en fils de discussion chronologiques sur la fiche, comme une messagerie : expéditeur, date, objet, corps du message, pièces jointes.
Partage entre collaborateurs
- Chacun choisit, discussion par discussion : privée partagée avec certains ou visible de tous.
- La fiche offre une vue consolidée : « toutes les discussions de l'équipe avec ce client » — chacun y voit ce qui est partagé, plus ses propres échanges.
- Le rattachement d'un mail au contact est automatique (adresse e-mail), avec rattachement manuel possible.
🎯 Besoins du client : un suivi qui évolue
Chaque fiche comporte une section « Besoins du client » : la liste des besoins identifiés chez ce client, chacun suivi dans le temps.
| Attribut | Description |
|---|---|
| Titre & description | Le besoin exprimé ou détecté, reformulé par nous. |
| Statut | Identifié → Qualifié → Proposition → Gagné / Perdu / Abandonné. |
| Priorité | Haute / moyenne / basse. |
| Montant estimé | Optionnel — pour donner une vision pipeline. |
| Échéance | Optionnelle — quand le client attend une réponse. |
| Projet lié | Quand le besoin se concrétise, on le relie au projet Astrolabe créé. |
Le point clé : le besoin évolue. Chaque changement (statut, description, montant…) est journalisé avec l'auteur et la date — on peut rejouer l'histoire d'un besoin du premier contact jusqu'à sa conclusion.
📅 Rendez-vous & interactions
On peut associer au contact des événements de tout type — pas seulement des réunions formelles :
Présentiel ou visio, avec ordre du jour et compte-rendu.
Les moments informels comptent aussi dans la relation.
Point rapide, rencontre sur site, passage au bureau.
Trace d'un échange téléphonique avec ses notes.
Rencontre sur un événement, premier contact.
Type libre pour tout ce qui ne rentre pas dans les cases.
Chaque événement porte : type, titre, date et heure, lieu, participants (collaborateurs et contacts), notes / compte-rendu enrichissable après coup.
Intégration au calendrier Outlook
- Créer un RDV depuis la fiche contact → l'événement est créé dans le calendrier Outlook du collaborateur, avec invitations aux participants (on réutilise le moteur de synchro calendrier déjà en production).
- Inversement, rattacher un événement Outlook existant à un contact — rapprochement automatique par l'adresse e-mail des participants, rattachement manuel possible.
Comme toute donnée de la fiche, un rendez-vous porte sa visibilité : privé partagé ou tous.
🕒 Timeline & vues chronologiques
La timeline est la colonne vertébrale du CRM : tout ce qui s'est passé, remonté dans un fil chronologique unique — mails, rendez-vous, évolutions des besoins, notes, pièces ajoutées, liens vers les projets.
| Vue | Ce qu'elle montre |
|---|---|
| 🕒 Timeline par contact | Tout l'historique de la relation avec ce client, du premier contact à aujourd'hui. |
| 🌍 Timeline globale | Le fil d'activité CRM de toute l'équipe, tous contacts confondus. |
| 👤 Filtre par collaborateur | Mes interactions, celles d'un collègue, ou toute l'équipe — combinable avec le filtre par contact. |
| 📆 Vue calendrier | Les rendez-vous passés et à venir, par collaborateur ou pour l'équipe. |
| 📊 Vue pipeline (kanban) | Les besoins clients par statut, glisser-déposer pour faire avancer un besoin. |
| ⏰ Vue relances | Les contacts sans interaction depuis X jours, triés par ancienneté — qui recontacter en priorité. |
| 🏢 Vue par société | L'activité agrégée par client (si la notion de société est retenue, cf. questions ouvertes). |
🧩 Champs libres multi-types & pièces jointes
Au-delà des champs classiques, on peut ajouter n'importe quelle donnée à une fiche contact :
Texte riche / markdown : contexte, compte-rendu, mémo.
Photo de tableau blanc, capture d'écran, plan — aperçu direct.
Débrief dicté après un rendez-vous — lecteur intégré.
Démo, enregistrement d'atelier — lecteur intégré.
Tout document : PDF, tableur, archive…
URL, échéance, indicateur chiffré : les types s'étendent facilement.
Pièces jointes
- Upload de fichiers directement sur la fiche, indépendamment des champs libres.
- Stockage sur le serveur hors zone web publique, téléchargement uniquement via l'API authentifiée — jamais de lien public.
- Limites configurables : taille maximale, types de fichiers autorisés.
🔐 Confidentialité par donnée
Chaque donnée d'une fiche — champ libre, pièce jointe, discussion, besoin, note, rendez-vous — porte sa propre visibilité :
| Visibilité | Qui voit ? | Exemple d'usage |
|---|---|---|
| Privé | Moi uniquement | Note personnelle sur la négociation, brouillon d'analyse. |
| Partagé | Les collaborateurs que je choisis | Échanges sensibles partagés avec le binôme sur le compte. |
| Tous | Toute l'équipe | Coordonnées, historique standard, besoins en cours. |
Deux ergonomies complémentaires, réglables par contact :
- Tout partager par défaut, et marquer confidentielles seulement certaines données ;
- ou l'inverse : tout privé par défaut, et ouvrir explicitement ce qu'on partage.
💶 Intégration Tiime : du besoin à la facture
Tiime est notre outil de facturation et de comptabilité : le CRM doit s'y articuler pour fermer la boucle besoin → devis → facture → paiement, sans double saisie.
Liens nécessaires (le socle)
- Rapprochement clients : lier un contact/une société Astrolabe au client Tiime correspondant (rapprochement assisté par nom, SIREN ou e-mail, validation manuelle). C'est le prérequis de tout le reste.
- Factures sur la fiche : les factures Tiime du client apparaissent sur sa fiche et dans sa timeline — numéro, montant, statut payée / envoyée / en retard.
Liens possibles (la valeur ajoutée, par étapes)
Un besoin qui passe en « Proposition » génère le devis Tiime pré-rempli ; son acceptation bascule le besoin en « Gagné ».
Pré-remplir la facture Tiime à partir des heures/jours Astrolabe du projet lié — le pont temps → facturation.
Les factures en retard remontent dans la vue « relances », à côté des relances commerciales.
CA facturé (Tiime) vs temps passé (Astrolabe) par client et par projet ; pipeline pondéré vs facturé réel.
🚀 Découpage en 8 lots livrables
Chaque lot est utilisable dès sa livraison, sans attendre les suivants :
CRUD web + CLI, migrations, vue liste et fiche détail, liens contacts ↔ projets/tâches (0-n). Le carnet d'adresses partagé existe.
Périmètre Contacts.ReadWrite, mapping idempotent, gestion des conflits, dédoublonnage.
Section « Besoins », statuts, priorités, historique d'évolution journalisé, lien vers les projets.
Stockage de fichiers sécurisé, champs multi-types (note, image, audio, vidéo, fichier, lien…).
Visibilités privé / partagé / tous, visibilité par défaut par contact, filtrage API systématique.
Envoi depuis Astrolabe, fils de discussion, rattachement automatique, partage entre collaborateurs.
Événements multi-types liés aux contacts, synchro calendrier Outlook, timeline par contact et globale, vues calendrier, pipeline et relances.
Rapprochement clients et factures sur la fiche/timeline, puis devis depuis les besoins, facturation du temps saisi, relances de paiement et rentabilité (sous réserve de l'accès API).
❓ Questions ouvertes — votre avis compte
- Sociétés ou contacts ? Faut-il une notion de « société / compte client » fédérant plusieurs contacts (Mme Charpentier et M. Roux chez Hélios), ou des contacts indépendants suffisent-ils au départ ?
- Contact synchronisé par plusieurs collègues : si deux personnes ont le même contact dans leur Outlook, on propose une fiche Astrolabe unique avec un mapping par utilisateur. D'accord ?
- Historique des mails : rapatrier tout l'historique existant avec le contact, ou seulement les échanges à partir de l'activation du module ?
- Stockage : quel quota raisonnable pour les pièces jointes et les champs média (audio/vidéo) par contact ?
- Contenu de la timeline : doit-elle inclure aussi les événements des projets liés (jalons franchis, tâches livrées), ou seulement les interactions directes avec le client ?
- Tiime : quel accès à leurs données ? (les contacter pour une API partenaire ; sinon repli exports/imports). Et qui voit les montants facturés — tout le monde, ou visibilité restreinte par défaut ?
La spécification complète (modèle de données, architecture technique) est suivie dans l'issue GitHub dédiée :
Issue #67 — CRM : module Contacts →