# 🌌 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 - 🎹 ThĂšmes personnalisables - 📚 Support des notes Excalidraw - 📝 Support des notes Markdown - 📝 Mode Lecture et Édition - 📝 Mode Dark et Light - 📝 Mode Mobile et Desktop > 📝 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 - **Backend Meilisearch** : Recherche ultra-rapide (15-50ms) sans gel UI ⚡ - **Recherche en temps rĂ©el** : Live search avec debounce intelligent (300ms) - **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 --- ## 🧭 Migration UI — Tags (nouveau gestionnaire) Depuis cette version, la gestion des tags a Ă©tĂ© refondue pour une UX claire et performante. - **Lecture**: un bouton icĂŽne Tag situĂ© Ă  gauche des chips ouvre/ferme l'Ă©diteur. Cliquer un chip applique un filtre sur `NotesList`. - **Édition**: l'Ă©diteur est un overlay moderne avec dĂ©-dupe forte, suggestions et raccourcis (Enter/Tab/Backspace). Aucune fermeture par clic extĂ©rieur ou touche ESC. ### IntĂ©gration - Composant lecture/commande: `src/app/shared/tags/tag-manager/tag-manager.component.ts` - Overlay Ă©dition: `src/app/shared/tags/tag-editor-overlay/` - Store de filtre: `src/app/core/stores/tag-filter.store.ts` - Utilitaires: `src/app/shared/tags/tag-utils.ts` ### API composants - `TagManagerComponent` - `@Input() tags: string[]` - `@Input() noteId: string` - `@Output() tagSelected(tag: string)` (lecture) - `@Output() editingChanged(isEditing: boolean)` - `@Output() saved(tags: string[])` (aprĂšs Enregistrer) ### Comportements clĂ©s - L’édition ne se dĂ©clenche QUE via l’icĂŽne Tag. - En lecture, cliquer un chip: met Ă  jour `TagFilterStore` et filtre la liste des notes. Un badge “Filtre: #tag” apparaĂźt avec action “Effacer le filtre”. - Sauvegarde des tags via `VaultService.updateNoteTags(noteId, tags)` qui réécrit proprement le frontmatter `tags:`. ### Tests - `tag-utils.spec.ts` couvre `normalizeTag` et `uniqueTags`. - `tag-manager.component.spec.ts` vĂ©rifie l’émission de `tagSelected`. ### ✏ Dessins Excalidraw - **Éditeur intĂ©grĂ©** : Ouvrez et modifiez des fichiers `.excalidraw` directement dans l'app - **CrĂ©ation rapide** : Bouton "Nouveau dessin" dans l'en-tĂȘte (icĂŽne +) - **Autosave** : Sauvegarde automatique aprĂšs 800ms d'inactivitĂ© - **Exports** : Boutons PNG et SVG pour gĂ©nĂ©rer des images (sidecars `.png`/`.svg`) - **CompatibilitĂ© Obsidian** : Support des formats JSON et Markdown avec `compressed-json` - **ThĂšme synchronisĂ©** : Mode clair/sombre suit les prĂ©fĂ©rences de l'app --- ## 🧰 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 & Configuration ### Installation des dĂ©pendances ```bash npm install ``` ### Configuration des variables d'environnement Copiez `.env.example` vers `.env` et ajustez les valeurs: ```bash cp .env.example .env ``` **Variables principales:** ```env # Chemin vers votre vault Obsidian (absolu ou relatif) VAULT_PATH=./vault # Configuration Meilisearch (recherche backend) MEILI_MASTER_KEY=devMeiliKey123 MEILI_HOST=http://127.0.0.1:7700 # Port du serveur backend PORT=4000 ``` ### Scripts de dĂ©veloppement ```bash # Frontend Angular seul (mode dĂ©mo avec donnĂ©es gĂ©nĂ©rĂ©es) npm run dev # http://localhost:3000 # Backend Express + API node server/index.mjs # http://localhost:4000 # Avec variables d'environnement VAULT_PATH=/path/to/vault MEILI_MASTER_KEY=devMeiliKey123 node server/index.mjs # Build production npm run build # Compile dans dist/ npm run preview # Sert la build de prod ``` ### DĂ©marrage complet en mode DEV Pour un environnement de dĂ©veloppement complet avec recherche Meilisearch: ```bash # 1. Configurer les variables cp .env.example .env # Éditer .env et dĂ©finir VAULT_PATH vers votre vault # 2. Lancer Meilisearch npm run meili:up # 3. Indexer le vault npm run meili:reindex # 4. Lancer le backend (dans un terminal) VAULT_PATH=/path/to/vault MEILI_MASTER_KEY=devMeiliKey123 node server/index.mjs # 5. Lancer le frontend (dans un autre terminal) npm run dev ``` **AccĂšs:** - Frontend: http://localhost:3000 - Backend API: http://localhost:4000 - Meilisearch: http://localhost:7700 --- ## đŸ—ïž 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 | | Meilisearch | 0.44.x | Moteur de recherche (backend) | | 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 --- ## 🔍 Recherche Meilisearch (Backend) ObsiViewer intĂšgre **Meilisearch** pour une recherche cĂŽtĂ© serveur ultra-rapide avec typo-tolerance, highlights et facettes. Cette fonctionnalitĂ© remplace la recherche O(N) frontend par un backend optimisĂ© ciblant **P95 < 150ms** sur 1000+ notes. ### ✹ Avantages - **Performance** : Recherche indexĂ©e avec P95 < 150ms mĂȘme sur de grandes voĂ»tes - **Typo-tolerance** : Trouve "obsiviewer" mĂȘme si vous tapez "obsever" (1-2 typos) - **Highlights serveur** : Extraits avec `` dĂ©jĂ  calculĂ©s cĂŽtĂ© backend - **Facettes** : Distribution par tags, dossiers, annĂ©e, mois - **OpĂ©rateurs Obsidian** : Support de `tag:`, `path:`, `file:` combinables ### 🚀 DĂ©marrage Rapide #### 1. Lancer Meilisearch avec Docker ```bash npm run meili:up # Lance Meilisearch sur port 7700 npm run meili:reindex # Indexe toutes les notes du vault ``` #### 2. Configuration Variables d'environnement (fichier `.env` Ă  la racine): ```env VAULT_PATH=./vault MEILI_HOST=http://127.0.0.1:7700 MEILI_MASTER_KEY=devMeiliKey123 ``` **Important:** Le backend Express et l'indexeur Meilisearch utilisent tous deux `VAULT_PATH` pour garantir la cohĂ©rence. **Angular** : Activer dans `src/core/logging/environment.ts`: ```typescript export const environment = { USE_MEILI: true, // Active la recherche Meilisearch // ... }; ``` #### 3. Utilisation **API REST** : ```bash # Recherche simple curl "http://localhost:4000/api/search?q=obsidian" # Avec opĂ©rateurs Obsidian curl "http://localhost:4000/api/search?q=tag:work path:Projects" # Reindexation manuelle curl -X POST http://localhost:4000/api/reindex ``` **Angular** : ```typescript // Le SearchOrchestratorService dĂ©lĂšgue automatiquement Ă  Meilisearch searchOrchestrator.execute('tag:dev file:readme'); ``` ### 📊 Endpoints Meilisearch | MĂ©thode | Endpoint | Description | |---------|----------|-------------| | GET | `/api/search` | Recherche avec query Obsidian (`q`, `limit`, `offset`, `sort`, `highlight`) | | POST | `/api/reindex` | RĂ©indexation complĂšte du vault | ### 🔧 Scripts NPM ```bash npm run meili:up # Lance Meilisearch (Docker) npm run meili:down # ArrĂȘte Meilisearch npm run meili:reindex # RĂ©indexe tous les fichiers .md npm run meili:rebuild # up + reindex (tout-en-un) npm run bench:search # Benchmark avec autocannon (P95, avg, throughput) ``` ### 🎯 OpĂ©rateurs SupportĂ©s | OpĂ©rateur | Exemple | Description | |-----------|---------|-------------| | `tag:` | `tag:work` | Filtre par tag exact | | `path:` | `path:Projects/Angular` | Filtre par dossier parent | | `file:` | `file:readme` | Recherche dans le nom de fichier | | Texte libre | `obsidian search` | Recherche plein texte avec typo-tolerance | **Combinaisons** : `tag:dev path:Projects file:plan architecture` ### đŸ—ïž Architecture ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Angular │─────▶│ Express │─────▶│ Meilisearch │ │ (UI) │ │ (API) │ │ (Index) │ └─────────────┘ └─────────────┘ └─────────────┘ │ â–Œ ┌─────────────┐ │ Chokidar │ │ (Watch) │ └─────────────┘ ``` **Indexation** : - **Initiale** : `npm run meili:reindex` (batch de 750 docs) - **IncrĂ©mentale** : Chokidar dĂ©tecte `add`/`change`/`unlink` et met Ă  jour Meilisearch automatiquement **Documents indexĂ©s** : ```json { "id": "Projects/Angular/App.md", "title": "Mon Application", "content": "Texte sans markdown...", "file": "App.md", "path": "Projects/Angular/App.md", "tags": ["angular", "dev"], "properties": { "author": "John" }, "headings": ["Introduction", "Setup"], "parentDirs": ["Projects", "Projects/Angular"], "year": 2025, "month": 10, "excerpt": "Premiers 500 caractĂšres..." } ``` ### đŸ§Ș Tests & Performance **Benchmark** : ```bash npm run bench:search # Teste 5 requĂȘtes avec autocannon (20 connexions, 10s) # Affiche P95, moyenne, throughput ``` **Exemples de requĂȘtes** : ```bash q=* # Toutes les notes q=tag:work notes # Tag + texte libre q=path:Projects/Angular tag:dev # Dossier + tag q=file:readme # Nom de fichier q=obsiviewer searh # Typo volontaire (→ "search") ``` **Objectif P0** : P95 < 150ms sur 1000 notes (machine dev locale) ✅ ### 🔒 SĂ©curitĂ© - ClĂ© Meili en **variable d'env** (`MEILI_API_KEY`) - Jamais de secrets hardcodĂ©s dans le repo - Docker Compose expose port 7700 (changez si prod) ### 📩 DĂ©pendances Serveur AjoutĂ©es automatiquement dans `package.json` : - `meilisearch` : Client officiel - `gray-matter` : Parse frontmatter YAML - `remove-markdown` : Nettoyage du texte - `fast-glob` : Recherche rapide de fichiers - `pathe` : Chemins cross-platform --- ## ⭐ 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.