Stockage local-first des projets, médias et temporaires
Modèle
- IndexedDB : métadonnées structurées, index, commandes/journal et petits blobs quand cela reste raisonnable.
- OPFS : médias volumineux, caches, proxies, rendus intermédiaires et écritures en place. Son contenu est privé à l'origine et n'est pas directement visible comme un fichier utilisateur.
- File System Access ou téléchargement : import et export explicitement choisis par l'utilisateur ; ne pas confondre un handle accordé avec une sauvegarde durable universelle.
- Cloud : copie distante, historique, partage et synchronisation ; jamais le seul endroit où vit un brouillon non envoyé si le produit se dit local-first.
Résilience
- Écrire un journal de commandes ou des snapshots versionnés avec commit atomique.
- Garder les médias immuables par identifiant de contenu lorsque possible ; le projet référence ces identifiants.
- Au démarrage, détecter une session incomplète et proposer une récupération explicite.
- Mesurer le quota, demander la persistance quand le parcours le justifie et gérer proprement un refus ou un stockage évincé.
- Fournir un export de projet portable avec version de format et manifeste.
Anti-patterns
- Médias en base64 dans
localStorage. - Un énorme objet projet réécrit à chaque frappe.
- Considérer le cache du Service Worker comme une base de données de documents.
- Promettre « aucune perte » sans tester fermeture brutale, quota plein, mise à jour et migration.
Tests
Crash pendant écriture, quota épuisé, suppression des données du site, navigation privée, migration N-1/N-2, fichier absent, projet partiellement synchronisé et reprise après mise hors ligne.