Files
imagod-web/CHANGELOG.md
T
bruno 9b06df737d docs: changelog et roadmap du projet imagod-web
- CHANGELOG.md : historique complet des fonctionnalités, corrections, limitations
- ROADMAP.md : planification des phases restantes (clipboard, watcher, service, Ditto, cross-compile, etc.)
2026-06-25 08:06:04 -04:00

123 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog — imagod-web
Toutes les modifications notables de imagod-web sont documentées ici.
Le format est basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/),
et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
---
## [0.1.0] — 2026-06-23
### 🎯 Vision
imagod-web est un **daemon + dashboard web embarqué** pour Imago, le backend intelligent de gestion d'images. Il capture automatiquement les screenshots, les envoie à Imago pour analyse (OCR, AI vision, EXIF), et offre un dashboard responsive pour les consulter.
---
### 🏗️ Architecture
| Composant | Technologie | Statut |
|-----------|-------------|--------|
| **Daemon** | Rust (tokio, clap, rusqlite) | ✅ Partiel |
| **Serveur web** | axum 0.8 + tower-http | ✅ Complet |
| **Frontend** | Vanilla JS (rust-embed) | ✅ Complet |
| **Client API** | reqwest (rustls) → Imago v2 | ✅ Complet |
| **Dédoublonnage** | SHA-256 + SQLite | ✅ Complet |
| **Temps réel** | WebSocket (broadcast) | ✅ Complet |
| **Cross-platform** | Windows (arboard, tray) + Linux (notify) | 🏗️ Partiel |
---
### ✨ Fonctionnalités
#### Dashboard Web (`serve`)
- **Authentification** par clé API Imago (login/logout, localStorage)
- **Galerie responsive** — grille adaptative desktop/mobile, breakpoints 768px et 400px
- **Upload par drag & drop** — zone de drop avec feedback visuel
- **Raccourcis clavier** — `Ctrl+U` pour upload, `Ctrl+V` pour coller depuis le presse-papier
- **Recherche** plein texte (nom, tags, description, texte OCR)
- **Pagination** — navigation par pages de 24 images
- **Modale détail** — aperçu pleine résolution, métadonnées EXIF, texte OCR, description AI
- **Suppression** — bouton 🗑️ par carte + boîte de dialogue de confirmation
- **Gestion des tags** — ajout (+), suppression (×), édition inline des tags
- **Statistiques** — nombre d'images, stockage total, nombre de tags, statut en ligne
- **Notifications toast** — succès/erreur avec code couleur
- **FAB mobile** — bouton d'upload flottant en bas à droite sur mobile
- **WebSocket** — mises à jour en temps réel quand de nouveaux screenshots sont uploadés
- **Thème sombre** — design moderne, palette cohérente
#### Client API Imago v2
- `GET /api/v1/images` — liste paginée
- `GET /api/v1/images/search` — recherche plein texte
- `GET /api/v1/images/{id}` — détail complet (EXIF, OCR, AI, métadonnées)
- `POST /api/v1/images/upload` — upload multipart
- `GET /api/v1/images/{id}/thumbnail-url` — thumbnail signé → proxy binaire
- `GET /api/v1/images/{id}/download-url` — fichier original signé → proxy binaire
- `DELETE /api/v1/images/{id}` — suppression
- `PUT /api/v1/images/{id}/tags` — mise à jour des tags
#### CLI
- `imagod-web serve` — démarre le dashboard web sur `0.0.0.0:9199`
- `imagod-web watcher` — lance le daemon de capture (stub)
- `imagod-web install` — installation comme service Windows (stub)
- `imagod-web uninstall` — désinstallation du service (stub)
- Flags : `--host`, `--port`, `--api-key`, `--api-url`
#### Dédoublonnage
- Hash SHA-256 des images
- Base SQLite locale (`imagod.db`)
- Cache LRU configurable
#### Configuration
- Fichier TOML (`~/.config/imagod-web/imagod.toml`)
- Sections : `[imago]`, `[watcher]`, `[dedup]`, `[server]`
- Variables d'environnement supportées
---
### 🐛 Corrections
- **Structs Imago v2** — `ExifData`, `OcrData`, `AiData` corrigés pour matcher l'API réelle (champs imbriqués camera/gps, `has_text`, nouveaux champs AI)
- **Affichage des images** — passage aux URLs signées (`thumbnail-url`/`download-url`) car les endpoints directs `/thumbnail` et `/file` n'existent pas dans Imago
- **Fallback placeholder** — remplacement du data URI SVG cassé par un placeholder DOM (emoji + texte)
- **Erreur de décodage Rust** — champ `tags` manquant dans les structs, corrigé avec `Option<Vec<String>>`
---
### ⚠️ Limitations connues
| Problème | Impact | Solution |
|----------|--------|----------|
| Clé API sans scope `images:delete` | DELETE → 403 Forbidden | Ajouter le scope dans l'admin Imago |
| Endpoint `PUT /tags` absent d'Imago | Tags non persistants | Déployer la v2.1 d'Imago |
| Stockage Imago partiellement cassé | Upload 500, file_size=0 | Correction backend Imago |
| Pas de support Linux desktop natif | Watcher clipboard inactif | Alternative `wl-clipboard` / `xclip` |
| Pas de cross-compilation testée | Binaire Linux seulement | CI/CD + tests multi-plateformes |
---
### 📦 Dépendances clés
| Crate | Version | Usage |
|-------|---------|-------|
| axum | 0.8 | Serveur HTTP + WebSocket |
| reqwest | 0.12 | Client HTTP Imago (rustls) |
| serde / serde_json | 1.x | Serialization JSON |
| rusqlite | 0.32 | Base de dédoublonnage |
| rust-embed | 8 | Frontend embarqué dans le binaire |
| clap | 4 | CLI |
| tokio | 1 | Runtime async |
| sha2 | 0.10 | Hashing SHA-256 |
| dashmap | 6 | État partagé thread-safe |
| chrono | 0.4 | Formatage dates |
---
### 🔗 Liens
- **Code source** : https://git.dracodev.net/Projets/imagod-web
- **Backend Imago** : https://git.dracodev.net/Projets/Imago
- **Auteur** : Bruno Charest <bruno.charest@gmail.com>
- **Licence** : MIT