docs: add #77 Tauri Desktop app to ROADMAP + begin Windows binary design
CI / lint (push) Successful in 26s
CI / security (push) Successful in 13s
CI / test (push) Successful in 36s
CI / build (push) Successful in 22s
CI / e2e (push) Failing after 20s

- New P2 section: Desktop native app with Tauri/Rust
- Architecture: Rust shell → spawn Python backend → webview frontend
- 6 phases: init, Python sidecar, native features, build, UX, tests
- Windows .msi + Linux .AppImage/.deb targets
- Auto-update, tray icon, file associations, system theme
- Updated effort summary: +1 item, 60-80 jours total
This commit is contained in:
2026-07-24 17:59:04 -04:00
parent ca721c128c
commit 8fd69b4b50
+84 -3
View File
@@ -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** |
---