SMF·ATTIO
Un prompt peut-il remplacer Attio ?
CRM et prospection — flexible-schema CRM
Bordereau de suivi des pièces
Verdict
L’argument de vente d’Attio, c’est que le modèle de données plie : tu ajoutes des objets, pas seulement des colonnes, et chaque vue suit. C’est faisable — des attributs JSONB sur Postgres avec une couche de lecture typée t’y amène — mais « faisable » veut dire ici une semaine, parce qu’un schéma modifiable à l’exécution est la partie difficile, pas le pipeline par-dessus. Les deux choses qu’un projet perso n’aura pas, c’est la capture automatique de la boîte mail et du calendrier, qui demande une application OAuth Google ou Microsoft et un entretien constant des tokens, et l’enrichissement qui remplit une fiche entreprise à partir d’un domaine.
Pièce A — Le prompt
Reçu le31.07.2026Construis un CRM mono-utilisateur dont le modèle de données est modifiable depuis l’application elle-même, pas depuis un fichier de migration.
Stack : Node avec TypeScript, Postgres, et un seul fichier Docker Compose qui lance les deux. Stocke les valeurs d’attributs dans une colonne JSONB indexée par identifiant d’attribut, et garde les définitions d’attributs dans des tables ordinaires pour qu’elles restent interrogeables.
Commence par un concepteur d’objets : je peux créer un type d’objet (Personne, Entreprise, Deal, n’importe quoi), lui donner des attributs avec un type parmi un ensemble fixe (texte, nombre, date, sélection, sélection multiple, devise, case à cocher, url, email, référence vers un autre objet), et marquer un attribut comme titre de la fiche. Changer le type d’un attribut doit passer par un écran de migration explicite qui montre combien de valeurs existantes échoueraient à la conversion et refuse de s’exécuter tant que je n’ai pas choisi ce qui leur arrive — convertir de force, vider, ou annuler. Journalise chaque changement de schéma avec un horodatage et la définition avant/après, et laisse-moi lire ce journal dans l’interface.
Fiches : crée, modifie, supprime, et relie des fiches entre types d’objets dans les deux sens, pour qu’ouvrir une Entreprise montre les Personnes qui la référencent sans que j’aie à configurer un champ inverse.
Vues : enregistre une vue nommée par type d’objet avec des filtres, un tri, et un jeu de colonnes choisi. Un type de vue est un tableau groupé par un attribut de sélection, ce qui permet de construire un pipeline sans notion spéciale de « deal ».
Ajoute une recherche plein texte sur tous les attributs texte de tous les objets, un import CSV avec un écran de mapping colonne-vers-attribut qui prévisualise les dix premières lignes avant validation, et un export CSV de n’importe quelle vue.
Écris des tests spécifiquement pour la logique de migration de type d’attribut — c’est là que les données se font détruire — et un test de bout en bout qui crée un type d’objet, ajoute une fiche, et la relit à travers une vue enregistrée.
Ne construis pas de synchro boîte mail ou calendrier, et n’appelle aucune API d’enrichissement. Dis-le dans le README plutôt que de faire une implémentation à moitié : c’est un CRM dans lequel tu tapes.
L’ouverture pré-remplit le prompt — il ne reste qu’à appuyer sur entrée.
Pièce B — Ce que tu perds
- B.1 la capture automatique des emails et du calendrier depuis ta boîte mail
- B.2 l’enrichissement d’entreprise et de personne à partir d’un domaine ou d’une adresse email
- B.3 l’édition multi-utilisateur en temps réel — deux personnes ne verront jamais le curseur l’une de l’autre
- B.4 les applications mobiles
- B.5 le catalogue d’intégrations qui pousse les fiches vers Slack, Linear et le reste
Alternatives existantes
Pièce C — Pourquoi certains continuent de payer : schema flexibility and mailbox sync
Parce qu’un CRM ne devient rentable qu’une fois qu’il n’a plus besoin d’être nourri à la main, et c’est la synchro de boîte mail d’Attio qui fait ce travail. Les équipes paient aussi pour l’assurance qu’un changement de schéma fait un mardi ne va pas corrompre les 40 000 fiches déjà dans le système.
Questions
Puis-je récupérer mes données Attio et les importer ici ?
Oui. Attio exporte chaque objet en CSV, et l’écran d’import de ce projet fait correspondre les colonnes CSV aux attributs que tu as définis. Ce qui ne passe pas, c’est l’historique email et calendrier qu’Attio a capturé pour toi, parce qu’il vit dans la copie de ta boîte mail que possède Attio, pas dans l’export des fiches.
JSONB est-il vraiment assez rapide pour un CRM ?
Pour les données d’une seule personne, largement. Les valeurs d’attribut vivent dans une colonne JSONB avec un index GIN ; filtrer sur un seul attribut à travers des dizaines de milliers de fiches reste de l’ordre de quelques millisecondes. Si tu atteins des millions de lignes, tu promouvrais les attributs les plus sollicités en vraies colonnes, mais tu n’y arriveras pas.
Que casse le changement de type d’un attribut ?
Texte vers nombre, c’est celui qui mord. L’écran de migration compte les valeurs qui ne se convertiront pas et t’oblige à choisir entre forcer, vider ou annuler avant d’écrire quoi que ce soit — ce contrôle est la raison pour laquelle ce projet est une semaine plutôt qu’un week-end.
Pourquoi la synchro de boîte mail est-elle hors périmètre plutôt qu’un objectif bonus ?
Parce que ce n’est pas une fonctionnalité, c’est un travail d’exploitation : un projet Google Cloud, un écran de consentement OAuth vérifié, des tokens de rafraîchissement qui expirent quand tu changes de mot de passe, et un abonnement push Gmail à renouveler tous les sept jours. L’éviter honnêtement vaut mieux que livrer une version qui arrête discrètement de se synchroniser.
Outils proches
Récépissé