Zeroneurone
Outil d'investigation open-source avec visualisation de graphe, analyse temporelle et collaboration temps réel via mesh networking. Cartographiez les entités, tracez les relations et révélez les patterns dans vos enquêtes.
Install / Use
/learn @MeltingBot/ZeroneuroneREADME
ZeroNeurone
<p align="center"> <img src="media/zeroneurone.png" alt="ZeroNeurone" width="400"> </p>Outil d'amplification cognitive pour analystes et enqueteurs
Un tableau blanc infini avec des capacites d'analyse de graphe.
Philosophie
- L'humain reste aux commandes — Pas d'actions automatiques, Ni d'intelligence artificielle, suggestions uniquement sur demande
- 100% local par defaut — IndexedDB + OPFS, fonctionne hors-ligne, les donnees ne partent jamais sans action explicite
- Le visuel EST l'analyse — Position spatiale, couleurs, formes portent un sens defini par l'utilisateur
- Zero ontologie imposee — Les utilisateurs creent leurs propres concepts, pas de types d'entites forces
Fonctionnalites
Canvas Interactif
- Creation d'elements par double-clic
- Liens entre elements par glisser-deposer
- Multi-selection et manipulation groupee
- Zoom et navigation fluides
- Personnalisation visuelle (couleurs, formes, tailles, icones)
- Groupes visuels imbriques
- Annotations (post-its)
- Onglets canvas : espaces thematiques par hypothese, type d'acteur, periode (max 10 par enquete)
- Elements fantomes : elements d'autres onglets connectes a l'onglet courant affiches en transparence
- Menu contextuel avec actions sur la selection et gestion des onglets
- Minimap pour navigation rapide
- Grille d'alignement magnetique
Gestion des Donnees
- Elements : Noeuds du graphe (personnes, entreprises, lieux, concepts, documents...)
- Liens : Relations entre elements avec metadonnees completes
- Proprietes : Paires cle/valeur personnalisables
- Tags : Organisation libre et filtrage
- Pieces jointes : Images, PDF, documents avec extraction de texte (EXIF, metadonnees PDF/DOCX/XLSX)
- Description Markdown : Support complet avec tables, liens d'ancrage, code, citations
Analyse de Graphe
- Detection de communautes (Louvain)
- Centralite (degre, intermediaire)
- Identification des ponts entre clusters (Tarjan O(V+E))
- Plus court chemin entre elements
- Mode focus (voisinage a N niveaux)
- Detection des noeuds isoles
- Analyse de similarite des labels
Vues Multiples
- Canvas : Vue graphe principale
- Carte : Visualisation geographique (MapLibre GL JS) avec vue satellite
- Timeline : Frise chronologique virtualisee (10k+ elements)
Collaboration Temps Reel
- Synchronisation via WebSocket avec chiffrement E2E (AES-256-GCM)
- Partage par lien avec cle dans le fragment URL (jamais envoyee au serveur)
- Mode asynchrone : collaborateurs travaillent a des moments differents, donnees bufferisees 7 jours
- Curseurs et selections des collaborateurs visibles
- Synchronisation des pieces jointes
- Synchronisation des onglets canvas (noms, membres, ordre — viewport local par utilisateur)
- Detection de presence avec heartbeat
- Sync incrementale optimisee
- Room ID hashe (le serveur ne peut pas correler les sessions)
Export & Import
- Export ZIP complet (JSON + assets)
- Export PNG haute resolution (zoom/scale configurable)
- Export SVG natif (vectoriel)
- Export PDF du canvas
- Export CSV (avec positions/groupes)
- Export HTML interactif (rapport + graphe navigable, theme clair/sombre, TOC, stats)
- Import CSV pour donnees tabulaires
- Import GraphML / GEXF (Gephi) / Gephi Lite JSON pour donnees de graphes
- Import Excalidraw
- Import ANX (i2 Analyst's Notebook - XML) et ANB (i2 Analyst's Notebook - binaire)
- Import STIX 2.1 (cyber threat intelligence)
- Import OSINT Industries, Graph Palette, PredicaGraph, OSINTracker
- Import GEDCOM 5.5.1/7.0 et GeneWeb pour donnees genealogiques (nom, dates, lieux, profession, surnom, titre, notes)
- Import ZIP (restauration complete avec onglets)
- Import dans dossier courante (merge avec placement visuel)
- Panel Rapport (redaction Markdown avec references aux elements)
- Generation de synthese (rapport automatique avec analyse du graphe)
- Format JSON d'import documente (EN)
Layouts Automatiques
- Force-directed (clusters)
- Hierarchique (arbres, organigrammes)
- Circulaire
- Grille
- Dispersion
Chiffrement at-rest
- Chiffrement de toutes les donnees locales (IndexedDB + fichiers OPFS)
- AES-256-GCM pour les fichiers, XSalsa20-Poly1305 pour les enregistrements
- Architecture DEK/KEK avec derivation PBKDF2-SHA256 (600k iterations)
- Verrouillage de session (
Alt+L) sans fermer le navigateur - Export ZIP chiffre avec mot de passe optionnel
- Mot de passe irrecuperable — aucune porte derobee
- Documentation technique (EN)
PWA & Hors-ligne
- Installation sur mobile et desktop
- Fonctionne 100% hors-ligne
- Cache intelligent des tuiles OpenStreetMap
- Service Worker avec mise a jour automatique
Accessibilite (WCAG AA)
- Labels ARIA sur tous les controles interactifs
- Navigation complete au clavier
- Focus trap dans les modals
- Skip link pour acces rapide au contenu
- Contraste suffisant
Internationalisation
11 langues supportees :
- Francais (fr)
- English (en)
- Espanol (es)
- Deutsch (de)
- Catala (ca)
- Euskara (eu)
- Italiano (it)
- Polski (pl)
- Portugues (pt)
- Ukrainska (ua)
- Nederlands (nl)
Stack Technique
| Couche | Technologie | |--------|-------------| | Framework | React 19 + TypeScript + Vite | | Etat | Zustand | | Stockage | Dexie.js (IndexedDB) + OPFS | | Canvas | React Flow | | Carte | MapLibre GL JS | | Analyse | Graphology | | Recherche | MiniSearch | | Sync | Yjs + y-websocket + y-indexeddb | | Crypto collab | Web Crypto API (AES-256-GCM) | | Crypto at-rest | tweetnacl (XSalsa20-Poly1305) + Web Crypto (AES-256-GCM) | | PWA | vite-plugin-pwa | | Style | Tailwind CSS | | Tests E2E | Playwright |
Installation
# Cloner le repo
git clone https://github.com/votre-username/zeroneurone.git
cd zeroneurone
# Installer les dependances
npm install
# Lancer en developpement
npm run dev
L'application sera accessible sur http://localhost:5173
Utilisation
Raccourcis Clavier
| Action | Raccourci |
|--------|-----------|
| Recherche | Ctrl+K |
| Copier | Ctrl+C |
| Couper | Ctrl+X |
| Coller | Ctrl+V |
| Dupliquer | Ctrl+D |
| Annuler | Ctrl+Z |
| Retablir | Ctrl+Shift+Z |
| Supprimer selection | Delete / Backspace |
| Mode focus | F |
| Nouvel element | E |
| Nouveau groupe | G |
| Nouvelle annotation | N |
| Vue Canvas | 1 |
| Vue Carte | 2 |
| Vue Timeline | 3 |
Interactions Canvas
| Action | Resultat | |--------|----------| | Double-clic sur le canvas | Creer un element | | Glisser d'element a element | Creer un lien | | Glisser d'element vers le vide | Creer un nouvel element lie | | Clic droit | Menu contextuel | | Molette | Zoom | | Clic molette + glisser | Pan |
Collaboration
- Ouvrir une enquete
- Cliquer sur "Partager" dans la barre d'outils
- Configurer l'URL du serveur de signalisation (une seule fois)
- Activer le mode asynchrone si besoin (collaborateurs travaillant a des moments differents)
- Copier le lien de partage
- Les collaborateurs ouvrent le lien pour rejoindre
Important : En mode asynchrone, conservez le lien de partage. C'est le seul moyen de rejoindre la session et dechiffrer les donnees.
Voir la documentation pour les details.
Architecture
src/
├── components/
│ ├── canvas/ # Canvas et elements graphiques
│ ├── map/ # Vue carte (MapLibre GL JS)
│ ├── timeline/ # Vue chronologique
│ ├── panels/ # Panneaux lateraux
│ ├── collaboration/ # UI de collaboration
│ ├── modals/ # Dialogues modaux
│ └── common/ # Composants partages
├── stores/ # Stores Zustand
│ ├── dossierStore.ts # Donnees (elements, liens, assets)
│ ├── selectionStore.ts # Etat de selection
│ ├── viewStore.ts # Viewport, filtres, mode d'affichage
│ ├── uiStore.ts # Etat UI (modals, panels, toasts)
│ ├── syncStore.ts # Etat de synchronisation
│ └── insightsStore.ts # Cache d'analyse de graphe
├── db/
│ ├── database.ts # Configuration Dexie
│ └── repositories/ # CRUD par entite
├── services/
│ ├── syncService.ts # Gestion Y.Doc et providers
│ ├── cryptoService.ts # Chiffrement E2E (collaboration)
│ ├── encryption/ # Chiffrement at-rest (DEK/KEK, middleware Dexie, OPFS)
│ ├── searchService.ts # Integration MiniSearch
│ ├── insightsService.ts # Analyse Graphology (Web Worker)
│ ├── fileService.ts # Gestion OPFS
│ ├── importService.ts # Import ZIP/CSV
│ └── exportService.ts # Export ZIP/PNG/PDF
├── workers/ # Web Workers (analyse, layout)
├── i18n/ # Traductions (11 langues)
├── types/ # Types TypeScript
└── utils/ # Utilitaires
Stockage
- Metadonnees (elements, liens, vues) : IndexedDB via Dexie
- Fichiers binaires (assets) : OPFS avec deduplication SHA-256
- Synchronisation : Y.Doc avec persistence IndexedDB locale
- Chiffrement at-rest : Middleware Dexie (XSalsa20-Poly1305) + OPFS (AES-256-GCM), opt-in par mot de passe
- Index de recherche : MiniSearch, reconstruit au chargement
Securite Collaboration
┌─────────────┐ ┌─────────────────┐ ┌─────────────┐
│ Client A │◄───────►│ Serveur Signal │◄───────►│ Client B │
│ │ Donnees│ (y-websocket) │ Donnees│ │
│ Cle: xxxxx │ chi
