diff --git a/docs/analyse-onboarding-2026-09.md b/docs/analyse-onboarding-2026-09.md new file mode 100644 index 0000000..cc6b08e --- /dev/null +++ b/docs/analyse-onboarding-2026-09.md @@ -0,0 +1,119 @@ +# Analyse — Embarquement des nouveaux utilisateurs + +> Date : 2026-09-24 +> Base : code de v0.15.0 (`main`), guide utilisateur, fixtures CSV, configuration Tauri. +> Question : comment faciliter l'embarquement d'un nouvel utilisateur ? Options de départ : tour guidé intégré, vidéo, guide utilisateur bonifié, jeu de données de test. +> Statut : document de travail, à faire évoluer. + +## Verdict + +Traiter d'abord le décrochage réel (états vides, liste de démarrage, dossier d'exemple, guides d'export CSV par banque), puis les données de démo et le guide publié sur le site. La vidéo et le tour guidé viennent en troisième, seulement si les testeurs le demandent. + +Le nouvel utilisateur décroche sur trois étapes hors de l'app que rien dans l'app n'accompagne : choisir un dossier d'import, créer un sous-dossier par banque, exporter le CSV depuis le site bancaire. Un tour guidé ne peut pas l'y accompagner ; une vidéo vieillit à chaque refonte ; seuls le guide et les données d'exemple y répondent. + +## 1. Ce qui existe déjà, et où ça coince + +- **Le guide est enterré.** Il vit en 3e section de Paramètres → Utilisateurs (`UsersSettingsPage.tsx`), sous les cartes Compte et Licence, sans lien dans la barre latérale ni sur le site. Les routes `/docs` et `/changelog` ne sont plus que des redirections. Il existe en trois copies à maintenir : `docs/guide-utilisateur.md` (559 lignes) plus les clés `docs.*` de `fr.json` et `en.json` rendues par `DocsContent.tsx`. +- **Les popovers « ? »** (`PageHelp.tsx`) couvrent 8 pages (dashboard, import, transactions, catégories, ajustements, budget, rapports, paramètres) avec des astuces. Bon socle contextuel, sous-exploité : aucun lien profond vers le guide. +- **Aucun état vide guidé.** Un nouveau profil arrive sur un tableau de bord à 0 $ sans consigne (`DashboardPage.tsx` n'a pas de branche « aucune transaction »). Le « Démarrage rapide » du guide compte 7 étapes, dont 3 hors de l'app. +- **Contraintes pour la vidéo.** Installeurs à 5,5 Mo (Windows) et 9,7 Mo (Linux, `.deb` et `.rpm`). La CSP de `tauri.conf.json` n'a ni `media-src` ni `frame-src`, et le principe privacy-first interdit un iframe YouTube. Une vidéo vit donc sur le site, ouverte dans le navigateur système via `tauri-plugin-opener`, déjà présent. +- **Matière pour un jeu de données.** 15 fixtures CSV de test existent dans `src/__fixtures__/csv/` (formats réels Desjardins, BNC, RBC, Tangerine) mais restent minuscules. Les profils étant des bases séparées, un profil de démonstration est naturel. +- **Gating Free.** Le multi-profil est verrouillé en édition Free (ADR 0017). Une démo doit donc vivre soit hors du compte de profils, soit comme données chargeables puis effaçables dans le profil courant. +- **Drapeaux.** `user_preferences` (par profil, via `userPreferenceService.ts`) peut porter un « liste masquée » ou « tour vu » sans migration. + +## 2. Options évaluées + +Efforts en jours de développement. Aucune option ne demande de migration DB. + +| Option | Effort (j) | Complexité | Vieillit | Valeur onboarding | +|---|---|---|---|---| +| A. États vides avec appel à l'action (dashboard, import, transactions, budget) | 1 à 2 | faible | non | haute | +| B. Liste de démarrage sur le tableau de bord, calculée depuis l'état réel | 2 à 3 | faible à moyenne | non | haute | +| C. Tour guidé en surimpression (driver.js) | 3 à 5 | moyenne | oui, à chaque refonte | moyenne | +| D1. Dossier d'exemple : bouton qui écrit 2 ou 3 CSV réalistes dans le dossier d'import | 1 à 2 | faible | non | haute | +| D2. Données de démo complètes (18 mois, règles, budget, snapshot Bilan) | 3 à 5 | moyenne | peu | haute | +| E. Guide bonifié : source unique, tâches, captures, export CSV par banque, publication site | 3 à 5 | faible | oui, captures | haute | +| F. Vidéos courtes avec voix remplacée | 1 par vidéo, puis rejouer à chaque changement visuel | faible technique, haute maintenance | vite | moyenne | + +### A. États vides + +Chaque page vide dit quoi faire ensuite et offre le bouton qui y mène : « Choisir un dossier d'import » sur le tableau de bord, « Créer un dossier d'exemple » sur Import, « Importer d'abord » sur Transactions et Budget. Zéro dépendance, zéro drapeau à stocker. + +### B. Liste de démarrage + +C'est le « tour guidé » qui ne bloque personne. Six cases cochées depuis les données, pas depuis un drapeau : + +1. Profil créé +2. Dossier d'import choisi +3. Première source détectée +4. Premier import réalisé +5. Première règle de catégorisation créée +6. Premier budget saisi + +Elle ne se désynchronise jamais de l'UI et disparaît une fois complète ou masquée (préférence par profil dans `user_preferences`). La plupart des produits qui ont abandonné les tours en surimpression sont passés à ce modèle. + +### C. Tour guidé + +Possible, mais en second. driver.js 1.8.0 est MIT, environ 5 ko, sans dépendance React. react-joyride 3.2.0 est MIT mais plus lourd et lié à React. Shepherd.js 15 et intro.js 8 sont passés AGPL-3.0, à écarter. Un tour dépend de sélecteurs DOM, d'un drapeau par profil et de textes i18n en double. Il se casse à chaque refonte (l'import a été refait en août 2026, le gating en septembre) et ne montre que ce que l'écran affiche. Cinq ou six étapes maximum, seulement si les testeurs le réclament. + +### D1. Dossier d'exemple + +Enseigne la convention en la faisant. Sur la page Import vide, « Créer un dossier d'exemple » écrit `Exemple Desjardins/releve-2026-08.csv` et `Exemple Tangerine/releve-2026-08.csv` via les commandes fs existantes, dans le dossier d'import. L'utilisateur voit la détection automatique, l'aperçu signé et la déduplication sur des fichiers aux formats réels. Une fois ses vrais relevés en place, il supprime les deux sous-dossiers. + +### D2. Données de démo complètes + +Sert quatre usages à la fois : premier contact convaincant en 30 secondes, support d'enregistrement pour la vidéo, captures du guide, cible stable pour un tour. + +- Générer les données en code déterministe (marchands québécois, montants crédibles, alignés sur le seed de catégories standard pour que l'auto-catégorisation tombe à 80 % et plus). Rien à embarquer dans l'installeur. +- Pour respecter le gating Free : « Charger les données d'exemple » dans le profil courant vide, transactions rattachées à une source d'import nommée `Exemple`, et « Effacer les données d'exemple » qui supprime par source. Le budget et le snapshot Bilan de démo suivent le même marquage. +- Point d'attention : le réalisme. Des données visiblement fausses (montants ronds, marchands génériques) enlèvent la valeur de démonstration. + +### E. Guide bonifié + +Trois chantiers indépendants : + +1. **Source unique.** Deux markdown FR/EN copiés dans `public/` par le mécanisme `syncChangelogs` déjà en place dans `vite.config.ts` et rendus in-app comme le changelog. Supprime le doublon i18n des clés `docs.*`. +2. **Contenu.** Réorganiser par tâches (« Je veux… »), ajouter des captures prises sur les données de démo, et surtout des pages « Exporter un CSV depuis AccèsD, Tangerine, RBC, BNC », le vrai point de friction que rien dans l'app ne peut résoudre. +3. **Visibilité.** Entrée « Aide » dans la barre latérale, liens profonds depuis chaque popover « ? », publication sur la page produit du site (partageable, indexé). + +### F. Vidéo : le workflow ajusté + +Le workflow prévu (enregistrer l'écran en lisant un texte, puis remplacer la voix) tient, avec quatre ajustements. Le coût réel n'est pas la production mais l'obsolescence : chaque changement visuel invalide le clip. + +| Point | Recommandation | Pourquoi | +|---|---|---| +| Données à l'écran | Les données de démo (D2), jamais les finances réelles | Rien de personnel dans un fichier public, résultat reproductible | +| Remplacement de la voix | Speech-to-speech (ElevenLabs Voice Changer, ou RVC en local) plutôt qu'une synthèse pure | Conserve le timing et la prosodie : l'image reste synchronisée sans montage | +| Synthèse pure, si retenue | Azure Neural (voix fr-CA Sylvie, Antoine, Jean), ElevenLabs multilingue ; Piper en libre mais qualité moyenne | Force à recaler chaque segment sur l'enregistrement | +| Format | 3 ou 4 clips de 60 à 90 s, un par tâche (importer, catégoriser, budget, rapports) | Un clip court se refait en une heure ; une visite complète de 10 min ne se refait jamais | +| Hébergement | mp4 sur le site ou le VPS, ouvert dans le navigateur ; pas d'iframe YouTube dans l'app | CSP sans `frame-src`, principe privacy-first, tracking | +| Bilingue | UI en français avec voix anglaise, ou sous-titres | Le bilingue complet double le coût de chaque clip | + +Alternative à faible coût : clips WebP muets de 5 à 10 secondes dans le guide, un par geste. Sans voix ni langue, refaits en 10 minutes. + +### Écartés + +- Outils de démo interactive SaaS (Arcade, Storylane) : tracking et capture desktop difficile. +- Assistant en ligne dans l'app : réseau, contraire au principe privacy-first. + +## 3. Recommandation + +Trois phases, dans cet ordre. Les deux premières ne demandent aucune migration DB et ne vieillissent pas ; la troisième est conditionnelle. + +| Phase | Contenu | Durée | Ce que ça règle | +|---|---|---|---| +| 1 | A + B + D1 + pages « exporter son CSV » par banque dans le guide | 1 semaine | Le décrochage réel : dossier, sous-dossier, CSV | +| 2 | D2 + E (source unique, entrée Aide, publication site, captures sur la démo) | 1 semaine | Premier contact en 30 s, guide trouvable et maintenable | +| 3, optionnelle | 3 vidéos courtes sur la démo avec voix remplacée ; tour driver.js seulement si les testeurs le demandent | 1 j par vidéo, 3 à 5 j pour le tour | Marketing et réassurance, plus qu'onboarding | + +**Mesure.** Sans télémétrie, la mesure passe par les deux testeurs et le Feedback Hub : leur demander explicitement à quelle étape ils ont hésité, avant et après la phase 1. + +**Prochaine étape proposée.** Un `/spec` sur la phase 1 pour trancher le détail des six cases de la liste de démarrage et le contenu exact des deux CSV d'exemple, puis une milestone Forgejo. + +## 4. Questions ouvertes + +- [ ] Quelles banques couvrir en priorité dans les guides d'export CSV ? (Desjardins, Tangerine, RBC, BNC ont déjà une signature d'import) +- [ ] Le dossier d'exemple doit-il aussi couvrir un fichier de titres pour le Bilan (import de titres #245) ? +- [ ] La liste de démarrage compte-t-elle le budget, verrouillé en Free ? Sinon, cinq cases en Free, six en Base et plus. +- [ ] Où publier le guide sur le site : sous `/produits/simpl-resultat` ou une section `/guide` dédiée ? +- [ ] Voix de remplacement : outil retenu et budget mensuel acceptable.