Ce tutoriel explique comment intégrer des notes compatibles avec Obsidian dans une application backend développée avec Nest.js, Prisma et gray-matter, en utilisant un système de fichiers Markdown synchronisé avec une base de données. L’auteur, inspirée par les fonctionnalités d’Obsidian, partage cette approche dans le cadre d’un projet personnel de crypto-tracker, où les notes permettent d’annoter des analyses financières avec des formules mathématiques (LaTeX/Math.js) et des diagrammes (Mermaid).

La solution repose sur un stack technique simple : Nest.js pour le backend, Prisma avec SQLite pour la gestion des données, et deux bibliothèques clés. uuid génère des identifiants uniques pour les notes avant leur enregistrement, tandis que gray-matter parse et formate les métadonnées YAML (frontmatter) dans les fichiers `.md`, assurant la compatibilité avec Obsidian. Les fichiers sont stockés dans un dossier dédié (`/vault/notes`), créé automatiquement si absent, et leur contenu est dupliqué en base de données pour faciliter les requêtes et les liens avec d’autres fonctionnalités (comme les tags ou les utilisateurs).

Le cœur du système repose sur quatre opérations CRUD implémentées dans un service Nest.js. La création d’une note commence par la génération d’un ID unique, suivi de l’extraction des noms de tags depuis la base de données (via Prisma). Les métadonnées (ID, titre, tags, dates) sont alors encapsulées en YAML avec gray-matter, puis sauvegardées dans un fichier `.md` dont le contenu peut inclure du Markdown enrichi (formules LaTeX, blocs Mermaid, ou hashtags). Parallèlement, les métadonnées sont enregistrées en base avec le chemin vers le fichier.

La mise à jour suit une logique similaire : le service lit d’abord le fichier existant, merge les nouvelles données (contenu ou métadonnées) avec l’ancien état via gray-matter, puis réécrit le fichier et met à jour la base. L’auteur souligne qu’il faut transmettre l’intégralité du contenu modifié, une approche plus simple que des mises à jour partielles. La récupération d’une note combine les données de la base (métadonnées, tags) et le contenu brut du fichier, parsé par gray-matter pour séparer le frontmatter du corps Markdown. Enfin, la suppression efface à la fois le fichier et l’entrée en base, avec une vérification préalable de leur existence.

L’exemple concret présenté montre une note d’analyse cryptographique avec une formule mathématique (`2 * (3 + 4)`) et un diagramme Mermaid illustrant des liens entre devises (BTC → ETH → SOL). Le rendu dans Obsidian affiche correctement ces éléments, ainsi que les métadonnées YAML (ID, tags) et les hashtags manuels (#btc), démontrant la compatibilité entre le système personnalisé et l’application. Les tags peuvent provenir à la fois de la base de données (via Prisma) et du contenu Markdown, offrant une flexibilité pour l’organisation.

L’auteur évoque des pistes d’amélioration, comme l’intégration plus poussée avec des données analytiques (graphiques, transactions) ou l’optimisation du frontend, tout en reconnaissant que cette base fonctionnelle peut servir de point de départ pour divers projets : gestionnaires de tâches, calendriers, ou outils spécialisés. Les bibliothèques utilisées (gray-matter, uuid, Mermaid, Math.js) sont documentées en liens utiles, et le code source complet (DTO, schémas Prisma) est disponible sur le profil GitHub de l’auteur pour approfondir l’implémentation.