
Saisissez un domaine, comme le tutorat IA ou le reporting CSRD, et obtenez en moins d’une minute un graphe de connaissances interactif de ses concepts, de ses clusters de recherche et de ses opportunités produit, construit à partir de données ouvertes. Développé en solo nov. 2025 – mai 2026, puis repensé et renommé Axonis en octobre 2026 ; 254 tests automatisés, WCAG 2.2 AA, €0/mois
- Problème
- L’orientation dans un domaine le premier jour coûte des heures de recherche éparpillée aux product managers ; les données ouvertes existent, mais aucun outil ne les assemble en carte
- Insight
- La couche manquante n’est pas la visualisation mais le raisonnement sur les opportunités — scorer les clusters où la recherche est dense et les produits rares
- Solution
- J’ai construit (en solo, end-to-end) un outil qui transforme Wikidata + OpenAlex en graphe interactif, fiches d’opportunité notées et brief en moins d’une minute
- Résultat
- En ligne sur axonis.app ; 254 tests automatisés, WCAG 2.2 AA, €0/mois — projet portfolio, pas encore d’utilisateurs externes
Chaque nouvelle initiative commence par le même travail de débroussaillage non structuré
L’orientation le premier jour dans un domaine inconnu coûte des heures de recherche éparpillée aux product managers et aux chercheurs. Les données nécessaires pour répondre à « de quoi est constitué cet espace ? » existent déjà dans des jeux de données ouverts et librement licenciés — Wikidata et OpenAlex — mais aucun outil ne les assemble en quelque chose de navigable. Les assistants IA répondent en paragraphes, et dans un paragraphe on ne repère pas un cluster, ni l’endroit où personne ne travaille encore.
La couche manquante n’est pas la visualisation — c’est la base, un acquis. C’est le raisonnement sur les opportunités : scorer les clusters où la recherche est dense et les produits rares
Le point d’entrée : ouvrez une carte de démonstration prête et voyez un manque en quelques secondes, ou saisissez un sujet et le pipeline démarre en arrière-plan. La sphère de lettres, à droite, se fait glisser et tourner
Quatorze outils évalués ; aucun ne raisonne sur les opportunités
S’agissant d’un projet mené en autonomie, la découverte a consisté en une étude structurée du paysage concurrentiel et du dogfooding — pas un programme d’entretiens utilisateurs externes, et ce cas l’assume explicitement. J’ai évalué quatorze outils répartis en quatre catégories (graphes de citations d’articles, assistants IA de recherche, applications de notes/graphes relationnels et plateformes d’intelligence de marché) et noté chacun sur cinq capacités : ingestion automatique de données ouvertes, graphe entité-relation, détection d’opportunités, sortie structurée et synthèse IA.
Le constat était toujours le même : les outils de graphes d’articles (Connected Papers, ResearchRabbit) ont le graphe mais uniquement sur les publications, et ne font aucun raisonnement sur les opportunités. Les assistants IA (Elicit, Consensus, Perplexity) synthétisent en prose citée — sortie solide, pas de graphe d’entités navigable. Les canevas de graphes de notes (Obsidian, Roam, Kumu) produisent de superbes graphes mais exigent que vous créiez chaque nœud vous-même, ce qui est inutile le premier jour dans un nouveau domaine. Les plateformes d’intelligence de marché (Crayon, Klue) suivent les concurrents, pas les domaines conceptuels. Aucun des quatorze ne réunissait les trois : ingestion automatique de données ouvertes + un vrai graphe entité-relation + raisonnement sur les opportunités produit.
S’orienter → trouver la structure → repérer les ouvertures → transmettre
Le backend exécute à la demande un pipeline en neuf étapes : Groq développe le sujet en ~8 termes de recherche ; Wikidata et OpenAlex sont interrogés en parallèle ; rapidfuzz déduplique les entités à un seuil de similarité de 88 ; NetworkX calcule la centralité de degré et d’intermédiarité ; la détection de communautés Louvain regroupe les nœuds en clusters ; un modèle de scoring d’opportunités pondère la taille, la densité de recherche, le manque de produits et le potentiel de pont ; Groq rédige des fiches d’opportunité narratives pour les cinq meilleurs clusters, avec un repli déterministe sur des templates. Les articles sont choisis d’abord par pertinence, ensuite par citations, un appel au modèle écarte les homonymes avant qu’ils n’entrent dans le graphe, et les institutions de leurs auteurs s’ajoutent comme les acteurs de la recherche. Chaque nœud porte une description d’une ligne tirée d’OpenAlex ou de Wikidata. Pendant la construction, l’écran affiche l’étape réelle, les compteurs et un journal horodaté tels que le serveur les rapporte, puis dessine le graphe enregistré avant même que les fiches IA soient prêtes.
Les quatre vues qui suivent le graphe correspondent exactement au flux d’exploration : le graphe à base de physique pour s’orienter (faites glisser un nœud, tout le graphe réagit), Clusters pour trouver la structure (communautés Louvain classées par score d’opportunité), Opportunities pour repérer les ouvertures (fiches avec badges de risque, pourquoi c’est important, une jauge de solidité des preuves et le détail de la composition du score), et un Research Brief en un clic pour la transmission — HTML rendu, téléchargeable en .md, imprimable en PDF. Ask the map répond aux questions sur le domaine avec des renvois [n] en ligne ; survolez-en un et son nœud s’allume sur le graphe.

En direct — saisissez un domaine et explorez le graphe
Clusters
Opportunities
Research Brief
Bottom sheet sur mobile
Axonis : un seul accent, une progression réelle, un graphe qu’on peut interroger
En octobre 2026, le produit a reçu son propre nom et son domaine, Axonis, ainsi qu’un nouveau design system. À partir d’un moodboard de 162 images, j’ai réalisé huit concepts et j’en ai retenu un : sombre, un seul accent magenta, Martian Mono avec Mona Sans, des contrôles carrés entre crochets. L’espacement vient d’une seule référence mesurée, l’application Railway : son échelle de 8, 16, 24, 32 et 48, une barre supérieure de 54 px et un inspecteur de 360 px. Chaque élément a été rattaché à une référence avant d’être dessiné, et la bibliothèque Figma est construite en atomes, molécules et organismes.
La refonte a aussi corrigé quelque chose que l’ancienne version faisait mal en silence. Sa checklist de construction avançait sur une minuterie de 3,8 secondes, si bien qu’une étape pouvait être cochée avant que le serveur l’ait atteinte. Le serveur rapporte maintenant son étape réelle, ses compteurs et ses événements, et l’écran n’affiche que cela. Tant que rien n’est rapporté, les étapes sont présentées comme l’ordre habituel, sans coches.
Chaque coche, chaque compteur et chaque ligne du journal viennent du serveur. L’aperçu ne démarre qu’une fois les nouvelles entités enregistrées, si bien qu’une reconstruction ne montre jamais l’ancienne carte
⌘K : aller à n’importe quel nœud ou lancer une action
Ask : les renvois [n] sont liés aux nœuds
Le graphe est devenu quelque chose qu’on interroge au lieu de simplement le regarder. Une puce TYPES ouvre la légende qui filtre les types, un contrôle Depth ne montre que les un ou deux sauts autour d’un nœud, les arêtes du nœud sélectionné s’allument, et les labels se limitent à ses huit voisins les mieux connectés. Une vue liste reflète le canvas sous forme de tableau triable, pour que la carte fonctionne aussi au clavier et avec un lecteur d’écran.
La vue liste est le miroir accessible du canvas : triable, filtrable, et chaque nom ouvre le nœud dans l’inspecteur
Un seul accent, un espacement mesuré et la lisibilité des graphes denses
B² est sombre par définition : quatre gris, une couleur de texte et un seul accent magenta, qui marque la sélection, les renvois et l’état en direct, et rien d’autre. Le texte courant atteint le niveau AA sur toutes les surfaces. Le gris le plus foncé n’offre pas assez de contraste pour du texte, donc une règle écrite le réserve aux éléments décoratifs et inactifs. Le rayon est nul partout. Sur téléphone, le panneau latéral devient un bottom sheet et chaque contrôle obtient une cible de 44 px.
La lisibilité des graphes denses a demandé ses propres solutions. La forme d’un nœud code son type, pour que la couleur reste libre pour l’état. Les labels reposent sur un fond pour qu’aucune arête ne traverse les lettres, seuls les trois plus grands hubs sont vifs, et la mise en évidence ne zoome jamais au-delà de 1,2× pour qu’une poignée de nœuds ne se transforme pas en panneaux d’affichage. La mise en page cola, en deux phases, laisse chaque nœud soumis à la physique en temps réel, si bien que le graphe répond à tout glissement.
Tour spotlight sans dépendance : s’ouvre via le bouton Tour ou ⌘K, utilisable au clavier et respectueux de prefers-reduced-motion. Il ne démarre plus tout seul : le premier regard sur une carte revient aux manques
Une revue structurée a détecté deux bugs de production avant les utilisateurs
Avant de déclarer le MVP terminé, j’ai effectué une revue de code structurée. Elle a trouvé deux vrais bugs de production : DELETE /projects/{id} supprimait les entités et relations mais pas les clusters/opportunités, provoquant une violation de clé étrangère qui bloquait la suppression sur Postgres en production ; et une XSS stockée dans la fenêtre d’impression du brief où le Markdown généré par le LLM et le nom de fichier dérivé de l’utilisateur étaient écrits via document.write avec seulement < échappé. Les deux ont été corrigés et protégés par des tests.
La suite automatisée tourne contre une base de données SQLite jetable avec l’IA désactivée — elle ne touche jamais la base de données de production ni Groq. 167 tests pytest couvrent le CRUD des projets, le contrôle d’accès au brief, la régression de suppression en cascade, le repli entre modèles, la progression de la construction, les renvois, le détail du score, la protection des démos, la limitation de débit, les jetons de propriétaire, le budget IA quotidien, les limites d’entrée et de taille des requêtes, les imports de fichiers, le filtre de pertinence, les noms de clusters, les descriptions de nœuds, les vraies 404 et la mise en cache, et les aperçus de lien par démo. 87 tests Vitest / Testing Library couvrent les écrans d’état et les notifications, le panneau Ask et ses renvois, la palette de commandes, la vue liste, les fiches de manques, le tour, le panneau mobile, les jetons de propriétaire, le consentement analytique et le rendu sécurisé du brief. Les 254 passent, en CI à chaque pull request.
La revue s’est rentabilisée rien qu’avec le bug de suppression — silencieusement cassé en production, et un bug qu’aucun parcours manuel n’avait détecté
Les revues ont continué de porter leurs fruits après la refonte. Sans comptes, n’importe qui pouvait supprimer ou reconstruire les cartes de démonstration ; elles sont désormais en lecture seule et les actions coûteuses sont limitées par IP. Une revue de sécurité de ce limiteur a montré qu’il se fiait à la première valeur de X-Forwarded-For, que le client contrôle, si bien qu’un en-tête falsifié permettait de le contourner. Il lit maintenant l’adresse ajoutée par le proxy, et sa mémoire est bornée.
Une deuxième passe en octobre s’est attaquée à ce que montraient vraiment les cartes de démonstration. Une carte sur la prospection de terrains solaires contenait un cluster sur un rover martien, une carte sur la longévité contenait des amas d’étoiles : OpenAlex faisait correspondre des mots isolés, et chaque article homonyme entraînait ses thèmes et ses institutions avec lui. Un appel au modèle filtre désormais les articles, en lui montrant le domaine de recherche de chacun, avant que quoi que ce soit n’entre dans le graphe, et les cartes reconstruites ne comptaient plus aucun cluster hors sujet. Les prompts ne sont plus réglés à l’œil : des jeux annotés à la main de 89 articles candidats et de 62 vrais clusters notent chaque changement de prompt, et la part des noms de clusters formés uniquement de mots de leurs membres est passée d’environ 0,6 à environ 0,9. La même passe a mis en lecture seule les cartes antérieures aux jetons de propriétaire, déplacé le budget IA quotidien dans la base de données et corrigé Ask, qui répondait en anglais à une question posée dans une autre langue.
Premier regard : les plus grands manques s’allument d’eux-mêmes, une fois par session
Même la 404 est un manque sur la carte
Une IA qui enrichit mais n’est jamais porteuse
La version facile de ce cas décrirait un programme de discovery avec des entretiens utilisateurs externes. Il n’y en a pas eu. L’inventer échouerait dès la première question d’entretien, donc le cas dit clairement ce qu’a été la discovery : une étude structurée du paysage concurrentiel plus du dogfooding. Ce travail a produit le positionnement réel — les outils de graphe d’articles possèdent le graphe mais seulement sur les publications et ne font aucun raisonnement d’opportunité, tandis que les plateformes de veille marché suivent des concurrents et non des domaines conceptuels. La visualisation est un prérequis banal, l’effort est donc allé à la couche de score.
La décision d’architecture que je défendrais le plus fermement est que l’IA n’est jamais porteuse. Chaque appel à Groq dispose d’un repli déterministe, et le produit fonctionne intégralement sans aucune clé Groq. Dans un portfolio rempli de fonctions LLM, c’est le choix démodé. Il coûte un second chemin de code pour chaque champ enrichi, et il fait qu’une panne de l’offre gratuite dégrade le produit au lieu de le casser.
En octobre 2026, cette décision a été mise à l’épreuve pour de vrai. Groq a retiré le modèle qu’appelait l’application, et chaque fonction IA est retombée sur les templates. Le produit a continué de fonctionner, et c’était tout l’intérêt. Il a aussi masqué la panne, et ça ne l’était pas : rien n’a échoué bruyamment jusqu’à ce que les journaux d’une reconstruction affichent un mur de 404. Une dégradation gracieuse a besoin d’un signal. Les appels passent maintenant par un seul module qui parcourt une liste de modèles, compte une réponse vide comme un échec et journalise chaque repli.
Écrire la suite de tests après le pipeline plutôt qu’en parallèle a été une erreur, preuve à l’appui. La suite a fini par trouver deux vrais bugs de production : une suppression qui retirait entités et relations mais pas les clusters, provoquant une violation de clé étrangère sur le Postgres de production, et une XSS stockée dans la fenêtre d’impression du brief, où du Markdown généré par LLM et un nom de fichier dérivé de l’utilisateur étaient écrits avec seulement les chevrons échappés. Le bug de suppression a vécu plusieurs commits. Les tests sont arrivés trop tard pour l’attraper plus tôt.
En ligne, durci, gratuit — et honnête sur ce qui reste à valider
En ligne sur axonis.app. Lancé en juin 2026 et repensé en octobre. Développé en solo en sept mois en parallèle d’autres projets. La stack est délibérément sobre et gratuite : Wikidata + OpenAlex pour les données (€0), l’offre gratuite de Groq pour l’IA (€0), networkx + python-louvain pour le graphe et les métriques (€0), backend FastAPI + SQLAlchemy 2.0, frontend React + Vite + Cytoscape.js, Docker → Coolify sur Hetzner auto-hébergé (€0 marginal). Chaque appel Groq dispose d’un fallback déterministe — l’IA enrichit mais n’est jamais critique ; le produit est pleinement fonctionnel sans clé Groq.
Ce que je ferais différemment : écrire les tests en parallèle du pipeline plutôt qu’après (le bug de suppression en cascade a survécu plusieurs commits), limiter les nœuds du graphe plus tôt pour les sujets denses (le réglage de la mise en page est venu après coup), et nommer le compromis batch-vs-on-demand dès le départ pour que l’UX de polling prenne forme plus tôt. Honnêtement, le scoring d’opportunités produit de manière fiable une première carte plausible, mais pour savoir si les ouvertures scorées sont justes, il faut de vrais product managers qui y réagissent — c’est la priorité suivante, avant plus de fonctionnalités.
La carte : la forme code le type, le nœud sélectionné allume ses arêtes et l’inspecteur montre ses métriques et ses connexions
Sources
- Blondel, Guillaume, Lambiotte & Lefebvre (2008). Fast unfolding of communities in large networks (Louvain). J. Stat. Mech. P10008.
- Freeman (1977). A set of measures of centrality based on betweenness. Sociometry 40(1):35–41.
- Priem, Piwowar & Orr (2022). OpenAlex: a fully open index of scholarly works.
- Vrandečić & Krötzsch (2014). Wikidata: a free collaborative knowledgebase. Communications of the ACM 57(10):78–85.
