📝 Note

pro/syncs3 app/journal

electronreactrcloner2cloudflarevitetypescriptnode-cronkeytar

Journal — syncS3-app

Sessions de travail · ordre antéchronologique Liens : Architecture · Decisions · TODO


2026-06-01

✅ Fait

  • Application complète scaffoldée manuellement (electron-vite react-ts, sans scaffold interactif)
  • Main process : rclone.ts — détection binaire, écriture rclone.conf isolé, spawn sync avec streaming stdout/stderr, dry-run
  • Main process : credentials.ts — keytar (OS keychain) avec fallback AES-256-GCM sur fichier chiffré
  • Main process : tray.ts — icône systray 3 états (idle/syncing/error), menu contextuel “Sync Now” / “Open” / “Quit”
  • Main process : scheduler.ts — wrapper node-cron, supporte interval (minutes/heures) et expression cron
  • Main process : index.ts — cycle de vie Electron, fenêtre minimize-to-tray, tous les handlers IPC
  • Preload : index.ts — contextBridge complet, aucun nodeIntegration renderer
  • Renderer : Config.tsx — picker dossier natif, formulaire R2 (accountId, bucket, accessKey, secretKey), test connexion (rclone lsf)
  • Renderer : Sync.tsx — toggle dry-run (défaut ON), log live, barre de progression parsée depuis --progress, stats dernière sync
  • Renderer : Scheduler.tsx — mode disabled/interval/cron, validation expression
  • CSS dark theme complet (sans dépendance UI externe)
  • Icônes tray PNG 16×16 générées (vert/orange/rouge)
  • Build propre : npm run build → 3 bundles sans erreur
  • Voir aussi : Architecture Decisions

🧠 Décisions

  • electron-vite (pas de setup custom Electron+Vite) → voir Decisions
  • Credentials : keytar prioritaire, fallback chiffré local → voir Decisions
  • rclone.conf isolé dans userData → pas de conflit avec config rclone globale utilisateur → voir Decisions

⚠️ Points d’attention

  • keytar nécessite recompilation native (node-gyp) selon plateforme — à tester sur Windows/macOS cibles
  • Icônes tray 16×16 minimales (PNG monochrome) — à remplacer par vraies icônes avant livraison
  • electron-builder configuré mais non testé en mode package complet (NSIS/DMG)
  • Pas de mise à jour automatique (electron-updater non intégré — hors scope)
  • Parsing progress --progress rclone : regex (\d+)% — à valider sur output rclone réel

➡️ Prochain

  • Tester npm run dev sur machine cible (Windows + macOS)
  • Vérifier compilation keytar native (npm rebuild keytar)
  • Remplacer icônes tray placeholder par assets définitifs
  • Tester connexion R2 réelle (accountId + bucket + credentials)
  • Valider format output rclone --progress pour parsing correct

2026-06-01 — Initialisation du projet

  • Création de la documentation vault via /init
  • Répertoire source vide — projet en phase de démarrage
  • Stack et périmètre à définir avec le client/équipe