Added optionnal online storage and cross-client sync
This commit is contained in:
39
README.md
39
README.md
@@ -4,8 +4,9 @@ Offline-first PWA for tracking hours on site. While the app is running, it can s
|
||||
the day automatically and prompt for its end. Each task begins where the previous
|
||||
one ended. Closed days have concise summaries ready to copy into a paper logbook.
|
||||
|
||||
Built for use outdoors: high contrast, large targets, usable with gloves on. All data
|
||||
stays on the device (IndexedDB); there is no backend and nothing is uploaded.
|
||||
Built for use outdoors: high contrast, large targets, usable with gloves on. Data
|
||||
is saved locally in IndexedDB. Optional end-to-end encrypted synchronization shares
|
||||
it between authorized devices without e-mail or password registration.
|
||||
|
||||
## Development
|
||||
|
||||
@@ -27,7 +28,8 @@ Dans **Réglages → Gérer les données et sauvegardes**, l’écran **Données
|
||||
sauvegardes** regroupe l’export, l’import, la vérification des sauvegardes et la
|
||||
durée de conservation. Le rappel **Sauvegarder** ouvre aussi cet écran.
|
||||
|
||||
Les données restent dans le navigateur sur cet appareil, sans synchronisation.
|
||||
Les données restent disponibles dans le navigateur sur cet appareil. La synchronisation
|
||||
chiffrée peut être activée séparément pour les partager avec vos autres appareils.
|
||||
Effacer les données du site ou perdre l’appareil peut faire perdre l’historique :
|
||||
gardez une copie vérifiée du fichier exporté sur un autre support.
|
||||
|
||||
@@ -213,7 +215,8 @@ modification sont refusés sans écriture partielle.
|
||||
|
||||
Ouvrez **Réglages → Consulter les statistiques**. Le bouton **Stats** de la barre
|
||||
du bas n'apparaît que sur cette page ; les autres écrans gardent leurs trois
|
||||
boutons habituels. La page fonctionne hors ligne et ne transmet aucune donnée.
|
||||
boutons habituels. La page fonctionne hors ligne. Les calculs de statistiques restent sur l’appareil ;
|
||||
la synchronisation facultative peut partager leur historique source chiffré.
|
||||
|
||||
Les filtres couvrent tout l'historique, le mois, l'année, les 30 derniers jours
|
||||
ou une plage de dates inclusive. Les journées en cours sont exclues par défaut.
|
||||
@@ -246,8 +249,10 @@ In dev the console exposes `timelog.seed()` to generate 20 days of realistic his
|
||||
|
||||
## Deployment
|
||||
|
||||
The stack is a single container: a multi-stage build compiles the app and Caddy serves
|
||||
the static output, obtaining and renewing a Let's Encrypt certificate on its own.
|
||||
The stack contains the static app served by Caddy and an optional-use synchronization
|
||||
API backed by SQLite in a persistent volume. Caddy obtains and renews the HTTPS
|
||||
certificate. Synchronization stays disabled in each client until explicitly activated.
|
||||
See [SYNC.md](SYNC.md) for pairing, encryption, recovery, quotas and server backups.
|
||||
|
||||
```sh
|
||||
cp .env.example .env
|
||||
@@ -349,8 +354,8 @@ dans [PRODUCTION.md](PRODUCTION.md).
|
||||
**Vérifier le fichier exporté…** relit le fichier téléchargé, contrôle qu’il est
|
||||
importable et compare son contenu à l’export. La date de la dernière sauvegarde
|
||||
vérifiée est distincte de celle du dernier export préparé. Après sept jours sans
|
||||
export vérifié, Pardis affiche un rappel pendant son utilisation. Aucune donnée
|
||||
n’est envoyée à un serveur ; conservez le fichier hors de cet appareil.
|
||||
export vérifié, Pardis affiche un rappel pendant son utilisation. L’export reste local ; conservez le fichier hors de cet appareil. La synchronisation
|
||||
facultative utilise un coffre distinct et ne remplace pas cette sauvegarde.
|
||||
|
||||
La purge affiche une liste figée de journées. Sauvegarde et suppression partagent
|
||||
une transaction ; une correction concurrente bloque la purge et demande une
|
||||
@@ -369,3 +374,21 @@ tests. Elle télécharge uniquement la variante utilisée par les tests sans int
|
||||
et accorde 180 secondes à chaque connexion de téléchargement, avec les nouvelles
|
||||
tentatives intégrées à Playwright. L’installation dispose de 20 minutes et le job
|
||||
de validation de 30 minutes. Une erreur d’installation bloque le déploiement.
|
||||
|
||||
|
||||
## Synchronisation facultative entre appareils
|
||||
|
||||
**Données et sauvegardes → Synchronisation et appareils** permet de créer un coffre
|
||||
chiffré sans e-mail ni mot de passe, puis de lier des appareils avec un code temporaire
|
||||
ou un QR code et une confirmation sur l’écran dédié. La saisie reste locale et
|
||||
fonctionne hors ligne. Les journées concurrentes sont conservées pour résolution.
|
||||
Un document de secours permet de retrouver l’accès après perte des appareils.
|
||||
|
||||
Les règles métier sont partagées ; le thème et le suivi des sauvegardes restent
|
||||
locaux. Un appareil est responsable des automatismes, avec proposition de transfert
|
||||
à l’ouverture sur un appareil secondaire. Les demandes d’association ne produisent
|
||||
aucune alerte ailleurs dans l’application.
|
||||
|
||||
Le protocole, les limites de sécurité, le fonctionnement des suppressions et les
|
||||
commandes de sauvegarde/restauration du serveur sont documentés dans [SYNC.md](SYNC.md).
|
||||
Pour le développement, lancer aussi `npm run sync:server` avec Node.js 24.
|
||||
|
||||
Reference in New Issue
Block a user