# 🌌 ObsiViewer — Explorateur de voĂ»te Obsidian ## 📋 Description ObsiViewer est une application web **Angular 20** moderne et performante qui permet d'explorer et visualiser une voĂ»te Obsidian en lecture seule. Conçue comme une alternative lĂ©gĂšre pour consulter vos notes Markdown depuis n'importe quel navigateur, elle offre une expĂ©rience riche avec navigation fluide, rendu Markdown avancĂ©, visualisation interactive du graphe de connaissances et recherche compatible Obsidian. **Cas d'usage principaux** - 📖 Consultation de votre vault Obsidian depuis un navigateur - 🌐 Partage de vos notes en lecture seule (hĂ©bergement web) - đŸ“± AccĂšs mobile optimisĂ© Ă  votre base de connaissances - 🔍 Exploration visuelle des liens entre vos notes - 📊 Analyse du vault via graphe et statistiques > 📝 Mode dĂ©mo par dĂ©faut : l'interface fonctionne avec des donnĂ©es gĂ©nĂ©rĂ©es par `VaultService`. Connectez-la Ă  vos fichiers Markdown rĂ©els via le serveur Express pour une utilisation complĂšte. --- ## ✹ FonctionnalitĂ©s Principales ### đŸ—‚ïž Navigation et Organisation - **Explorateur de fichiers** : Arborescence complĂšte avec dossiers pliables/dĂ©pliables - **Recherche avancĂ©e** : Moteur de recherche compatible Obsidian avec opĂ©rateurs (`path:`, `tag:`, `line:`, etc.) - **Vue Tags** : Visualisation et filtrage par tags avec compteurs - **Calendrier** : Navigation temporelle par dates de crĂ©ation/modification - **Favoris (Bookmarks)** : Gestion complĂšte compatible avec `.obsidian/bookmarks.json` - **Breadcrumbs** : Navigation contextuelle avec fil d'Ariane ### 📝 Rendu Markdown - **Markdown enrichi** : Support complet de la syntaxe Obsidian - **Wikilinks** : `[[liens internes]]` avec preview au survol et navigation - **Callouts** : Blocs d'information stylisĂ©s (note, warning, info, etc.) - **Syntax highlighting** : Coloration syntaxique pour 100+ langages via highlight.js - **Diagrammes Mermaid** : Rendu des diagrammes et flowcharts - **MathĂ©matiques** : Support LaTeX/KaTeX pour formules mathĂ©matiques - **Tables avancĂ©es** : Multi-markdown tables avec fusion de cellules - **Task lists** : Listes de tĂąches interactives - **Footnotes** : Notes de bas de page - **Embeddings** : Images et attachements avec rĂ©solution intelligente ### đŸ•žïž Graphe de Connaissances - **Visualisation interactive** : Graphe de liens basĂ© sur d3-force - **Physique rĂ©aliste** : Simulation de forces pour placement optimal - **Drag & Drop** : DĂ©placement et fixation des nƓuds - **Filtres avancĂ©s** : Tags, attachments, orphelins, recherche - **Color Groups** : Coloration personnalisĂ©e par requĂȘtes - **ParamĂštres complets** : 14+ options (forces, apparence, affichage) - **Persistance** : Sauvegarde dans `.obsidian/graph.json` - **Mode focus** : CentrĂ© sur une note avec profondeur configurable ### 🔍 Recherche et Filtrage - **Moteur de recherche Obsidian-compatible** avec tous les opĂ©rateurs - **Assistant de requĂȘtes** : AutocomplĂ©tion intelligente avec suggestions - **Historique** : MĂ©morisation des 10 derniĂšres recherches par contexte - **Highlighting** : Mise en Ă©vidence des rĂ©sultats - **Tri multiple** : Pertinence, nom, date de modification - **Preview** : Extraits contextuels dans les rĂ©sultats ### 🎹 Interface Utilisateur - **Design moderne** : Interface soignĂ©e inspirĂ©e d'Obsidian - **Dark/Light mode** : ThĂšmes clair et sombre avec transition fluide - **Responsive** : OptimisĂ© desktop, tablette et mobile - **Sidebar redimensionnable** : Ajustement de la largeur des panneaux - **Keyboard shortcuts** : Raccourcis clavier (Alt+R, Alt+D) - **Animations fluides** : 60fps avec optimisations performance --- ## 🧰 PrĂ©requis - Node.js **20+** et npm (`node --version`) - Angular CLI (facultatif mais pratique) : `npm install -g @angular/cli` - Docker (facultatif) pour utiliser les scripts situĂ©s dans `docker/` et `docker-compose/` --- ## ⚙ Installation & scripts utiles ```bash npm install # Installe toutes les dĂ©pendances npm run dev # Lance l'app en mode dĂ©veloppement (http://localhost:3000) npm run build # Compile la version production dans dist/ npm run preview # Sert la build de prod avec ng serve ``` 👉 Le port de dev et la configuration de build sont dĂ©finis dans `angular.json`. --- ## đŸ—ïž Architecture ### Stack Technique | Technologie | Version | Usage | |-------------|---------|-------| | Angular | 20.3.x | Framework (Signals, Standalone Components) | | TypeScript | 5.8.x | Langage (mode strict) | | TailwindCSS | 3.4.x | Styling et design system | | Angular CDK | 20.2.x | Overlay, drag-drop | | RxJS | 7.8.x | Programmation rĂ©active | | Express | 5.1.x | API REST backend | | Chokidar | 4.0.x | File watching | | Markdown-it | 14.1.x | Parsing/rendu Markdown | | highlight.js | 11.10.x | Syntax highlighting | | mermaid | 11.12.x | Diagrammes | | d3-force | 3.0.x | Physique du graphe | | date-fns | 4.1.x | Dates | ### Patterns - Signals pour la rĂ©activitĂ© fine-grained - Standalone Components (sans NgModules) - Repository Pattern (FileSystem / Server / MĂ©moire) - Services pour la logique mĂ©tier - Change Detection OnPush - Bootstrap sans Zone.js ### Structure du Projet ``` ObsiViewer/ ├── src/ │ ├── app/ │ │ ├── core/ # Services core (download, theme) │ │ └── graph/ # Graph settings & runtime │ ├── components/ # UI (bookmarks, graph, search, calendar, etc.) │ ├── core/ # bookmarks/, graph/, search/, services/ │ ├── services/ # vault.service, markdown.service, etc. │ ├── shared/ # Overlays, composants communs │ ├── styles/ # CSS globaux, tokens │ ├── types/ # Types TS │ └── app.component.ts # Composant racine ├── server/index.mjs # API Express + fichiers statiques ├── docker*/ # Docker & Compose ├── docs/ # Documentation dĂ©taillĂ©e ├── vault/ # VoĂ»te Obsidian (créée au dĂ©marrage) ├── index.tsx # Bootstrap Angular ├── angular.json, tsconfig.json # Configs └── package.json # DĂ©pendances ``` --- ## 🔌 Configurer l’API locale (optionnel) ```bash npm run build # gĂ©nĂšre dist/ node server/index.mjs # lance l'API + serveur statique sur http://localhost:4000 ``` Assurez-vous que vos notes Markdown se trouvent dans `vault/`. L'API expose : #### Endpoints Principaux | MĂ©thode | Endpoint | Description | |---------|----------|-------------| | GET | `/api/health` | État du serveur | | GET | `/api/vault` | Liste complĂšte des notes avec contenu | | GET | `/api/vault/events` | Server-Sent Events pour live reload | | GET | `/api/files/metadata` | MĂ©tadonnĂ©es de tous les fichiers | | GET | `/api/files/by-date` | Fichiers créés/modifiĂ©s Ă  une date | | GET | `/api/files/by-date-range` | Fichiers dans un intervalle | | GET | `/api/vault/bookmarks` | Favoris `.obsidian/bookmarks.json` | | PUT | `/api/vault/bookmarks` | Sauvegarde favoris (avec If-Match) | | GET | `/api/vault/graph` | Configuration graphe `.obsidian/graph.json` | | PUT | `/api/vault/graph` | Sauvegarde configuration graphe | | GET | `/api/attachments/resolve` | RĂ©solution intelligente d'attachements | #### FonctionnalitĂ©s Serveur - **Live Reload** : DĂ©tection des changements de fichiers via Chokidar - **Server-Sent Events** : Notifications en temps rĂ©el des modifications - **RĂ©solution d'attachements** : Recherche intelligente dans l'arborescence - **Atomic Writes** : Écritures sĂ©curisĂ©es avec fichiers temporaires - **Conflict Detection** : Gestion des conflits avec hash de rĂ©vision - **CORS Safe** : Configuration proxy pour dĂ©veloppement --- ## ⭐ Gestion des favoris (Bookmarks) ObsiViewer implĂ©mente une **gestion complĂšte des favoris** 100% compatible avec Obsidian, utilisant `/.obsidian/bookmarks.json` comme source unique de vĂ©ritĂ©. ### FonctionnalitĂ©s - **Synchronisation bidirectionnelle** : Les modifications dans ObsiViewer apparaissent dans Obsidian et vice-versa - **Deux modes d'accĂšs** : - **File System Access API** (prĂ©fĂ©rĂ©) : SĂ©lectionnez votre dossier vault directement depuis le navigateur - **Serveur Bridge** : L'API Express lit/Ă©crit le fichier `.obsidian/bookmarks.json` - **OpĂ©rations complĂštes** : CrĂ©er, modifier, supprimer, rĂ©organiser, grouper - **Import/Export** : Importer ou exporter vos favoris au format JSON Obsidian - **DĂ©tection de conflits** : Alerte si le fichier a Ă©tĂ© modifiĂ© en externe avec options de rĂ©solution - **Sauvegarde automatique** : Debouncing de 800ms pour Ă©viter les Ă©critures excessives - **Interface responsive** : OptimisĂ©e pour desktop et mobile avec thĂšmes clair/sombre ### Comment utiliser #### Mode Navigateur (File System Access API) 1. Cliquez sur **"Connect Vault"** dans le panneau Favoris 2. SĂ©lectionnez le dossier racine de votre vault Obsidian 3. Accordez les permissions de lecture/Ă©criture 4. ObsiViewer accĂšde directement Ă  `.obsidian/bookmarks.json` > ⚠ NĂ©cessite Chrome 86+, Edge 86+, ou Opera 72+ (pas de support Firefox/Safari) #### Mode Serveur ```bash node server/index.mjs ``` Le serveur lit/Ă©crit automatiquement `vault/.obsidian/bookmarks.json`. ### Structure des donnĂ©es Format JSON compatible Obsidian : ```json { "items": [ { "type": "group", "ctime": 1704067200000, "title": "Mes Notes", "items": [ { "type": "file", "ctime": 1704067201000, "path": "Notes/important.md", "title": "Note Importante" } ] } ] } ``` Types supportĂ©s : `group`, `file` (dossiers, recherches, headings, blocks parsĂ©s mais non affichĂ©s). ### Architecture technique ``` src/core/bookmarks/ ├── types.ts # Types TypeScript ├── bookmarks.utils.ts # OpĂ©rations arbre + validation ├── bookmarks.repository.ts # Adapters de persistance └── bookmarks.service.ts # Service Angular avec Signals src/components/ ├── bookmarks-panel/ # Composant principal └── bookmark-item/ # Item d'arborescence ``` Le service utilise les **Signals Angular** pour la rĂ©activitĂ© et implĂ©mente un systĂšme de sauvegarde automatique avec debounce. --- ## 🐳 ExĂ©cution avec Docker (facultatif) - `docker/build-img.ps1` / `docker/deploy-img.ps1` pour construire et pousser une image locale - `docker/Dockerfile.origi` pour une build manuelle (`docker build ...`) - `docker-compose/docker-compose.yml` pour orchestrer un conteneur prĂ©configurĂ© 💡 Pensez Ă  personnaliser les fichiers `.env` (`.env.local`, `docker-compose/.env`) avant toute utilisation rĂ©elle. --- ## đŸ§Ș Tests ### Tests unitaires Scripts disponibles: ```bash npm run test:markdown # src/services/markdown.service.spec.ts # Ou exĂ©cuter un test spĂ©cifique (exemples): node --loader ts-node/esm --test src/services/wikilink-parser.service.spec.ts node --loader ts-node/esm --test src/core/bookmarks/bookmarks.service.spec.ts node --loader ts-node/esm --test src/core/bookmarks/bookmarks.utils.spec.ts node --loader ts-node/esm --test src/core/search/search-parser.spec.ts ``` ### Tests manuels recommandĂ©s - **Wikilinks**: `[[note]]`, `[[note|Alias]]`, `[[note#Section]]`, `[[note#^block]]` → navigation + preview au survol. - **Graph View**: drag & drop, options (forces, affichage), groupes colorĂ©s, filtres (tags/attachments/orphans). - **Bookmarks**: connexion vault, crĂ©ation/Ă©dition/suppression, drag & drop, import/export, dĂ©tection de conflits. - **Recherche**: opĂ©rateurs `path:`, `file:`, `tag:`, `line:`, `section:`, `[property]`, OR/NOT/()``, exact phrases, wildcard, regex. --- ## đŸ› ïž DĂ©veloppement ### Standards de code - TypeScript strict, architecture Angular 20 (Standalone + Signals) - ChangeDetection OnPush, composantisation claire - TailwindCSS (dark mode via classe `dark`/`[data-theme="dark"]`) ### Conventions - Composants: `kebab-case.component.ts`, Services: `kebab-case.service.ts` - Types/Interfaces: `PascalCase`, constantes: `SCREAMING_SNAKE_CASE` ### Variables d’environnement | Variable | Description | DĂ©faut | |----------|-------------|--------| | `PORT` | Port du serveur Express | `4000` | | `NODE_ENV` | Environnement | `development` | | `VAULT_PATH` | Chemin du vault (optionnel) | `./vault` | ### Contribution 1. Fork → branche `feature/x` 2. Commits conventionnels (`feat:`, `fix:`, `docs:`...) 3. PR avec description claire + captures si UI --- ## 🔐 SĂ©curitĂ© - Lecture seule des notes (Ă©criture uniquement sur `.obsidian/bookmarks.json` et `.obsidian/graph.json`) - Pas d’authentification intĂ©grĂ©e (prĂ©voir un reverse proxy/SSO en production) - RĂ©solution d’attachements sĂ©curisĂ©e (vĂ©rifications d’existence) - Échappement du HTML pour rĂ©duire les risques XSS via Markdown - Ne pas committer de secrets `.env` --- ## 📈 Performance - Wikilinks: ~30ms/100 liens (voir `IMPLEMENTATION_SUMMARY.md`) - Graph 1000 nƓuds: ~400ms initial, 60fps animation - Recherche complexe 2000+ notes: <200ms (voir `SEARCH_COMPLETE.md`) - Optimisations: Signals, OnPush, LRU cache (previews), debounce (250–800ms), rAF, zoneless bootstrap --- ## 🐛 ProblĂšmes connus - File System Access API non supportĂ©e sur Firefox/Safari → utiliser le mode serveur Express - Zoom/Pan du graphe non implĂ©mentĂ© (prĂ©vu via `d3-zoom`) - `bookmark-item`: Ă©dition inline TODO (voir commentaire dans le code) - Contexte menu z-index (UI) Ă  ajuster dans SCSS - TrĂšs grands vaults (>5000 notes): envisager filtrage/virtualisation --- ## ⚠ Points d’attention - Les scripts Docker hĂ©ritĂ©s supposent la prĂ©sence d’un dossier `server/` et d’un schĂ©ma `db/schema.sql` (non inclus ici). - Les secrets fournis en exemple dans les fichiers `.env` doivent ĂȘtre remplacĂ©s avant toute utilisation en production. - Le rendu Markdown peut nĂ©cessiter des adaptations pour des voĂ»tes Obsidian complexes. --- ## 📝 Changelog Voir les fichiers de documentation pour historiques dĂ©taillĂ©s : - `IMPLEMENTATION_SUMMARY.md` - Wikilinks & Graph View - `SEARCH_COMPLETE.md` - SystĂšme de recherche - `docs/BOOKMARKS_CHANGELOG.md` - Évolution des favoris - `GRAPH_VIEW_SEARCH_IMPLEMENTATION.md` - Graph & Search Assistant ### Version Actuelle : 0.0.0 (DĂ©veloppement) **FonctionnalitĂ©s majeures** : - ✅ Navigation complĂšte vault Obsidian - ✅ Rendu Markdown enrichi avec wikilinks - ✅ Graph View interactif avec paritĂ© Obsidian - ✅ SystĂšme de recherche avancĂ©e - ✅ Gestion bookmarks synchronisĂ©e - ✅ Live reload avec SSE - ✅ Dark/Light mode - ✅ Responsive mobile ## 📄 Licence **Pas de licence spĂ©cifiĂ©e** - Usage libre pour dĂ©veloppement et consultation. > ⚠ **Note** : Ajoutez une licence appropriĂ©e (MIT, Apache 2.0, GPL, etc.) avant publication ou distribution. ## đŸ‘„ Auteurs et Contributeurs **DĂ©veloppement principal** : Projet dĂ©veloppĂ© avec assistance AI (Claude/Anthropic) **Technologies et Inspirations** : - [Obsidian](https://obsidian.md/) - Inspiration design et fonctionnalitĂ©s - [Angular](https://angular.dev/) - Framework - [TailwindCSS](https://tailwindcss.com/) - Styling - [D3.js](https://d3js.org/) - Visualisation graphe ## 🔗 Liens Utiles ### Documentation Projet - [Architecture ComplĂšte](./docs/) - Documentation technique dĂ©taillĂ©e - [Guide Bookmarks](./docs/BOOKMARKS_IMPLEMENTATION.md) - SystĂšme de favoris - [Guide Wikilinks](./docs/WIKILINKS_README.md) - Liens internes - [Guide Recherche](./docs/SEARCH_IMPLEMENTATION.md) - Moteur de recherche - [Guide Graph](./docs/GRAPH_SETTINGS.md) - Configuration graphe ### Resources Externes - [Angular Framework](https://angular.dev/) - [Angular CLI](https://angular.dev/cli) - [Obsidian Documentation](https://help.obsidian.md/) - [Markdown-it](https://markdown-it.github.io/) - [D3-Force Documentation](https://github.com/d3/d3-force) - [TailwindCSS Docs](https://tailwindcss.com/docs) - [Docker Compose Guide](./docker-compose/README.md) ### API Documentation - **File System Access API** : [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API) - **Server-Sent Events** : [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) --- ## 🎯 Quick Start Complet ```bash # 1. Installation git clone cd ObsiViewer npm install # 2. DĂ©marrage dĂ©veloppement (mode demo) npm run dev # → Ouvrir http://localhost:3000 # 3. Avec votre vault (mode serveur) mkdir -p vault # Copier vos notes .md dans vault/ npm run build node server/index.mjs # → Ouvrir http://localhost:4000 # 4. Production npm run build # DĂ©ployer le contenu de dist/ sur votre hĂ©bergement ``` --- ✹ **Bonne exploration dans ObsiViewer !** ✹ 💡 **Besoin d'aide ?** Consultez la documentation dans `/docs` ou ouvrez une issue. 🚀 **PrĂȘt pour la production ?** Voir `ROADMAP.md` pour les prochaines Ă©tapes.