Add extensive project documentation including analysis review, image rendering changelog and guide, contributing guidelines, hidden files configuration guide, PWA documentation suite, roadmap, and dashboard specification.
344 lines
9.3 KiB
Markdown
344 lines
9.3 KiB
Markdown
# Guide PWA - ObsiGate
|
||
|
||
ObsiGate est maintenant une **Progressive Web App (PWA)** complète, offrant une expérience d'application native sur tous les appareils.
|
||
|
||
## 🎯 Qu'est-ce qu'une PWA ?
|
||
|
||
Une Progressive Web App combine le meilleur du web et des applications natives :
|
||
- **Installation** : Installez ObsiGate sur votre appareil comme une application native
|
||
- **Mode hors ligne** : Accédez à vos notes même sans connexion internet
|
||
- **Notifications** : Recevez des alertes de mise à jour
|
||
- **Performance** : Chargement rapide grâce au cache intelligent
|
||
- **Multi-plateforme** : Fonctionne sur desktop, mobile et tablette
|
||
|
||
## 📱 Installation
|
||
|
||
### Sur Desktop (Chrome, Edge, Brave)
|
||
|
||
1. Ouvrez ObsiGate dans votre navigateur
|
||
2. Cliquez sur l'icône d'installation dans la barre d'adresse (➕ ou ⬇️)
|
||
3. Cliquez sur "Installer" dans la popup
|
||
4. ObsiGate apparaît maintenant dans vos applications
|
||
|
||
**Alternative** : Menu ⋮ → "Installer ObsiGate..."
|
||
|
||
### Sur Android
|
||
|
||
1. Ouvrez ObsiGate dans Chrome
|
||
2. Appuyez sur le menu ⋮ (trois points)
|
||
3. Sélectionnez "Ajouter à l'écran d'accueil"
|
||
4. Confirmez l'installation
|
||
5. L'icône ObsiGate apparaît sur votre écran d'accueil
|
||
|
||
### Sur iOS/iPadOS (Safari)
|
||
|
||
1. Ouvrez ObsiGate dans Safari
|
||
2. Appuyez sur le bouton Partager 📤
|
||
3. Faites défiler et sélectionnez "Sur l'écran d'accueil"
|
||
4. Nommez l'application et appuyez sur "Ajouter"
|
||
5. ObsiGate apparaît sur votre écran d'accueil
|
||
|
||
## ⚡ Fonctionnalités PWA
|
||
|
||
### Mode Hors Ligne
|
||
|
||
Le service worker met en cache :
|
||
- **Interface utilisateur** : HTML, CSS, JavaScript
|
||
- **Ressources statiques** : Icônes, polices
|
||
- **Contenu API** : Dernières données consultées
|
||
|
||
**Stratégies de cache** :
|
||
- **Cache First** : Assets statiques (interface)
|
||
- **Network First** : API et données dynamiques
|
||
- **Fallback** : Affichage gracieux en cas d'erreur
|
||
|
||
### Mises à Jour Automatiques
|
||
|
||
- Vérification des mises à jour toutes les minutes
|
||
- Notification élégante quand une nouvelle version est disponible
|
||
- Mise à jour en un clic sans perte de données
|
||
|
||
### Raccourcis d'Application
|
||
|
||
Accès rapide aux fonctionnalités depuis l'icône :
|
||
- **Recherche** : Ouvre directement la recherche
|
||
|
||
## 🛠️ Configuration Technique
|
||
|
||
### Fichiers PWA
|
||
|
||
```
|
||
ObsiGate/
|
||
├── frontend/
|
||
│ ├── manifest.json # Manifeste PWA
|
||
│ ├── sw.js # Service Worker
|
||
│ ├── icons/ # Icônes PWA
|
||
│ │ ├── icon-72x72.svg
|
||
│ │ ├── icon-192x192.svg
|
||
│ │ ├── icon-512x512.svg
|
||
│ │ └── ...
|
||
│ ├── index.html # Meta tags PWA
|
||
│ ├── app.js # Enregistrement SW
|
||
│ └── style.css # Styles PWA
|
||
└── generate_pwa_icons.py # Générateur d'icônes
|
||
```
|
||
|
||
### Manifeste (manifest.json)
|
||
|
||
Définit les métadonnées de l'application :
|
||
- Nom et description
|
||
- Icônes (multiples tailles)
|
||
- Couleurs de thème
|
||
- Mode d'affichage (standalone)
|
||
- Raccourcis d'application
|
||
|
||
### Service Worker (sw.js)
|
||
|
||
Gère le cache et le mode hors ligne :
|
||
- **Cache statique** : Interface et assets
|
||
- **Cache dynamique** : Données API (max 50 entrées)
|
||
- **Stratégies** : Cache-first et Network-first
|
||
- **Nettoyage** : Suppression automatique des anciens caches
|
||
|
||
### Icônes PWA
|
||
|
||
Tailles supportées :
|
||
- **72x72** : Favicon, petites icônes
|
||
- **96x96** : Raccourcis
|
||
- **128x128, 144x144, 152x152** : Appareils mobiles
|
||
- **192x192** : Android home screen (standard)
|
||
- **384x384** : Haute résolution
|
||
- **512x512** : Splash screens, maskable icons
|
||
|
||
**Maskable icons** : Icônes adaptatives avec safe zone pour Android
|
||
|
||
## 🔧 Génération des Icônes
|
||
|
||
### Utilisation du Script
|
||
|
||
```bash
|
||
# Générer les icônes SVG
|
||
python generate_pwa_icons.py
|
||
```
|
||
|
||
Le script crée :
|
||
- Icônes régulières (toutes tailles)
|
||
- Icônes maskables (192x192, 512x512)
|
||
- Icône de recherche (96x96)
|
||
- README avec instructions de conversion
|
||
|
||
### Conversion SVG → PNG (Production)
|
||
|
||
**Option 1 : ImageMagick**
|
||
```bash
|
||
cd frontend/icons
|
||
for file in *.svg; do
|
||
size=$(echo $file | grep -oP '\d+x\d+' | head -1 | cut -d'x' -f1)
|
||
convert -background none -resize ${size}x${size} "$file" "${file%.svg}.png"
|
||
done
|
||
```
|
||
|
||
**Option 2 : Inkscape**
|
||
```bash
|
||
cd frontend/icons
|
||
for file in *.svg; do
|
||
size=$(echo $file | grep -oP '\d+x\d+' | head -1 | cut -d'x' -f1)
|
||
inkscape "$file" --export-filename="${file%.svg}.png" --export-width=$size
|
||
done
|
||
```
|
||
|
||
**Option 3 : Outils en ligne**
|
||
- https://cloudconvert.com/svg-to-png
|
||
- https://convertio.co/svg-png/
|
||
|
||
**Note** : Les navigateurs modernes supportent les SVG directement, la conversion PNG est optionnelle.
|
||
|
||
## 🎨 Personnalisation
|
||
|
||
### Modifier les Couleurs
|
||
|
||
Éditez `frontend/manifest.json` :
|
||
```json
|
||
{
|
||
"theme_color": "#2563eb", // Couleur de la barre d'état
|
||
"background_color": "#1a1a1a" // Couleur de fond au lancement
|
||
}
|
||
```
|
||
|
||
### Modifier les Icônes
|
||
|
||
1. Éditez `generate_pwa_icons.py`
|
||
2. Modifiez les fonctions `create_svg_icon()` et `create_maskable_svg_icon()`
|
||
3. Régénérez : `python generate_pwa_icons.py`
|
||
|
||
### Ajouter des Raccourcis
|
||
|
||
Éditez `frontend/manifest.json` :
|
||
```json
|
||
{
|
||
"shortcuts": [
|
||
{
|
||
"name": "Nouvelle Note",
|
||
"url": "/?action=new",
|
||
"icons": [{"src": "/static/icons/new-96x96.png", "sizes": "96x96"}]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 🔍 Débogage
|
||
|
||
### Vérifier l'Installation PWA
|
||
|
||
**Chrome DevTools** :
|
||
1. Ouvrez DevTools (F12)
|
||
2. Onglet "Application"
|
||
3. Section "Manifest" : Vérifiez les métadonnées
|
||
4. Section "Service Workers" : Vérifiez l'enregistrement
|
||
5. Section "Cache Storage" : Inspectez le cache
|
||
|
||
### Tester le Mode Hors Ligne
|
||
|
||
1. DevTools → Onglet "Network"
|
||
2. Cochez "Offline"
|
||
3. Rechargez la page
|
||
4. L'application doit fonctionner avec les données en cache
|
||
|
||
### Logs du Service Worker
|
||
|
||
```javascript
|
||
// Dans la console du navigateur
|
||
navigator.serviceWorker.getRegistration().then(reg => {
|
||
console.log('Service Worker:', reg);
|
||
console.log('Active:', reg.active);
|
||
console.log('Waiting:', reg.waiting);
|
||
});
|
||
```
|
||
|
||
### Forcer la Mise à Jour
|
||
|
||
```javascript
|
||
// Dans la console
|
||
navigator.serviceWorker.getRegistration().then(reg => {
|
||
reg.update();
|
||
});
|
||
```
|
||
|
||
### Désinstaller le Service Worker
|
||
|
||
```javascript
|
||
// Dans la console
|
||
navigator.serviceWorker.getRegistrations().then(registrations => {
|
||
registrations.forEach(reg => reg.unregister());
|
||
});
|
||
```
|
||
|
||
## 📊 Métriques PWA
|
||
|
||
### Lighthouse Audit
|
||
|
||
1. Chrome DevTools → Onglet "Lighthouse"
|
||
2. Sélectionnez "Progressive Web App"
|
||
3. Cliquez sur "Generate report"
|
||
|
||
**Critères évalués** :
|
||
- ✅ Manifeste valide
|
||
- ✅ Service Worker enregistré
|
||
- ✅ HTTPS (ou localhost)
|
||
- ✅ Icônes appropriées
|
||
- ✅ Responsive design
|
||
- ✅ Mode hors ligne
|
||
|
||
### Score Attendu
|
||
|
||
ObsiGate devrait obtenir **90-100/100** sur l'audit PWA.
|
||
|
||
## 🚀 Déploiement
|
||
|
||
### Prérequis
|
||
|
||
- **HTTPS obligatoire** en production (sauf localhost)
|
||
- Service Worker nécessite une connexion sécurisée
|
||
|
||
### Configuration Reverse Proxy
|
||
|
||
**Nginx** :
|
||
```nginx
|
||
location /sw.js {
|
||
add_header Cache-Control "no-cache, no-store, must-revalidate";
|
||
add_header Service-Worker-Allowed "/";
|
||
proxy_pass http://obsigate:8080;
|
||
}
|
||
|
||
location /manifest.json {
|
||
add_header Cache-Control "public, max-age=3600";
|
||
proxy_pass http://obsigate:8080;
|
||
}
|
||
```
|
||
|
||
**Traefik** :
|
||
```yaml
|
||
http:
|
||
middlewares:
|
||
sw-headers:
|
||
headers:
|
||
customResponseHeaders:
|
||
Cache-Control: "no-cache, no-store, must-revalidate"
|
||
Service-Worker-Allowed: "/"
|
||
```
|
||
|
||
## 🔒 Sécurité
|
||
|
||
### Content Security Policy
|
||
|
||
Le service worker respecte la CSP définie dans le backend :
|
||
- Scripts : `'self'` + CDN autorisés
|
||
- Styles : `'self'` + CDN autorisés
|
||
- Images : `'self'` + data URIs
|
||
|
||
### Permissions
|
||
|
||
PWA installée demande les mêmes permissions que le site web :
|
||
- Aucune permission supplémentaire requise
|
||
- Notifications : optionnelles (désactivées par défaut)
|
||
|
||
## 📱 Compatibilité
|
||
|
||
| Plateforme | Support | Notes |
|
||
|------------|---------|-------|
|
||
| Chrome Desktop | ✅ Complet | Installation native |
|
||
| Edge Desktop | ✅ Complet | Installation native |
|
||
| Firefox Desktop | ⚠️ Partiel | Pas d'installation, SW fonctionne |
|
||
| Safari Desktop | ⚠️ Partiel | Support limité |
|
||
| Chrome Android | ✅ Complet | Installation + notifications |
|
||
| Safari iOS | ✅ Complet | "Add to Home Screen" |
|
||
| Samsung Internet | ✅ Complet | Installation native |
|
||
|
||
## 🎓 Ressources
|
||
|
||
- [MDN - Progressive Web Apps](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps)
|
||
- [web.dev - PWA](https://web.dev/progressive-web-apps/)
|
||
- [PWA Builder](https://www.pwabuilder.com/)
|
||
- [Workbox (Google)](https://developers.google.com/web/tools/workbox)
|
||
|
||
## ❓ FAQ
|
||
|
||
**Q : Puis-je utiliser ObsiGate sans l'installer ?**
|
||
R : Oui, l'installation est optionnelle. Le site web fonctionne normalement.
|
||
|
||
**Q : Les données sont-elles synchronisées hors ligne ?**
|
||
R : Non, le mode hors ligne utilise le cache local. Les modifications nécessitent une connexion.
|
||
|
||
**Q : Comment désinstaller l'application ?**
|
||
R : Desktop : Clic droit sur l'icône → "Désinstaller". Mobile : Maintenez l'icône → "Supprimer".
|
||
|
||
**Q : Le cache prend-il beaucoup d'espace ?**
|
||
R : Non, le cache est limité à ~50 entrées dynamiques + assets statiques (~5-10 MB).
|
||
|
||
**Q : Puis-je désactiver le service worker ?**
|
||
R : Oui, supprimez l'enregistrement dans DevTools ou commentez `registerServiceWorker()` dans `app.js`.
|
||
|
||
---
|
||
|
||
**ObsiGate PWA** - Vos notes Obsidian, partout, tout le temps. 📖✨
|