diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 0d368c6..9542c6e 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -681,15 +681,96 @@ --- +## đŸ”” En cours (P2) — Application Desktop + +### 77. Application Desktop native — Tauri (Windows / Linux / macOS) + +- **Effort :** 8-12 jours | **Impact :** 🟡 | **Framework :** Tauri v2 (Rust + Webview) + +- **Description :** Packager ObsiGate en application desktop native autonome. L'utilisateur tĂ©lĂ©charge un `.exe` (Windows) ou `.AppImage` (Linux), l'installe, et lance ObsiGate comme n'importe quelle app — sans Docker, sans terminal, sans navigateur. Le backend Python est embarquĂ©, le frontend s'affiche dans une webview native. L'expĂ©rience est identique Ă  l'application web, avec des capacitĂ©s supplĂ©mentaires (accĂšs fichiers natif, notifications OS, tray icon). + +- **Architecture :** + ``` + ObsiGate.exe (Tauri shell ~5 Mo) + ├── python-embed/ ← Python 3.11 embarquĂ© (~30 Mo) + │ ├── backend/ ← Code FastAPI existant + │ └── site-packages/ ← DĂ©pendances gelĂ©es + ├── frontend/ ← HTML/CSS/JS (identique au web) + └── obsigate-desktop ← Binaire Rust (lance Python + ouvre webview) + ``` + +- **Pourquoi Tauri plutĂŽt qu'Electron ?** + - Binaire de ~35-40 Mo contre ~180 Mo pour Electron (pas de Chromium embarquĂ©) + - RAM idle ~50 Mo contre ~200 Mo — la webview utilise le moteur du navigateur systĂšme + - Rust gĂšre le cycle de vie du backend Python (spawn, health check, kill propre) + - Signature de code native Windows/macOS pour Ă©viter les faux positifs antivirus + - Auto-update natif via le mĂ©canisme de Tauri (vĂ©rifie un endpoint JSON) + +- **Sous-tĂąches :** + +##### A. Initialisation du projet Tauri (1 jour) + - [ ] Installer Rust + toolchain Tauri : `cargo install tauri-cli` + - [ ] Initialiser `tauri init` dans `/desktop/` avec config Windows/Linux + - [ ] Configurer `tauri.conf.json` : fenĂȘtre 1200×800, sans cadre, titre "ObsiGate" + - [ ] Configurer le build : cibles `.msi`/`.nsis` (Windows), `.deb`/`.AppImage` (Linux) + - [ ] Ajouter les icĂŽnes desktop (`.ico` Windows, `.png` Linux) dans `desktop/icons/` + +##### B. IntĂ©gration du backend Python (2-3 jours) + - [ ] Bundle Python : crĂ©er un dossier `python-embed/` avec `python3.11-embed` + `site-packages/` (requirements.txt gelĂ©s) + - [ ] Script `sidecar.py` : lance uvicorn sur `localhost:17890`, log dans `%APPDATA%/ObsiGate/logs/` + - [ ] Code Rust `main.rs` : spawn le sidecar comme processus fils, health check (boucle `GET /api/health` avec timeout 10s), kill propre au `SIGTERM` + - [ ] Menu tray : icĂŽne dans la barre des tĂąches avec options « Ouvrir ObsiGate », « Quitter » + - [ ] Gestion du port : dĂ©tecter si 17890 est dĂ©jĂ  utilisĂ© → incrĂ©menter (17891, 17892...) + +##### C. FonctionnalitĂ©s desktop natives (2-3 jours) + - [ ] **SĂ©lecteur de dossier** : commande Tauri `dialog.open()` pour choisir un vault → appelle l'API backend pour l'ajouter + - [ ] **ThĂšme systĂšme** : dĂ©tecter `prefers-color-scheme` OS → appliquer dark/light automatiquement + - [ ] **Notifications natives** : via `tauri-plugin-notification` — remplace le service worker Push API + - [ ] **Associations de fichiers** : `.md` → « Ouvrir avec ObsiGate » (registre Windows, mime Linux) + - [ ] **Menu natif** : Fichier (Nouveau vault, Ouvrir, Quitter), Édition, Aide (À propos) + - [ ] **Raccourcis clavier** : `Ctrl+N` nouveau fichier, `Ctrl+O` ouvrir vault, `Ctrl+,` paramĂštres + +##### D. Build et distribution (2 jours) + - [ ] **Build Windows** : `tauri build --target x86_64-pc-windows-msvc` → `.msi` + `.exe` installer + - [ ] **Build Linux** : `tauri build --target x86_64-unknown-linux-gnu` → `.deb`, `.rpm`, `.AppImage` + - [ ] **Auto-update** : endpoint `GET /api/desktop/update` → compare version → tĂ©lĂ©charge nouveau `.msi` + - [ ] **Signature de code** : configurer le certificat (optionnel mais recommandĂ© pour Windows) + - [ ] **Page de release** : intĂ©grer le build desktop dans les releases Gitea + README d'installation + +##### E. ExpĂ©rience utilisateur (1 jour) + - [ ] Écran de chargement pendant le dĂ©marrage du backend (« ObsiGate dĂ©marre... » avec spinner) + - [ ] Gestion des erreurs : backend crash → message explicite + bouton « RedĂ©marrer » + - [ ] Sauvegarde des prĂ©fĂ©rences desktop (taille fenĂȘtre, position, dernier vault) + - [ ] PremiĂšre expĂ©rience : wizard « Choisissez votre vault » au premier lancement + - [ ] IcĂŽne dans le menu DĂ©marrer / dock Linux avec jumplist (vaults rĂ©cents) + +##### F. Tests (1 jour) + - [ ] Test : installation → premier lancement → wizard vault → ouverture fichier + - [ ] Test : tray icon → rĂ©duire dans la barre → restaurer + - [ ] Test : notifications natives → fichier modifiĂ© → popup OS + - [ ] Test : association `.md` → double-clic → ouvre dans ObsiGate + - [ ] Test : auto-update → nouvelle version dispo → tĂ©lĂ©chargement → installation + - [ ] Test : cleanup → dĂ©sinstallation propre (pas de fichiers rĂ©siduels) + +- **PrĂ©requis techniques :** + - Rust ≄ 1.75 (stable) — installĂ© via `rustup` + - Tauri CLI ≄ 2.0 — `cargo install tauri-cli` + - Python 3.11 embed — tĂ©lĂ©chargĂ© depuis python.org + - NSIS (Windows) — pour le gĂ©nĂ©rateur d'installateur `.exe` + - AppImageKit (Linux) — pour le packaging portable + +--- + ## 📊 RĂ©sumĂ© des efforts | PrioritĂ© | Items | Effort total estimĂ© | |---|---|---| | ✅ ComplĂ©tĂ© | #1 → #57 | ~65 jours | || đŸ”” P1 | ✅ #58 (Playwright E2E) | TerminĂ© | -|| P3 | #59, #61-66, #74, #75, #76 (10 items) | 32-42 jours | -| âšȘ P4 | #67 → #73 (7 items) | 18-23 jours | -|| **Total restant** | **18 items** | **52-68 jours** | +|| đŸ”” P2 | 🔹 #77 (Tauri Desktop) | 8-12 jours | +|| âšȘ P3 | #59, #61-66, #74, #75, #76 (10 items) | 32-42 jours | +|| âšȘ P4 | #67 → #73 (7 items) | 18-23 jours | +|| **Total restant** | **19 items** | **60-80 jours** | ---