Journal des chantiers
Une section par chantier, la plus récente en bas : ce qui change pour l’utilisateur, les fichiers et tests concernés, et les réglages à faire.
La documentation à jour est dans docs/ (point d’entrée : docs/README.md). Le journal complet avant le 13/10/2026 est archivé dans docs/archives/AMELIORATIONS-jusqu-au-12-10-2026.md.
Lot 10 · frise de la Fiscalité
- La ligne verte avance jusqu’à l’étape ouverte (3, 4 ou 5), et plus seulement entre les étapes terminées.
- Une étape déjà dépassée mais pas terminée garde son numéro, entouré, avec « à terminer » dessous. Une étape terminée garde sa coche. Le lecteur d’écran annonce « faite » ou « à terminer ».
- Les assistants « Nouveau bien » et « Nouveau bail » ne changent pas.
- Calcul pur dans
src/lib/stepper.ts. Tests : tests/ux-frise.test.ts. Parcours vérifié (e2eUX10) à 1440 px et 390 px, en clair et en sombre.
Réglages à faire : aucun. Publier la mise à jour (OTA).
- « Aussi : Travaux & avaries » devient « Ajouter au menu : Travaux & avaries ». Un appui ouvre la rubrique et l’ajoute au menu pour de bon, avec « Annuler » dans le message. Avant, elle disparaissait dès qu’on quittait la page, tant qu’aucun signalement n’existait.
- Sur téléphone, même chose dans le menu (« Apparaîtront quand elles vous serviront. Un appui les ajoute au menu tout de suite. »).
- Réglages › Roo et apparence : un interrupteur par rubrique (« Toujours afficher Travaux & avaries »…), en plus de « Toutes les rubriques dans le menu ».
- Le choix est enregistré sur le compte : il vaut sur tous vos appareils (script 046). Sans le script, il reste sur l’appareil, sans message d’erreur.
- Calcul pur dans
src/lib/navVisibility.ts (mergePinned). Tests : tests/ux-menu-epingle.test.ts. Parcours vérifiés (e2eUX10, e2eT04) à 1440 px et 390 px.
Réglages à faire : exécuter 046_rubriques_menu.sql (rejouable), puis publier la mise à jour (OTA).
Fiabilisation · file des écritures en arrière-plan
- Les enregistrements faits « en arrière-plan » (modifier un locataire, une dépense, un document…) partent désormais dans l’ordre pour une même fiche : création, puis modification, puis rangement d’un document. Avant, ils partaient en parallèle et pouvaient arriver dans le désordre.
- Des fiches différentes restent enregistrées en parallèle : pas de file unique, qui ralentissait tout (essai T01 retiré).
- Coupure réseau ou serveur indisponible : nouvel essai après 1 s, 3 s puis 9 s, au lieu d’un échec immédiat suivi d’un rechargement complet. Un refus de la base (droits, contrainte, formule) n’est jamais réessayé. Si une création était en fait arrivée (réponse perdue), le nouvel essai la reconnaît et n’affiche pas d’erreur.
- Une demande de devis envoyée à un artisan ajouté à l’instant attend que l’artisan soit enregistré.
- Limite : une saisie faite hors ligne plus de 15 secondes n’est pas gardée pour plus tard. Garder les saisies hors ligne demanderait de réécrire chaque enregistrement sous une forme qu’on peut stocker sur l’appareil ; c’est une étape à part.
- Module :
src/data/writeQueue.ts. Tests : tests/fi-file-ecritures.test.ts.
Réglages à faire : aucun. Publier la mise à jour (OTA).
Lot 10 · tableau d’amortissement de la banque
- Sur la fiche du prêt, nouvelle carte « Tableau d’amortissement de la banque » : on dépose le PDF ou une photo du tableau remis par la banque. Le document est rangé dans Documents, avec le bien et le prêt.
- Roo lit le tableau (1 crédit, comme toute lecture de document) : banque, montant, taux, durée, première échéance, assurance, et pour chaque année les intérêts et l’assurance. Quand le tableau détaille les échéances, Rentoo fait lui-même les totaux par année (plus sûr qu’un total recopié) pour les années utiles à la déclaration (3 ans avant à 1 an après) ; pour les autres années, il reprend les totaux imprimés.
- Carte de vérification avant d’appliquer : paramètres qui changent (ancien → nouveau, case « Mettre la fiche à jour avec ces paramètres »), puis une ligne par année avec le montant de la banque et le calcul de Rentoo à côté. « À vérifier » signale un écart de plus de 25 % (différé, taux variable, remboursement anticipé…). Rien n’est enregistré avant « Appliquer », et « Annuler » remet tout comme avant (prêt, années, document).
- Les montants de la banque remplacent le calcul dans la Fiscalité, l’export comptable et la ligne « Intérêts par année » (badge « Tableau banque »).
- Une attestation annuelle déjà saisie reste prioritaire : elle n’est jamais remplacée par le tableau (« Attestation gardée »). Saisir une attestation après coup remplace le montant du tableau.
- Année incomplète (Roo n’a pas lu toutes les échéances de l’année) : elle n’est jamais reprise ; elle garde le calcul de Rentoo.
- Nouveau prêt : le tableau remplit la fiche ; les montants par année sont enregistrés avec le prêt.
- Correction au passage : ouverte par un lien direct (ou après actualisation), la fiche du prêt s’affichait vide le temps du chargement et le restait. Elle se remplit maintenant dès que le prêt est chargé.
- Calcul pur dans
src/lib/loanSchedule.ts, carte dans src/components/LoanScheduleImport.tsx. Tests : tests/ux-tableau-amortissement.test.ts. Parcours vérifié (e2eUX10) à 1440 px et 390 px, en clair et en sombre, avec le faux service IA.
Réglages à faire : exécuter 047_tableau_amortissement.sql (rejouable), redéployer la fonction copilot, puis publier la mise à jour (OTA). Sans le script, les montants sont quand même enregistrés (sans le badge « Tableau banque ») et le document reste rangé dans Documents.
Symptôme : le paiement passait chez Stripe, mais au retour dans Rentoo rien ne s’activait. L’application attendait uniquement le message de Stripe à la fonction billing (webhook). S’il n’arrivait pas, ou s’il était refusé (secret mal copié, prix inconnu), rien ne se passait, sans aucun message.
- Au retour du paiement, l’application relit elle-même le paiement chez Stripe (nouvelle action
sync de la fonction billing, avec l’identifiant de la session de paiement) et active la formule. Le webhook reste la voie normale ; la relecture est un filet de sécurité.
- Sur téléphone, le paiement s’ouvre dans le navigateur : au retour dans l’application, la relecture se fait automatiquement.
- Nouveau bouton « J’ai payé, ma formule n’apparaît pas » sur l’écran Mon abonnement, tant qu’aucune formule payée n’est active.
- Messages clairs au lieu du silence : secret
BILLING_SECRET différent de celui de la base (« Paiement momentanément indisponible… ») ; prix Stripe absent des réglages (« Paiement reçu, mais la formule n’est pas reconnue… rien n’est à repayer ») ; webhook refusé, avec un diagnostic dans les journaux de la fonction (sans jamais écrire le secret).
- Sécurité : on ne peut relire que son propre paiement (la session et l’abonnement doivent porter l’identifiant du compte connecté) ; un identifiant de session mal formé est ignoré. Relire deux fois donne le même résultat (le mois offert au parrain n’est compté qu’une fois).
- Les corrections de l’autre session sur la fonction (
billingSecret(), webhookSecret(), diagnostic de signature, prix inconnu renvoyé à Stripe) sont reprises telles quelles.
- Tests :
tests/ux-paiement-retour.test.ts ; fonction vérifiée avec le faux Stripe (fnSync, fnSyncMis, fn19).
Réglages à faire : redéployer la fonction billing (npm run deployer s’en charge), puis publier la mise à jour (OTA). Aucun nouveau secret. Si le problème persiste, vérifiez dans Stripe (Développeurs › Webhooks) le code de réponse des derniers envois : 400 = secret du webhook, 503 = BILLING_SECRET, 422 = prix STRIPE_PRICE_*.
Fiabilisation · dates à l’heure de Paris
- Entre minuit et 2 h (heure de Paris), la date « universelle » est encore celle de la veille. Plusieurs calculs s’en servaient pour « aujourd’hui ». Ils utilisent maintenant le jour local :
- date limite des relances et de la mise en demeure ;
- report d’un conseil de Roo (« Plus tard ») ;
- date proposée pour un état des lieux, un bail ou une entrée dans les lieux ;
- nom des fichiers (photo, attestation de loyer, export) ;
- mois de la fête des loyers encaissés ;
- compteur de quittances du mois ;
- côté serveur : bail « en cours » lors de l’invitation d’un locataire (fonction
location, qui tourne en heure universelle).
- Nouveau calcul commun
addDaysISO (ajout de jours sur le calendrier, sans fuseau), utilisé pour ces dates.
- Les autres calculs relevés à l’audit (une vingtaine) travaillaient déjà sur des dates de calendrier sans fuseau : ils étaient justes et n’ont pas changé.
- Tests à l’heure de Paris, à 0 h 30 :
tests/fi-dates-paris.test.ts. Les scénarios du navigateur écrits pour une date précise ont maintenant une horloge figée (e2e/suites.json, « horloge »).
Réglages à faire : redéployer la fonction location, puis publier la mise à jour (OTA).
Fiabilisation · erreurs qui ne passent plus inaperçues
- Une cinquantaine d’erreurs étaient « avalées » sans trace. Je les ai relues une par une :
- celles qui touchent une donnée ou un envoi sont maintenant notées dans le journal des erreurs (
app_errors), sans bloquer l’écran : e-mails aux candidats et aux locataires, notification au bailleur, courrier de révision dans l’espace locataire, candidat retenu, état des lieux signé ou rattaché au bail, bail signé rattaché, ouverture depuis une notification, état des alertes réglementaires ;
- ouvrir un document qui échoue affiche « Ouverture du document impossible… » au lieu d’un appui sans effet (documents de l’espace locataire, photos d’une avarie) ;
- les autres restent silencieuses, et c’est voulu : navigation privée sans stockage, copie refusée par le navigateur, partage annulé, synthèse vocale indisponible, écran de démarrage.
- Outils :
noted('ce qui a échoué') dans src/lib/errors.ts, openFailed dans src/lib/openFile.ts. Test : tests/fi-erreurs-notees.test.ts.
Réglages à faire : aucun. Publier la mise à jour (OTA).
Fiabilisation · scripts SQL suivis par la CLI Supabase, projet de recette
npm run deployer -- -Migrations (une seule fois) : relie le dossier au projet Supabase, demande le numéro du dernier script déjà exécuté à la main (045 aujourd’hui, puis 046 et 047 après ce lot), et marque ces scripts comme faits dans la base (supabase migration repair). Aucune table n’est modifiée par cette étape.
- Ensuite, l’étape « Base Supabase » du déployeur utilise
npx supabase db push : la base sait quels scripts sont passés, la CLI montre ceux qui manquent (--dry-run), puis les exécute après votre accord. Fini le copier-coller et le doute sur ce qui a été exécuté. Sans -Migrations, l’ancien mode (copier-coller guidé) reste en place.
- Projet de recette :
npm run deployer -- -Projet <identifiant> envoie les scripts SQL et les fonctions vers un autre projet Supabase (par exemple un projet « recette » créé pour essayer avant la production). Le web et les téléphones ne sont jamais déployés dans ce mode : ils restent branchés sur le projet de .env.
- Canaux des téléphones : déjà en place.
npm run deployer envoie la mise à jour au canal preview (testeurs, APK interne) ; npm run deployer -- -Canal production l’envoie aux téléphones installés depuis les magasins. Il n’y avait rien à ajouter.
- Script vérifié en simulation (PowerShell 7) : mode copier-coller, préparation
-Migrations, mode CLI, -Projet, refus du web avec -Projet.
Réglages à faire : une fois, npm run deployer -- -Migrations (mot de passe de la base demandé par la CLI). Pour une recette : créer un second projet Supabase, puis npm run deployer -- -Projet <identifiant> -Migrations en répondant 000 (projet neuf : rien n’est marqué), et npm run deployer -- -Projet <identifiant> qui exécute tous les scripts et déploie les fonctions. Attention : la préparation -Migrations vaut pour le dossier ; repassez npm run deployer -- -Migrations sur le projet de production avant le déploiement suivant en production.
Données personnelles · ce qui part vers Roo
Relevé en rédigeant la nouvelle documentation :
- La bulle de Roo, ouverte sur la fiche d’un locataire, envoyait son adresse e-mail dans le contexte de l’écran. Elle ne l’envoie plus. Le bouton « Écrire à … » garde l’adresse sur l’appareil pour ouvrir la messagerie.
- Pièce d’identité : un document rangé dans la catégorie « Identité » n’est jamais envoyé à l’IA. La lecture est refusée avec un message clair, avant tout appel, sans consommer de crédit (fonction
copilot).
- Reste ouvert : un RIB rangé dans une autre catégorie peut encore être lu par Roo si vous le lui demandez. Ses réponses ne recopient jamais l’IBAN (
stripBankDetails), mais le fichier part. Question ajoutée dans AUDIT_CORRECTIONS.md.
- Test de la fonction :
e2e/fonctions/fnPriv.js, avec le faux service IA.
Réglages à faire : redéployer la fonction copilot, puis publier la mise à jour (OTA).
Documentation · repartir d’une base propre
- Nouveau dossier
docs/, point d’entrée docs/README.md (« par où commencer » selon le lecteur) :
produit.md : les rubriques et la grammaire commune des écrans ;
architecture.md : pile technique, données, file des écritures, sécurité, fonctions, conventions ;
deploiement.md : npm run deployer et toutes ses options, scripts SQL (copier-coller ou CLI), recette, canaux, APK, web, liste des secrets (noms seulement), installation initiale ;
exploitation.md : tâches récurrentes (IRL, zones tendues, veille, sauvegardes, journal des erreurs) et dépannage (abonnement Stripe, e-mails, notifications, Roo) ;
donnees-et-securite.md : données stockées, règles d’accès, ce qui part vers l’IA, conservation, RGPD ;
tests.md : tests unitaires, tests de parcours, vérification GitHub ;
historique.md : ce qui a été construit, par grandes étapes ;
emails.md et roo.md : remplacent QUITTANCES_EMAIL.md et COPILOTE_IA.md, nettoyés (plus de partie Gmail, d’adresse personnelle ni d’identifiant de projet ; crédits Roo par formule à jour) ;
glossaire.md et identite.md : déplacés depuis la racine.
- Racine allégée :
README.md court qui renvoie vers docs/ ; AMELIORATIONS.md repart de ce lot ; AUDIT_CORRECTIONS.md ne garde que les questions ouvertes et la liste des scripts SQL (045 ajouté, il manquait).
- Archives (
docs/archives/) : ancien README lot par lot, journal et audit complets jusqu’au 12/10/2026, anciens guides de déploiement, de publication web, de lancement, de fiscalité, de mise en location, feuille de route « cohérence ».
- Les messages de l’application et des fonctions qui renvoyaient à un guide de la racine pointent vers le nouveau (
docs/emails.md, docs/roo.md, docs/deploiement.md, docs/exploitation.md).
- En rédigeant, trois écarts ont été corrigés dans le code : l’e-mail du locataire envoyé à Roo, la lecture d’une pièce d’identité par l’IA, et le code du webhook quand
BILLING_SECRET diffère (voir les sections précédentes).
Réglages à faire : redéployer location, send-receipt et billing (messages mis à jour), puis publier la mise à jour (OTA).
Fiabilisation · tests de parcours dans le dépôt, vérification sur GitHub
- Les tests de parcours (Playwright), de fonctions et de sécurité de la base sont maintenant dans le dépôt, dossier
e2e/. Avant, ils n’existaient que dans l’espace de travail de Claude. Aucune vraie clé : Supabase local et faux services (IA, Stripe, notifications, Insee).
e2e/suites.json range les tests en trois séries :
verifiee : la série qui doit passer ;
horloge : scénarios écrits pour une date précise, lancés avec l’horloge du navigateur figée au 28/09/2026 ;
a-revoir : 9 tests mis de côté, chacun avec sa raison (ancien écran d’accueil « C’est parti ! » supprimé, ancienne liste des locataires remplacée par e2eUX8, ancien écran Fiscalité, faux service IA à réaligner, sélecteur de fichier du copilote).
- Scripts remis à jour pour les nouveaux écrans : liste « Biens à suivre » (
e2eFin, e2eFin2, e2eUX3), onglets sans compteurs (e2eA12), fiche du bien refondue (e2eA10, e2eV1b), blocs de mois dans les loyers (e2eA03, e2eC12), données relatives au jour du test (e2eR2, e2eA12).
.github/workflows/verifications.yml : types, lint et tests unitaires à chaque envoi sur GitHub ; tests de parcours chaque nuit ou à la main (onglet Actions).
- Correction trouvée grâce aux tests : ouvrir directement la modification d’un bien (lien, page rechargée) affichait un formulaire vide, car le bien arrivait après le premier affichage. « Suivant » était alors bloqué (« Adresse obligatoire »). Le formulaire se remplit maintenant dès que le bien est chargé (
src/app/biens/nouveau.tsx).
Réglages à faire : pousser le dépôt sur GitHub pour activer la vérification. Rien à faire dans Supabase.
Fiabilisation · mise en ligne automatique depuis GitHub
- Nouveau fichier
.github/workflows/mise-en-ligne.yml : après chaque envoi sur master dont la vérification est verte, GitHub met en ligne sans passer par le PC.
- Recette (automatique) : scripts SQL par
supabase db push, fonctions modifiées.
- Production (après votre approbation) : scripts SQL, fonctions, version web, mise à jour à distance des téléphones (canal
preview par défaut, production au choix en lancement manuel).
- Seul ce qui a changé depuis la dernière mise en ligne repart (repère git
deploiement, le même que npm run deployer).
- Garde-fous :
- rien ne part sans les secrets (message dans l’onglet Actions) ;
- la production ne tourne que si la variable
MISE_EN_LIGNE_PRODUCTION vaut oui ;
- elle s’arrête si la base de production ne connaît encore aucun script (évite de tout rejouer) ;
- pas de mise à jour à distance quand
app.json, eas.json ou package.json change : une compilation est signalée.
- Procédure et liste des secrets :
docs/deploiement.md, « La mise en ligne automatique (GitHub) ».
Réglages à faire : environnements recette et production (avec approbation), six secrets, puis la variable MISE_EN_LIGNE_PRODUCTION. Voir docs/deploiement.md.
Fiabilisation · production lancée à la main
- Sur un dépôt privé avec l’offre gratuite de GitHub, l’environnement
production ne propose pas « Required reviewers » : la production serait partie sans approbation après chaque envoi.
- La production ne part donc plus automatiquement : seulement par Actions › Mise en ligne › Run workflow. Ce clic vaut approbation. La recette reste automatique.
docs/deploiement.md mis à jour.
Réglages à faire : aucun.
Fiabilisation · tests de nuit verts sur GitHub
- Premier passage de nuit sur GitHub : 112 tests sur 117. Les 5 échecs venaient de l’environnement de test, pas de l’application :
e2e10b, e2eN6, e2eRooHome lisaient un PDF créé par un autre test lancé plus tard (/tmp/quittance.pdf). Le fichier est maintenant un fichier témoin du dépôt (e2e/fixtures/quittance.pdf), utilisé aussi par fn8 et fn9.
fn027 (veille IRL) : le secret factice VEILLE_SECRET manquait dans e2e/supabase/functions.env.
fn029 : l’adresse d’expéditeur attendue était celle de l’ancien nom (locazen.test) ; elle est maintenant lue dans functions.env.
e2eR3dbg, copie de mise au point de e2eR3, est retiré.
run.js affiche aussi les lignes FAILED et ERRORS, pour qu’un test arrêté net dise pourquoi.
Réglages à faire : aucun.
Mise en ligne · message clair quand le mot de passe de la base est refusé
- La production s’arrêtait avec « La base de production ne connaît aucun script », alors que la vraie cause était un mot de passe refusé par Supabase (
password authentication failed).
- La mise en ligne teste maintenant la connexion à la base avant tout. Si le mot de passe est refusé, elle le dit en clair (« Mot de passe de la base refusé »), pour la recette comme pour la production.
Réglages à faire : mettre le bon mot de passe dans le secret PRODUCTION_DB_PASSWORD.
Mise en ligne · lecture de l’état des scripts SQL, mise à jour des téléphones
- La production s’arrêtait à tort sur « La base de production ne connaît aucun script » : la CLI Supabase affiche désormais les numéros entre accents graves (
`001`), que la vérification ne reconnaissait pas. Les 47 scripts sont bien connus de la base de production.
eas update exige maintenant l’environnement EAS avec le SDK Expo 55 et plus : --environment (même nom que le canal) est passé par la mise en ligne GitHub et par npm run deployer.
Réglages à faire : aucun.
Agents · étape 1 : qualité et livraison
CLAUDE.md à la racine : les règles non négociables et les principes produit, lus par chaque session Claude et chaque agent.
- Cinq agents dans
.claude/agents/ :
gardien-ux : relit chaque écran contre les principes produit et la grammaire commune ;
relecteur-securite : migrations, RLS, clés, données envoyées à Roo, paiement ;
livreur-git : branche claude/…, un commit, demande de fusion décrite simplement, vérification GitHub suivie ;
testeur-nocturne : trie les tests rouges de la nuit et propose une correction ou un ticket ;
controleur-mise-en-ligne : vérifie une mise en ligne et en explique l’échec.
docs/agents.md : le rôle de chacun, les étiquettes de tickets (bug, ux, besoin-client, reglementation, a-valider) et les consignes des trois routines à créer (relecture des demandes de fusion, testeur nocturne, contrôle de mise en ligne).
- Aucun agent ne fusionne, ne met en production, ne touche à
.env ni ne dépense.
Réglages à faire : créer les trois routines sur claude.ai/code/routines (consignes à copier dans docs/agents.md). Rien dans Supabase.
Agents · étape 2 : produit et veille
- Cinq agents de plus dans
.claude/agents/ :
ecoute-clients : les irritants de la semaine, preuves à l’appui (tickets, e-mails des testeurs si le connecteur est donné), sans aucune donnée personnelle ;
chef-de-produit : une fiche par chantier (problème, preuves, solution, critères d’acceptation, impact, effort, règles touchées), à valider avant tout dessin ou code ;
designer : maquettes ordinateur et téléphone dans la grammaire commune, avant le code ;
veille-reglementaire : textes officiels seulement, règle et date d’effet citées, « à faire vérifier par un professionnel » ;
relecteur-juridique : vérifie les textes et calculs juridiques ou fiscaux (liste des fichiers sensibles dans l’agent).
docs/fiches/README.md : modèle de fiche et index. docs/veille/README.md : les 14 thèmes suivis, l’endroit de Rentoo qu’ils touchent et leurs sources officielles.
docs/agents.md : la relecture des demandes de fusion appelle aussi le relecteur juridique ; deux routines de plus (point produit du lundi, veille mensuelle) et l’environnement « Veille » qui autorise les sites officiels.
Réglages à faire : modifier la consigne de la routine « Relecture des demandes de fusion », créer l’environnement « Veille » et les routines 4 et 5 (docs/agents.md).
Agents · étape 3 : usage réel, documentation, coordination
- Trois agents de plus dans
.claude/agents/ :
testeur-bailleur : joue les dix parcours d’un bailleur (de l’inscription à la 2044) dans la peau de « Claire », personnage inventé, sur téléphone et ordinateur. Il les joue en vrai sur la pile de test si possible, sinon d’après les captures de la nuit, sinon sur le code (et le dit). Il note chaque parcours « fluide », « hésitant » ou « bloqué » et ouvre un ticket ux par problème ;
documentaliste : chaque vendredi, vérifie que docs/, le glossaire, AMELIORATIONS.md, le guide des agents et celui des tests suivent le code ; corrige par une demande de fusion, sans jamais toucher au code ;
coordinateur : un seul ticket « Point de la semaine » le vendredi (à valider, rouge, 3 priorités proposées, fait, trouvé par les agents).
docs/parcours/README.md : les dix parcours, leurs étapes et les tests qui les rejouent.
docs/agents.md : la relecture des demandes de fusion appelle aussi le Testeur bailleur quand un écran change ; trois routines de plus (6, 7, 8) ; étiquette point-semaine.
docs/README.md : index des dossiers parcours/, fiches/ et veille/.
Réglages à faire : modifier la consigne de la routine « Relecture des demandes de fusion », créer les routines 6, 7 et 8 (docs/agents.md).
Fiabilisation · version du serveur GitHub fixée
- Ce qui change : les vérifications et la mise en ligne tournent sur
ubuntu-24.04 au lieu de ubuntu-latest. GitHub fait passer ubuntu-latest à Ubuntu 26 à partir du 19/10/2026 ; fixer la version évite qu’un changement de serveur casse une étape sans qu’on ait touché au code.
- Fichiers :
.github/workflows/verifications.yml, .github/workflows/mise-en-ligne.yml (5 tâches), docs/deploiement.md.
- Vérifié : les deux fichiers restent lisibles (syntaxe YAML) ; la prochaine exécution de « Vérifications » après l’envoi le confirmera.
- Pas fait : les avertissements « Node 20 » des actions GitHub (checkout, setup-node, upload-artifact) restent ; non bloquants, ils seront traités avec le gardien des dépendances.
Réglage à faire : aucun.
Accueil · même grammaire que les autres rubriques (maquette du 12/10)
- Ce qui change pour le bailleur :
- en tête, le bandeau foncé des chiffres du mois, comme dans les autres rubriques : encaissé ce mois-ci (avec la barre), loyers en retard, cash-flow prévu par mois (avec sa définition « i »), biens loués et vacants ; chaque chiffre ouvre sa rubrique ;
- sur ordinateur, un bouton « Ajouter » qui ouvre la même liste d’ajouts que le bouton + du menu (loyer reçu, facture, scanner, document, intervention, locataire, bien, mise en location, rendez-vous) et un menu « … » (modifier l’accueil, récap du mois dernier) ; sur téléphone, l’en-tête garde « … », les notifications et le profil : la recherche et « Modifier l’accueil » passent dans « … » ;
- « Mes biens » affiche « Retard » sur un bien dont un loyer est en retard, et le loyer charges comprises sous le nom du locataire ;
- accueil de base comme la maquette : « À faire » et « Cette semaine et après » à gauche ; le point du lundi, « Mes biens » (avec le loyer charges comprises) et les raccourcis Loyers, Travaux & avaries, Messages à droite ; sur téléphone : À faire, Cette semaine et après, le point du lundi, Mes biens ;
- l’ancien bloc « Loyers du mois » disparaît : ses chiffres sont dans le bandeau (une seule fois à l’écran). Une disposition enregistrée qui le contenait le perd sans rien d’autre ; une disposition faite seulement de ce bloc revient à l’accueil de base. Les modèles Essentiel, Gestion complète et Investisseur sont ajustés.
- Le récap du mois précédent reste mis en avant les 10 premiers jours du mois.
- Fichiers :
src/app/index.tsx, src/lib/homeBlocks.ts, src/components/home/HomeEditor.tsx, src/components/sheet/InkStrip.tsx (couleur du chiffre et barre de progression, en option), docs/produit.md.
- Tests :
tests/a4-accueil.test.ts (7 blocs, accueil de base, reprise des dispositions avec « Loyers du mois ») ; tests de parcours adaptés au menu « … » et au bandeau : e2eA4, e2e17, e2eFin4, e2eSide, e2eC5 (recherche sur téléphone), e2e15 (démo : « Biens : 3 »), e2eA02 (« Loyers en retard : Aucun »). 30 tests de parcours qui passent par l’accueil rejoués : tous verts.
- Choix prudents :
- sur téléphone, les notifications restent dans l’en-tête (la maquette ne montrait que le profil) : c’est le seul accès au centre de notifications sur téléphone ; la recherche passe dans « … » ;
- sur téléphone, le libellé reste « Cash-flow prévu / mois » (et non « Cash-flow / mois ») pour garder le mot du glossaire ;
- la maquette affichait « Cette semaine » sur téléphone ; le bloc montre aussi les échéances plus lointaines (jusqu’à 60 jours pour un document), d’où « Cette semaine et après » partout.
Réglage à faire : aucun (ni script SQL, ni fonction à redéployer). Mise à jour à distance possible : pas de nouveau module natif.
Mises à jour à distance · plus de « Redémarrer » à chaque ouverture
- Ce qui change pour le bailleur : le bandeau « Une nouvelle version de Rentoo est prête · Redémarrer » disparaît. La nouvelle version se télécharge en silence et s’installe d’elle-même à l’ouverture suivante. Pour l’avoir tout de suite : Réglages › À propos › « Installer maintenant ».
- Pourquoi le bandeau revenait : le téléphone vérifie à chaque ouverture et au retour dans l’application ; chaque nouvelle version publiée (et il y en a eu beaucoup) faisait réapparaître le bandeau. Une autre cause possible, non vérifiable d’ici : une version qui ne parvient pas à s’appliquer et qui est retéléchargée à chaque fois.
- Diagnostic ajouté : un lancement de secours, une erreur du module de mise à jour, ou une même version restée « prête » sans s’appliquer après trois ouvertures est noté dans
app_errors (genre update). Le Testeur nocturne et le Coordinateur pourront le signaler.
- Fichiers :
src/components/UpdateWatcher.tsx (ancien UpdateBanner.tsx), src/lib/appUpdate.ts, src/app/_layout.tsx, src/app/plus/a-propos.tsx, tests/a1-mise-a-jour.test.ts, docs/deploiement.md.
- Pas vérifié : rien n’a été essayé sur un vrai téléphone (les mises à jour à distance n’existent pas dans la version web des tests).
Réglage à faire : aucun. Le changement part par une mise à jour à distance ; c’est la dernière fois que le bandeau apparaîtra (l’ancienne version l’affiche encore une fois pour installer celle-ci).
Téléphone · plus de bouton coupé avec le texte agrandi
- Le problème (capture du 16/10, écran Patrimoine sur Android) : avec le texte agrandi dans les réglages du téléphone, le bouton « Enregistrer l’estimation » passait sous le champ, Android calculait mal la hauteur de la carte, et la carte masquait le bouton. Les noms des onglets du bas étaient coupés (« Accue », « Men »). La même disposition (champ et bouton côte à côte dans une carte) existe dans une cinquantaine d’endroits.
- Ce qui change pour le bailleur :
- le texte suit toujours le réglage du téléphone, mais jusqu’à 1,3 fois (au lieu de 1,5), y compris dans les champs de saisie, qui n’avaient aucune limite ;
- une carte ne masque plus jamais ce qui dépasse (sauf les cartes avec photo de couverture ou liste jusqu’au bord) : même si Android se trompe dans un calcul, le bouton reste visible et utilisable ;
- sur téléphone, champ et bouton sont l’un sous l’autre, le bouton sur toute la largeur (Patrimoine, filtre de période des Finances, code de parrainage) ; sur ordinateur, le bouton s’aligne sur le bas du champ ;
- les noms des onglets du bas tiennent toujours sur une ligne (taille réduite au besoin) ;
- sur le web, le « € » ne déborde plus du champ.
- Fichiers :
src/components/ui/AppText.tsx (TEXT_SCALE_MAX), TextField.tsx, Card.tsx, nouveau FieldRow.tsx, index.ts, src/components/AppShell.tsx, src/app/biens/patrimoine.tsx, src/components/finances/Overview.tsx, src/app/plus/abonnement.tsx, CLAUDE.md.
- Tests : 30 tests de parcours visuels rejoués, tous verts (
e2eFin passe désormais avec l’horloge figée au 07/10 : son contrôle « taxe foncière à prévoir » ne vaut qu’avant le 15 octobre) ; nouveau test de parcours e2eUI1 (12 écrans à 390 px, texte normal puis agrandi de 30 % : aucun bouton coupé par son cadre ; onglets entiers), ajouté à la série vérifiée.
- Pas vérifié : le navigateur ne reproduit pas les erreurs de calcul propres à Android ; à confirmer sur votre téléphone (liste de 10 écrans dans le compte rendu). Les autres formulaires « champ + bouton » restent côte à côte quand ils tiennent ; ils ne peuvent plus être masqués grâce aux cartes, et passeront à
FieldRow au fil des chantiers.
Réglage à faire : aucun. Mise à jour à distance possible (pas de nouveau module natif).
Pages légales · confidentialité et mentions légales sur le site
- Ce qui change pour l’utilisateur : deux pages publiques, lisibles sans compte, sont ajoutées au site : la politique de confidentialité (
/confidentialite.html) et les mentions légales (/mentions-legales.html). Elles renvoient l’une vers l’autre. Elles sont obligatoires avant d’ouvrir l’application à d’autres bailleurs.
- Fichiers :
public/confidentialite.html, public/mentions-legales.html.
- Tests : aucun (pages statiques).
- À vérifier : le message de livraison dit que les pages sont liées depuis la page Découvrir ; ce lien n’apparaît pas dans
public/decouvrir.html à la date du 16/10/2026. Le contenu juridique (éditeur, hébergeur, durées, droits) doit être relu par un professionnel.
Réglage à faire : aucun. Les pages partent avec la prochaine mise en ligne de la version web.
UX étape 1 · action principale toujours au même endroit, brouillons, 44 px, Biens en tableau
D’après les maquettes validées le 16/10 (canevas « Rentoo · UX étape 1 »).
- Ce qui change pour le bailleur :
- formulaires (bien, locataire et bail, intervention, dépense, facture, relevé, assurance, diagnostic, prêt, rendez-vous, document, annonce, bail, entrée, état des lieux, import, profil) : sur téléphone, l’action principale est collée en bas, en grand, et la barre d’onglets laisse la place pendant la saisie ; sur ordinateur, les actions sont en haut à droite, à côté du titre ;
- brouillons : un nouveau bien, une nouvelle intervention ou une nouvelle annonce commencés sont gardés sur l’appareil ; en revenant, « Brouillon repris : vous aviez commencé hier à 18 h 40 · Effacer ». Le brouillon disparaît à l’enregistrement ou sur « Annuler » ; il n’est plus repris après 7 jours ;
- zones à toucher de 44 px : bouton retour, menu « … », étoile des biens, petits « i » ; dans « À faire », la petite horloge devient un vrai bouton « Reporter » ;
- chargement : le squelette de l’accueil reprend le bandeau foncé ;
- Biens en tableau (ordinateur, dès 5 biens) : « Liste · Tableau · Carte » ; le tableau montre bien, locataire, loyer, état, cash-flow, rendement net et prochaine échéance (mêmes calculs que les cartes) ; le choix est gardé.
- Fichiers :
src/components/ui/Screen.tsx (option form), src/data/ui.ts, src/components/AppShell.tsx, src/components/Toasts.tsx, src/components/Settings.tsx, 17 écrans de formulaire (form), src/lib/draft.ts, src/hooks/useDraft.ts, src/components/DraftBanner.tsx, src/app/biens/nouveau.tsx, src/app/travaux/nouveau.tsx, src/app/location/nouvelle.tsx, src/components/TodoList.tsx, src/components/InfoTip.tsx, src/components/ActionMenu.tsx, src/components/domain.tsx, src/components/ui/Skeleton.tsx, nouveau src/components/PropertiesTable.tsx, src/app/biens/index.tsx, CLAUDE.md.
- Tests :
tests/ux1-brouillon.test.ts ; nouveau test de parcours e2eUX11 (téléphone : bouton en bas, barre d’onglets masquée puis revenue, brouillon repris puis effacé ; ordinateur : actions en haut à droite, tableau dès 5 biens, ligne qui ouvre la fiche), ajouté à la série vérifiée.
- Choix prudents : le bouton de « À faire » s’appelle « Reporter » (et non « Plus tard », déjà employé par Roo) ; la vue garde le mot « Liste » (et non « Cartes », trop proche de « Carte ») ; les modifications (bien existant, locataire) n’ont pas de brouillon : elles partent de données déjà enregistrées.
- Pas fait dans cette étape : brouillons des autres formulaires (au fil des chantiers) ; menu à 6 entrées (action 2).
Réglage à faire : aucun. Mise à jour à distance possible (pas de nouveau module natif).
UX étape 2 · « Valider ma semaine »
D’après les maquettes validées le 17/10 (canevas « Rentoo · UX (étapes 1 et 2) »).
- Ce qui change pour le bailleur :
- accueil : dès qu’il y a au moins un point « À faire », une carte « Roo a préparé votre semaine » annonce le nombre de points, le temps estimé (environ 30 secondes par point) et leur nature (relances, loyers à pointer, courriers, autres), avec le bouton « Valider ma semaine » ;
- un point à la fois (
/semaine), avec « 1 sur 4 » et une barre de progression. Pour une relance, le texte préparé (le même que la feuille de relance) est affiché avant l’envoi : « Envoyer la relance » l’envoie par e-mail d’un geste, « Modifier le texte » ouvre la feuille de relance, « Il a payé ? Pointer le loyer reçu » pointe le loyer. Pour les autres points, le bouton principal fait la même chose que sur l’accueil (pointer, confirmer, ouvrir le courrier…) ;
- « Reporter » met le point de côté 3 jours (le même « Reporter » que l’accueil) ;
- fin : « Semaine validée » avec ce qui a été fait et ce qui a été reporté, et « Reprendre » pour un point reporté ;
- ordinateur : la liste des points à gauche, le point au centre ; Entrée valide, R reporte, M modifie le texte (ces touches ne déclenchent pas les raccourcis généraux pendant ce parcours) ; téléphone : les boutons en bas, sans barre d’onglets.
- Règles prudentes :
- une mise en demeure ne part jamais d’un geste : le bouton devient « Préparer la mise en demeure » et ouvre la feuille de relance, qui propose le courrier recommandé (loi du 6 juillet 1989 et code civil : la mise en demeure a date certaine en recommandé avec avis de réception ; à faire confirmer par un professionnel en cas de contentieux) ;
- sans adresse e-mail ou sans service d’envoi configuré, le bouton devient « Préparer la relance » et ouvre la feuille (messagerie, courrier) ;
- les textes des relances et courriers ne changent pas : ce sont ceux déjà relus.
- Écarts avec la maquette : la révision de loyer ouvre l’écran de courrier existant (calcul IRL et courrier déjà en place) au lieu d’afficher le calcul dans la carte ; pas de geste « balayer » sur téléphone (les boutons suffisent) ; « Annuler » après coup reste le message « Annuler » qui suit chaque action (pointage) ; la session reprend là où on en était si l’on ouvre un écran puis revient, pendant 6 heures.
- Fichiers : nouveaux
src/app/semaine.tsx, src/lib/week.ts, src/data/week.ts, src/hooks/useReminderDraft.ts (texte de relance commun, extrait de ReminderSheet), src/components/WeekEntryCard.tsx ; modifiés src/components/ReminderSheet.tsx, src/components/AppShell.tsx (route /semaine), src/app/index.tsx, docs/produit.md.
- Tests :
tests/ux2-semaine.test.ts ; test de parcours e2eUX12 (horloge figée au 16/10/2026 : carte d’accueil, relance préparée puis envoyée et enregistrée, reports, fin, « Reprendre », touches R et Entrée sur ordinateur, R n’ouvre pas Roo).
Réglage à faire : aucun. Mise à jour à distance possible (pas de nouveau module natif).
UX étape 3 · la fiche du bien au centre de tout
- Menu à 6 entrées, les mêmes sur téléphone et sur ordinateur : Accueil, Biens, Locataires, Finances, Fiscalité, Roo. Fiscalité est toujours visible.
- Biens regroupe les vues de tout le portefeuille, en onglets : Mes biens · Travaux · Assurances · Documents · Mise en location. L’entrée Biens reste allumée dans ces rubriques et reprend leurs pastilles (signalements, assurances à régler, documents qui expirent, dossiers de candidats). Mise en location, Travaux et Assurances n’ont un onglet qu’une fois utiles (même règle qu’avant pour le menu).
- Téléphone : la barre du bas perd « + » et « Menu ». « Ajouter » passe en haut de l’accueil (bouton +, même liste d’ajouts) ; « Toutes les rubriques » est dans le menu « … » de l’accueil (calendrier, documents, travaux, réglages). Le geste depuis le bord gauche ouvre toujours ce menu.
- Fiche du bien :
- en-tête : photo (téléphone) ou vignette (ordinateur), nom, badge « Loyer en retard » (sinon le statut), adresse · m² · DPE, locataire et date du bail ;
- bandeau des 4 chiffres : loyer charges comprises, cash-flow prévu par mois, rendement net, dossier complet (chacun ouvre sa rubrique) ;
- six rubriques : Synthèse (À faire, qui habite ici, papiers en résumé, fiche pratique, photos), Loyers (échéancier), Bail (personnes, loyer et révision, départ, lien « Mon logement »), Argent (financement et rentabilité, dépenses), Papiers, Travaux ;
- sur ordinateur : deux colonnes, « À faire » et le résumé des papiers restent à droite quelle que soit la rubrique ;
- les anciennes adresses (
?onglet=assurances, financement, locataires…) ouvrent la bonne rubrique.
- Papiers : trois groupes (Diagnostics, Assurances, Documents), chaque pièce avec son état et son bouton (Ajouter un diagnostic, Ajouter la PNO, Demander l’attestation, Ajouter le bail ou l’état des lieux), « Ajouter un papier » et l’export PDF du dossier. Le pourcentage est le même que celui du dossier du bien (une seule source). Le résumé de la synthèse n’a pas de bouton : les actions sont déjà dans « À faire » (pas de doublon), et la rubrique Papiers n’a pas de pastille pour la même raison.
- Règles affichées (à faire vérifier par un professionnel) : diagnostics remis au locataire, article 3-3 de la loi du 6 juillet 1989 ; assurance du propriétaire obligatoire en copropriété, article 9-1 de la loi du 10 juillet 1965 ; attestation d’assurance du locataire, article 7 g de la loi du 6 juillet 1989.
- Fichiers :
src/components/nav.ts (entrées main, parent, navSection, PORTFOLIO_TABS), src/components/AppShell.tsx, src/components/PortfolioTabs.tsx (nouveau), src/components/PropertyPapers.tsx (nouveau), src/lib/propertyPapers.ts (nouveau), src/app/biens/[id].tsx, src/app/index.tsx, src/hooks/useNavCounts.ts, src/hooks/useHiddenNav.ts, et l’en-tête de src/app/{biens,travaux,assurances,documents,location}/index.tsx.
- Tests :
tests/ux3-papiers.test.ts (9 tests) ; nouveau parcours e2eUX13 (390 px et 1440 px) ; parcours adaptés : e2e13, e2eBL1, e2eW3c, e2eT04, e2eSide, e2eUX10.
- Pas encore fait : l’en-tête compact qui reste collé en haut quand on fait défiler la fiche (maquette « rubriques repliées »), et les rubriques en accordéon sur téléphone (on garde des pastilles, comme ailleurs dans l’application).
Réglages à faire : aucun (pas de script SQL, pas de fonction à redéployer). Publier la mise à jour (OTA).
UX étape 3 · retour de Pierre-Louis sur la barre du téléphone
- Le « + » (actions rapides) revient au centre de la barre du bas, et « Menu » revient à droite : Accueil, Biens, Locataires, +, Finances, Menu. Le bouton + ajouté en haut de l’accueil et « Toutes les rubriques » du menu « … » sont retirés (pas de doublon).
- Réglages en deux appuis : Menu › « Profil et réglages » (en tête du menu, et en bas de la liste avec la roue dentée).
- Le menu ne répète plus les entrées de la barre : il montre Fiscalité, Roo, Assurances, Documents, Calendrier, Profil et réglages, puis les rubriques qui ne servent pas encore (Travaux, Mise en location).
- Ordinateur inchangé : 6 entrées dans la barre latérale.
- Fichiers :
src/components/nav.ts (phone), src/components/AppShell.tsx, src/components/SideDrawer.tsx, src/app/index.tsx. Parcours vérifiés : e2eUX13, e2eSide, e2e13, e2eT04, e2eUI1, e2eUX10.
Réglages à faire : aucun. Publier la mise à jour (OTA).
UX étape 4 · « Photo d’abord » pour ajouter un document (branche feat/photo-first-document-intake)
- Documents › Ajouter commence par le document : « Prendre une photo » en grand sur téléphone (galerie et PDF en second), fichier ou glisser-déposer sur ordinateur. On peut changer de fichier avant l’envoi. Formats et limite (15 Mo) affichés, refus clairs.
- Roo lit le document (la lecture qui existait déjà dans Roo › Documents, même fonction « copilot ») : seules les deux étapes réelles s’affichent, « Envoi sécurisé » puis « Lecture par Roo ». Le coût est annoncé avant (1 crédit, ou lecture offerte).
- Vérifier : aperçu du document à côté (ordinateur) ou au-dessus (téléphone) ; type reconnu, modifiable ; champs propres au type, tous corrigeables ; sous chaque champ « Absent du document » ou « Lu sur le document : à vérifier » d’après la confiance donnée par Roo (aucun score inventé).
- « Avant d’enregistrer » : liste de ce qui sera fait (dépense et son effet sur le cash-flow et la déclaration, contrat et rappel, prime en dépense, diagnostic et suivi de validité, fiche prêt), puis « Confirmer » ou « Modifier ». Rien n’est enregistré avant. Un double appui n’enregistre qu’une fois. Une dépense déjà liée au document n’est pas recréée.
- Prêts : le récapitulatif rappelle que seuls les intérêts et l’assurance emprunteur entrent dans la déclaration, pas le capital (article 31 du CGI, à faire vérifier par un professionnel).
- Fiscalité personnelle : un avis d’impôt sur le revenu ou de taxe d’habitation est signalé comme tel et rangé, jamais compté comme dépense d’un bien. Type non reconnu : rangé, rien d’autre n’est créé.
- « C’est enregistré » n’apparaît qu’après l’enregistrement, avec les liens utiles. Facture avec lignes à répartir : l’écran Facture existant prend le relais (pas de faux écran de réussite).
- Jamais bloqué : sans lecture possible (Roo désactivé, crédits épuisés, service indisponible, coupure réseau, pièce d’identité), message clair puis classement à la main ; « Réessayer » ne crée pas de deuxième document.
- Doublons : empreinte SHA-256 du fichier calculée sur l’appareil (script 048). Même fichier déjà présent : « Ce document est déjà dans Rentoo » (« Le relire et le compléter », « L’ajouter quand même », « Changer de fichier »). « Abandonner » supprime le document envoyé pendant le parcours ; une lecture refusée avant de commencer aussi.
- Entrées : « + › Scanner » ouvre ce parcours avec l’appareil photo ; « Ajouter un papier » (fiche du bien) et la bulle de Roo aussi. Roo › Documents garde sa lecture, avec les mêmes indications sous les champs.
- Sécurité vérifiée : documents privés (règle « proprietaire » : propriétaire et chemin de stockage), stockage non public, liens signés d’une heure, pièce d’identité jamais envoyée à l’IA, IBAN retiré du résultat. Aucun contenu de document n’est journalisé. Aucun nouveau fournisseur, aucune nouvelle dépendance (expo-crypto était déjà installé).
- Fichiers :
src/app/documents/nouveau.tsx (réécrit), src/components/intake/IntakeParts.tsx et ManualDocumentForm.tsx (nouveaux), src/lib/docIntake.ts, src/lib/fileHash.ts, src/hooks/useFileDrop.ts (nouveaux), src/components/ExtractionResult.tsx (récapitulatif, indications, double appui), src/lib/scan.ts, src/data/{types,mappers,store}.ts (empreinte), supabase/migrations/048_empreinte_documents.sql.
- Tests :
tests/photo-dabord.test.ts (11 tests) ; nouveau parcours e2eUX14 (1440 px et 390 px).
- Restent à faire : Roo › Documents et l’écran Facture passent encore par leur propre envoi (sans contrôle des doublons) ; lecture d’un avis d’impôt et des documents d’assurance emprunteur ; photo recadrée et redressée avant l’envoi ; reprise d’un parcours interrompu (le document reste « Autres documents » et le doublon le signale).
Réglages à faire : exécuter 048_empreinte_documents.sql (rejouable ; sans lui, le document est enregistré sans empreinte et les doublons ne sont pas repérés, sans message d’erreur). Pas de fonction à redéployer. Publier la mise à jour (OTA) après fusion.
Recette complète : un second Rentoo pour tester avant la production
- Appli « Rentoo Recette » (
fr.rentoo.app.recette, icône orange) installable à côté de Rentoo, et web de recette sur https://rentoo–recette.expo.app. Bandeau « RECETTE · données de test » en haut de l’écran.
- Même code : l’environnement est reconnu à l’ouverture (
src/lib/environment.ts, canal recette ou adresse web) ; base rentoo-recette et liens envoyés en recette. .env inchangé.
app.config.ts (variante APP_VARIANT=recette), profil recette dans eas.json, icônes assets/images/recette/.
-
npm run deployer -- -Recette : vérifications, SQL et fonctions sur la recette, web de recette, appli de recette. Depuis n’importe quelle branche, sans GitHub ni production.
- Tout sur GitHub, plus rien sur le PC (
.github/workflows/mise-en-ligne.yml) : la recette (base, fonctions, web, appli : mise à jour à distance ou compilation APK) part après chaque envoi sur master, ou à la main pour une branche ; la production, à la main, n’accepte que la version exacte en recette ; contrôle de santé après chaque mise en ligne (web, et 10 min après la production, journal app_errors).
- Correctif des mises à jour à distance : depuis le 16/10, chaque mise à jour plantait au démarrage (« Variables EXPO_PUBLIC_SUPABASE_URL / KEY manquantes ») et les téléphones revenaient à l’ancienne version :
eas update --environment n’utilise plus .env. L’appli a maintenant ses valeurs de production par défaut (src/lib/environment.ts).
Réglages à faire : clé de signature Android de fr.rentoo.app.recette sur expo.dev, EXPO_TOKEN lisible par l’environnement recette, secrets de test du projet Supabase de recette (voir docs/deploiement.md, « La recette »). Pas de script SQL.
UX étape 5 · un sommaire, puis un écran par sujet (branche feat/fiche-sommaire)
- Calendrier toujours dans la navigation : dans la barre latérale de l’ordinateur (7 entrées) et en tête du menu du téléphone. La barre du bas du téléphone garde Accueil, Biens, Locataires, « + », Finances, Menu.
- Fiche du bien en sommaire (comme les Réglages de l’iPhone, Revolut, Airbnb) :
- téléphone : vignette, nom et état, bandeau compact des 4 chiffres, « À faire », puis le sommaire (Loyers, Bail et locataire, Argent, Papiers, Travaux, Photos et infos pratiques), chaque ligne avec son état (« Prochain loyer le… », « 2 sur 6 · DPE D », « 1 à ajouter ») ;
- chaque ligne ouvre un écran qui ne parle que de ce sujet, avec le retour en haut à gauche ; plus de pastilles qui défilent ni de sous-onglets ;
- Papiers : les trois groupes, puis « En détail » (Diagnostics, Contrats d’assurance, Tous les documents), chacun sur son écran ; Argent : financement et rentabilité, puis « Dépenses du bien » ;
- ordinateur : sommaire à gauche, contenu à droite (« Vue d’ensemble » par défaut : À faire, départ en cours, qui habite ici), avec « ‹ Papiers » au-dessus d’un écran de détail.
- Biens sur téléphone : plus de pastilles qui défilent ; « Tout le portefeuille » (Travaux, Assurances, Documents, Mise en location) en lignes sous les biens ; ces écrans ont un retour vers Biens. Sur ordinateur, les onglets restent (tous visibles).
- Anciennes adresses
?onglet= : elles ouvrent le bon écran (ex. ?onglet=assurances → Contrats d’assurance, ?onglet=locataires → Bail et locataire).
- Fichiers :
src/components/nav.ts, src/components/AppShell.tsx, src/components/ui/SummaryList.tsx (nouveau), src/components/sheet/InkStrip.tsx (bandeau compact), src/components/property/PropertyDetail.tsx (ancien src/app/biens/[id].tsx), src/app/biens/[id]/index.tsx et [rubrique].tsx (nouveaux), src/components/PortfolioTabs.tsx, src/app/{biens,travaux,assurances,documents,location}/index.tsx.
- Tests :
tests/ux3-papiers.test.ts (menu à 7 entrées, calendrier en tête du menu) ; parcours e2eUX13 et e2eBL1 réécrits pour le sommaire.
- Suite prévue : même logique pour la fiche locataire, puis Finances et Réglages.
Réglages à faire : aucun (pas de script SQL, pas de fonction à redéployer). Publier la mise à jour (OTA) après fusion.
UX étape 6 · chantier 1 : l’en-tête de Biens ne bouge plus (branche claude/ux6-entete-biens)
- Sur ordinateur, le haut de Biens est le même sur les cinq onglets (Mes biens, Travaux, Assurances, Documents, Mise en location) : titre « Biens », une ligne de résumé (« 3 biens · 2 loués · 1 vacant »), le bouton de l’onglet à droite, puis les onglets. Seul le contenu dessous change. Avant, chaque onglet avait son titre et son sous-titre, et sur Travaux et Documents les onglets étaient rangés par erreur au milieu des boutons : le titre passait sur deux lignes et tout le haut sautait.
- En-tête de hauteur fixe sur ordinateur pour tous les écrans : titre et sous-titre sur une ligne, boutons à droite (
Screen).
- Filtres en pastilles : « Tous, Loués, Vacants » (Mes biens), « À traiter, Planifiés, Terminés » (Travaux) et les catégories de Documents ne sont plus un second rang d’onglets soulignés.
- Téléphone inchangé : chaque vue reste un écran à part, avec son titre et le retour vers Biens.
- Fichiers :
src/components/PortfolioTabs.tsx (usePortfolioHeading), src/components/ui/Screen.tsx, src/app/biens/index.tsx, src/app/travaux/index.tsx, src/app/documents/index.tsx, src/app/assurances/index.tsx, src/app/location/index.tsx.
- Tests : nouveau parcours
e2eUX15 (1440 px et 390 px, clair et sombre : même titre, onglets à la même hauteur sur les cinq vues, filtres en pastilles).
UX étape 6 · chantier 2 : la fiche locataire en sommaire (branche claude/ux6-fiche-locataire)
- Même logique que la fiche du bien : plus d’onglets (Synthèse, Loyers, Bail et documents, Échanges) ni d’onglets dans les onglets.
- Téléphone : en-tête (nom, statut, logement), boutons Appeler, E-mail, Message ; la situation avec « Marquer payé » et « Relancer » quand un loyer est en retard ; bandeau de 4 chiffres (reste dû, ponctualité, prochain loyer, dépôt) ; « À faire » ; puis le sommaire : Loyers et quittances, Bail, Documents, Échanges, Notes et historique. Chaque ligne dit déjà l’essentiel (« 2 en retard », « À demander », « 1 non lu ») et ouvre un écran sur ce seul sujet, avec le retour vers la fiche.
- Ordinateur : sommaire à gauche, contenu à droite ; « Vue d’ensemble » par défaut (situation, À faire, coup d’œil, derniers échanges).
- Loyers : Échéances ou Versements (l’historique complet passe dans « Notes et historique »). Documents : la liste de contrôle, l’attestation d’assurance et tous ses documents. Bail : le bail, le loyer, les colocataires, le départ, les échéances légales et les courriers.
- Anciennes adresses
?onglet= : elles ouvrent le bon écran (quittances → Loyers, chrono → Notes et historique, synthese → Vue d’ensemble).
- Fichiers :
src/components/tenant/TenantDetail.tsx (déplacé depuis src/app/locataires/[id].tsx), src/app/locataires/[id]/index.tsx et [rubrique].tsx (nouveaux), src/lib/tenantTabs.ts.
- Tests :
tests/t02-fiche-locataire.test.ts ; parcours e2eT02 réécrit (1440 px et 390 px, clair et sombre), e2eBL2, e2eUX9, e2eT08, e2eA08 adaptés.
Réglages à faire : aucun (pas de script SQL, pas de fonction à redéployer). Publier la mise à jour (OTA) après fusion.
UX étape 6 · chantier 3 : Finances, un seul rang d’onglets (branche claude/ux6-finances)
- Finances garde ses trois onglets (Synthèse, Loyers, Opérations). Dans Opérations, Tout, Encaissements, Dépenses, Sans justificatif ne forment plus un second rang d’onglets soulignés : ce sont des pastilles de filtre, avec le choix de la catégorie juste à côté.
- Fichiers :
src/app/finances/index.tsx.
- Tests : nouveau parcours
e2eUX16 (1440 px et 390 px, clair et sombre).
UX étape 6 · chantier 4 : Fiscalité et Réglages en sommaire, filtres de Locataires en pastilles (branche claude/ux6-fiscalite-reglages)
- Fiscalité : plus de rang d’onglets. Téléphone : bandeau de chiffres, carte « Préparer ma déclaration » (où l’on en est, barre d’avancement, bouton Continuer), puis Historique, Calendrier, Documents, Mon comptable ; chaque ligne ouvre un écran avec le retour. Ordinateur : chiffres et sommaire à gauche (avec le résultat par bien pendant la déclaration), la rubrique à droite ; la déclaration est ouverte par défaut. Les calculs fiscaux ne changent pas (
computeTax, taxWorkflow).
- Profil et réglages : la même liste, en sommaire. Sur ordinateur, elle reste à gauche et le réglage ouvert s’affiche à droite (le profil par défaut) ; une ligne à compléter porte « À compléter ».
- Locataires : En place, En retard, À suivre, Départs prévus, Anciens sont des filtres en pastilles, plus des onglets soulignés.
- Fichiers :
src/app/fiscalite/index.tsx, src/components/settings/SettingsMenu.tsx (nouveau), src/app/plus/index.tsx, src/app/plus/_layout.tsx, src/app/locataires/index.tsx.
- Tests : parcours
e2eUX6 adapté, nouveau parcours e2eUX17 (1440 px et 390 px, clair et sombre).
Réglages à faire : aucun. Publier la mise à jour (OTA) après fusion.
Relocation sans mois vide · étapes 1 à 3 (branche claude/relocation-etapes-1-3)
- 1. Le départ déclenche la relocation. Dès qu’un préavis est enregistré (départ dans les 3 mois au plus) :
- « Relouer Nantes T2 : libre le … » dans « À faire » sur l’Accueil ;
- carte « Prochaine étape » sur la fiche du bien et en tête de Mise en location, avec un seul bouton, « Préparer l’annonce ».
- La carte disparaît dès qu’une annonce est commencée ; une seule proposition par bien.
- 2. L’annonce arrive remplie avec le bail actuel, à relire. Le long formulaire devient une liste de 7 lignes :
- les lignes : loyer et charges, dépôt, disponibilité et bail, photos et diagnostics, titre et description, critères des dossiers, infos pour les visites ;
- coche verte quand c’est bon, orange « à relire », rouge « à corriger » ; une ligne s’ouvre d’un toucher pour modifier, avec les vérifications qui la concernent ;
- le texte proposé automatiquement reste orange tant qu’il n’a pas été ouvert ;
- en bas : « Brouillon » ou « Publier » ; « Publier » met l’annonce en ligne s’il n’y a pas de point bloquant.
- 3. En ligne. La page d’une annonce affiche :
- le message « Votre annonce est en ligne » juste après la publication ;
- la frise des 6 étapes ;
- une carte « Prochaine étape » qui change avec l’avancement (publier, proposer des visites, étudier les dossiers, faire signer le bail, état des lieux, remise des clés).
- Le bouton « Publier » n’est plus en double dans l’onglet Annonce.
- Le lien se copie sur ordinateur, se partage sur téléphone.
- Nouvelles briques communes :
NextStepCard (carte « Prochaine étape », fond foncé, une seule action) et ListingStages (frise des 6 étapes, la même dans la liste et sur l’annonce).
- Règles appliquées, inchangées : dépôt de garantie au plus 1 mois hors charges en location vide, 2 mois en meublé ; loyer en zone tendue et encadrement selon la commune (loi du 6 juillet 1989) ; visites pendant le préavis au plus 2 h par jour ouvrable. À faire confirmer par un professionnel pour les cas particuliers.
- Fichiers :
src/lib/relocation.ts (nouveau), src/lib/listing.ts (checkPart, REVIEW_PARTS), src/lib/todos.ts, src/components/sheet/NextStepCard.tsx (nouveau), src/components/location/ListingStages.tsx (nouveau), src/app/location/index.tsx, src/app/location/nouvelle.tsx, src/app/location/[id].tsx, src/components/property/PropertyDetail.tsx.
- Tests :
tests/relocation.test.ts (6 tests) ; nouveau parcours e2eUX18 (1440 px et 390 px, clair et sombre) ; e2e10, e2e10b adaptés (relecture partie par partie).
Réglages à faire : aucun (pas de script SQL, pas de fonction à redéployer). Publier la mise à jour (OTA) après fusion.
Mise en location · votre grille de notation des candidats
- Chaque dossier a un score sur 100 et une mention (Très solide 80 et plus, Solide 60 à 79, Fragile 40 à 59, Insuffisant). Il remplace la note A à D.
- Nouvel écran « Vos critères » (bouton dans l’onglet Candidats et sur la fiche d’un candidat) : 100 points à répartir entre quatre critères, revenus, stabilité, garantie, dossier complet. Trois grilles toutes faites (Équilibrée 40/25/25/10, Revenus d’abord, Garantie d’abord), réglage fin par pas de 5. « Enregistrer » reste grisé tant que le total n’est pas 100. Après l’enregistrement, tous les scores sont recalculés (avec « Annuler »).
- Onglet Candidats : pastilles « Complets / À compléter / Tous » avec le nombre de dossiers, menu « Trier » (score, revenus, garantie, visite faite, plus récents). Le candidat retenu reste en tête. Un dossier incomplet a un score grisé.
- Fiche du candidat : le score, le rang parmi les dossiers en lice, et les points de chaque critère avec une phrase (« 2,6 × le loyer : un peu sous votre exigence »).
- Règle appliquée : seuls la solvabilité et les pièces de la liste officielle comptent (loi du 6 juillet 1989, art. 1er ; décret n° 2015-1437). On ne peut pas ajouter de critère : la base refuse toute autre clé que les quatre prévues. Le score est indicatif, le bailleur décide.
- Un seul calcul :
src/lib/scoring.ts (l’ancien calcul A à D de candidates.ts est supprimé).
Fichiers : src/lib/scoring.ts, src/data/scoringWeights.ts, src/app/location/criteres.tsx, src/components/location/ScoreBadge.tsx, src/app/location/[id].tsx, src/app/location/candidat.tsx, src/lib/candidates.ts, src/data/types.ts, src/data/mappers.ts, src/data/prefs.ts, supabase/migrations/049_grille_notation.sql.
Tests : tests/scoring.test.ts ; parcours e2eUX19 (filtres, tri, grille, recalcul, fiche candidat) à 1440 px et 390 px, en clair et en sombre ; e2e10 et e2e10b suivent le nouveau texte.
Réglages à faire : lancer le script supabase/migrations/049_grille_notation.sql (nouvelle colonne scoring_weights du profil). Sans lui, la grille reste enregistrée sur l’appareil seulement. Publier la mise à jour (OTA). À fusionner après la demande #12 (relocation, étapes 1 à 3).
Relocation sans mois vide · étapes 4 à 6 : visites, dossier en tête, retenir
- Visites en trois touches (nouvel écran « Visites », depuis « Choisir des créneaux » ou « Ajouter des créneaux ») : des jours (les 14 prochains), des heures (fin de matinée, midi, fin de journée), visite groupée ou non (4 candidats par créneau de 30 min), et l’accès (code, étage) envoyé aux candidats qui réservent. Le bouton dit combien de créneaux seront proposés. Les créneaux passés ou déjà prévus sont ignorés. Le brouillon est gardé.
- Logement encore occupé : rappel de la règle du préavis et alerte (sans blocage) pour un dimanche, un jour férié ou plus de 2 heures de visites le même jour.
- Prochaine étape : « N créneaux de visite à venir » une fois les créneaux proposés ; puis « En tête : Léa Martin, 100 / 100 », avec « Voir Léa » qui ouvre directement le meilleur dossier complet (grille du bailleur).
- Fiche du candidat : bandeau des chiffres clés (revenus × loyer, taux d’effort, garantie, pièces) ; la décision passe en bas, « Refuser » et « Retenir Léa ». Retenir se fait en une touche, avec « Annuler », puis le message au candidat est prêt à envoyer. Une fois retenu : « Préparer le bail ». Les autres actions (demander les pièces, proposer une visite, lien) restent dans « Autres actions ».
- Glossaire : « Taux d’effort » (définition « i »).
- Règle appliquée : le locataire en place n’est pas tenu de laisser visiter les jours fériés, ni plus de 2 heures les jours ouvrables (loi du 6 juillet 1989, art. 4, a). Rentoo signale, le bailleur peut convenir d’autres horaires avec son accord. Le dimanche est signalé par prudence (jour non ouvrable).
Fichiers : src/lib/visitSlots.ts, src/app/location/creneaux.tsx, src/app/location/[id].tsx, src/app/location/candidat.tsx, src/lib/glossary.ts, docs/glossaire.md.
Tests : tests/visit-slots.test.ts (7 tests) ; nouveau parcours e2eUX20 (1440 px et 390 px, clair et sombre) ; e2eUX18 suit le nouvel écran.
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Relocation sans mois vide · étapes 7 à 9 : bail signé, état des lieux pièce par pièce, clés remises
- Bail (étape 7) : la carte « Prochaine étape » suit le bail, une seule action à la fois : « Préparer le bail de Léa », « Envoyer le bail à Léa » (relire et envoyer), « À vous de signer le bail », puis « En attente · Signature de Léa » avec « Relancer Léa » en une touche (nouvel e-mail avec le lien de signature). L’onglet « Bail et entrée » liste les signataires, signé ou en attente.
- État des lieux (étape 8) : une pièce à la fois. Des pastilles de pièces en haut (cochées une fois faites, « + Pièce » pour en ajouter), la pièce à l’écran, « Pièce suivante » en bas ; « Compteurs et clés » pour finir, avec « Terminer et faire signer ». Photo de la pièce en grand, observation et photo par élément en un geste ; « Tout en bon état » reste là. La pièce ouverte ne change pas toute seule quand elle devient complète.
- Clés (étape 9) : la prochaine étape propose « Remettre les clés » dès l’état des lieux signé. Après « Valider l’entrée » : écran « Les clés sont remises », « Nantes T2 est loué à Léa Martin, sans mois vide » (quand le nouveau bail démarre au plus tard le lendemain de la fin de l’ancien), la frise terminée, ce qui a été fait (coche verte, ou alerte si un e-mail n’est pas parti), et « Voir la fiche de Léa ».
- L’annonce s’ouvre sur l’onglet utile : « Candidats » quand il faut choisir, « Bail et entrée » ensuite.
- Règles appliquées : inchangées (bail et état des lieux signés en ligne par toutes les parties ; état des lieux contradictoire, loi du 6 juillet 1989, art. 3-2).
Fichiers : src/lib/moveInFlow.ts, src/app/location/[id].tsx, src/app/location/edl.tsx, src/app/location/entree.tsx.
Tests : tests/move-in-flow.test.ts (6 tests) ; nouveau parcours e2eUX21 (1440 px et 390 px, clair et sombre) ; e2e10 et e2e10b adaptés aux étapes 4 à 9 (écran Visites, « Retenir » en bas, état des lieux pièce par pièce, écran des clés).
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Page « Découvrir » : une histoire avec Roo, à vivre en touchant l’appli
Inspirée de ProIntro (énergie, simplicité, on manipule). La page raconte un mois de bailleur avec Roo, et le visiteur le vit lui-même.
- Haut de page animé : « La gestion locative, simplement » (trait orange qui se dessine), bouton « Faire connaissance avec Roo ». À droite, un téléphone et des cartes flottantes qui changent toutes les 5 secondes : le loyer arrive, un retard, un papier, une question. Un appui sur une scène arrête la rotation.
- « Roo, bien plus qu’un assistant » : Roo en grand (ses yeux suivent le pointeur, il cligne), ses 5 traits (il veille, il lit, il écrit, il connaît les règles, il attend votre feu vert). Une conversation où Roo demande le prénom, le nombre de logements, la ville et le loyer. Toute la suite de la page reprend ces réponses.
- « Votre premier mois avec Roo » : 5 moments à faire dans le téléphone. La quittance part (tampon PAYÉ), la relance s’écrit sous vos yeux puis le virement arrive, la taxe foncière est prise en photo puis lue, la révision du loyer est calculée devant vous (indices INSEE T2 2025 et T2 2026), et Roo répond sur le chauffe-eau puis propose un devis. À la fin : « Vous venez de gérer un mois de location en … s ».
- Le reste : tuiles (relocation, bail signé en ligne, espace locataire, 12 prochains mois, déclaration), comparaison tableur / agence / Rentoo, prix repris de
src/lib/plans.ts, mot du fondateur, 6 questions.
- Fin personnalisée : « Sophie, Roo est prêt pour Angers », avec les moments faits cochés, puis « Créer mon compte gratuit ».
- Inventé, à remplacer : le mot du fondateur (deux appartements à Nantes, le tableur), le monogramme « PL » à la place d’une photo, et les noms de locataires et de candidats (fictifs, comme dans la démonstration).
Fichiers : public/decouvrir.html (page autonome, sans image ; les images de public/decouvrir/ ne servent plus).
Vérifié : parcours complet joué à 1440 px et 390 px (scènes, conversation, 5 moments, fin personnalisée), aucune erreur JavaScript, aucun débordement horizontal, lien d’inscription avec ROO-SITE-2026. Animations coupées si le téléphone demande moins de mouvement. Thème clair seulement.
Réglages à faire : aucun script SQL, aucune fonction. Mise en ligne avec la recette après fusion.
Se sentir récompensé : mois bouclé, votre année, coche qui répond, anniversaire du bail
- Le mois est bouclé : quand tous les loyers du mois sont reçus, une carte foncée à l’accueil (« Novembre est bouclé », total reçu, nombre de loyers). Jamais s’il reste un impayé ; du 1er au 10 du mois ; « Masquer » la retire pour le mois. Même calcul que la fête existante (
celebrationMessage).
- Votre année : dans cette carte, douze pastilles, une par mois, cochées quand tous les loyers du mois sont soldés.
- La coche qui répond : dans chaque message de réussite, la coche apparaît avec un petit rebond (rien si le téléphone demande moins d’animations). La vibration existait déjà.
- Anniversaire du bail : de 30 jours avant à la date anniversaire, une carte « Un an que Marie habite Nantes – T2 », avec « Voir la fiche de Marie » (révision du loyer, si le bail la prévoit) et « Masquer ».
Fichiers : src/components/home/MonthDoneCard.tsx, src/components/home/AnniversaryCard.tsx, src/components/home/FirstTimeCard.tsx, src/lib/anniversaries.ts, src/lib/firstTimes.ts, src/components/Toasts.tsx, src/app/index.tsx.
Tests : tests/anniversaries.test.ts (4 tests), tests/first-times.test.ts (3 tests) ; types, lint, 707 tests unitaires. Pas de test de parcours ni de captures (par économie, à faire avant de fusionner).
- Les premières fois : une carte à l’accueil, une seule fois chacune (« Merci » la retire) : 1re quittance partie (jusqu’à 3 envoyées), premier espace locataire ouvert (moins de 30 jours), première location faite avec Rentoo (bail issu d’une annonce, à 60 jours près), 100 quittances envoyées. Pas de fête rétroactive pour un compte installé depuis longtemps.
Réglages à faire : aucun. Publier la mise à jour (OTA).
Relais Découvrir → inscription : Roo emporte vos réponses
D’après les maquettes « La scène », « Le scénario en 6 images » et « Prototype animé ».
- Page Découvrir : au clic sur « Créer mon compte » (tous les boutons d’inscription), le bouton s’enfonce, un cercle vert part du bouton et couvre l’écran, Roo saute depuis le bas, puis dit « C’est parti, Sophie ! J’emporte vos réponses » avec les réponses données pendant l’échange (prénom, logement et loyer, code d’invitation). Puis « J’ouvre votre espace… ». Rythme calme : environ 5 secondes sur la page, le temps de lire les réponses une à une. Sans échange avec Roo : « C’est parti ! J’ouvre votre espace… », sans réponses affichées.
- Le relais : l’appli se charge derrière le même écran vert, avec Roo et « L’appli se charge… ». Plus d’écran blanc entre la page et l’appli. Même si l’appli se charge vite, cet écran reste au moins 1,8 seconde : le visiteur ne doit pas avoir l’impression d’être pressé. Un rechargement ne rejoue pas le relais.
- L’arrivée : l’écran vert prend doucement la couleur du fond (sable sur téléphone, vert sur ordinateur), le formulaire monte, une courte pause, puis Roo saute sur son coin : « Il ne manque que votre e-mail. Je garde Angers pour la suite. » Le prénom est déjà rempli ; le code d’invitation l’était déjà par l’adresse. L’introduction est passée.
- La promesse tenue : à l’accueil guidé, « Combien de biens ? » est déjà coché ; dans « Nouveau bien », la ville et le loyer visé sont remplis (« Repris de votre échange avec Roo »). Tout reste modifiable.
- Confidentialité : les réponses passent de la page à l’appli par le navigateur de l’appareil (stockage local, même site), jamais dans l’adresse web : elles n’apparaissent pas dans les journaux du serveur. Elles s’effacent dès le premier bien créé et ne servent plus au bout d’un jour. Rien n’est envoyé avant la création du compte.
- « Réduire les animations » (réglage du téléphone ou de l’ordinateur) : pas d’animation, on passe directement au formulaire.
- Retour arrière depuis l’appli : la page Découvrir revient intacte.
- Fichiers :
public/roo-relais.js (départ et attente, partagé par les deux pages), public/decouvrir.html, public/index.html, src/lib/decouvrir.ts, src/components/AuthScreen.tsx, src/app/_layout.tsx, src/app/biens/nouveau.tsx, src/components/Welcome.tsx.
- Tests :
tests/relais-decouvrir.test.ts (lecture des réponses, durée d’un jour, bornes). Nouveau parcours e2e/parcours/e2eRelais.js (390 px et 1440 px), pas encore dans la série vérifiée.
- Limites : la police de la page Découvrir (Kumbh Sans) n’est pas chargée par l’appli ; pendant l’attente, les textes de Roo s’affichent dans la police du système. Roo de l’appli (dessiné en vues natives) est légèrement différent de celui de la page (dessin vectoriel).
Réglages à faire : aucun script SQL, aucune fonction à redéployer. Publier la version web (la page Découvrir et roo-relais.js sont des fichiers du site).
Annuler une suppression · versements et dépenses, parking sans pièces
D’après la maquette validée « Annuler une suppression » (docs/maquettes/annuler-suppression/, fiche docs/fiches/2026-10-21-annuler-suppression.md).
- Versement supprimé : message « Versement de 820,00 € supprimé. Octobre 2026 redevient dû. · Annuler » pendant 10 secondes. La suppression n’est envoyée qu’à la fin du délai : « Annuler » remet le versement tel quel (affectations, chiffres), et la quittance automatique encore en attente repart normalement. Appli fermée pendant le délai : rien n’est supprimé.
- Dépense supprimée : même chose (« Dépense « Plombier » supprimée (180,00 €). · Annuler »), lien avec l’assurance compris.
- Un rechargement des données pendant le délai ne fait pas réapparaître la fiche supprimée.
- Les suppressions faites par l’appli elle-même (assurance modifiée, action de Roo annulée) restent immédiates.
- Parking et local : « Nombre de pièces » n’est plus affiché ni demandé (0 pièce enregistrée). Récapitulatif, annonce publique et contexte envoyé à Roo n’affichent plus « 0 pièce ».
- Écart avec la maquette : la confirmation garde son texte actuel (« Les loyers qu’il réglait redeviennent dus. »). La maquette parlait de quittance retirée, ce que l’appli ne fait pas : une quittance déjà envoyée reste dans les documents.
- Fichiers :
src/lib/deferredDelete.ts (nouveau), src/data/store.ts (deletePayment, deleteExpense avec { undoable: true }, filtre au rechargement), src/components/PaymentLedgerCard.tsx, src/app/finances/depense.tsx, src/app/biens/nouveau.tsx, src/components/public/ListingPage.tsx, src/hooks/useScreenContext.ts.
- Tests :
tests/annuler-suppression.test.ts (délai, annulation à temps et trop tard, deux suppressions, textes).
Plus jamais de saisie perdue sans réseau · envois en attente
D’après la maquette validée « Envois en attente » (docs/maquettes/envois-en-attente/, fiche docs/fiches/2026-10-21-envois-en-attente.md).
- Avant : sans réseau plus de 13 secondes, une saisie restait affichée mais n’était pas enregistrée, et « Réessayer » l’effaçait.
- Maintenant : la saisie est gardée. Un bandeau sombre dit « Pas de réseau · 1 modification en attente. Elle partira dès le retour du réseau. » ; le loyer pointé ou le versement porte « En attente d’envoi ». L’envoi se fait seul au retour du réseau (et toutes les 20 s, et en revenant dans l’appli) ; « Réessayer » renvoie sans rien effacer. Une fois parti : « Modification enregistrée ».
- Sur ordinateur, fermer l’onglet avec une modification en attente déclenche l’avertissement du navigateur.
- Un refus de la base (droits, formule) : comme avant, bandeau rouge et retour à ce qui est enregistré.
- La quittance automatique d’un loyer pointé sans réseau part après l’enregistrement, comme avant.
- Correction au passage : un versement renvoyé après une coupure au mauvais moment complète maintenant ses affectations (avant, elles pouvaient manquer).
- Choix prudent : les modifications en attente sont gardées tant que l’appli est ouverte, pas après sa fermeture. Les écritures d’un autre compte ne sont jamais rejouées après un changement de compte.
- Écart avec la maquette : la note « La quittance d’octobre partira une fois le paiement enregistré » n’est pas affichée (le comportement est bien celui-là).
- Fichiers :
src/data/outbox.ts (nouveau), src/lib/pendingWrites.ts (nouveau), src/data/store.ts (remote(), flushPending, loadAll, setUser, writeLedger, clés des versements), src/components/SyncBanner.tsx, src/components/PaymentLedgerCard.tsx, src/components/RentDueRow.tsx, docs/architecture.md.
- Tests :
tests/envois-en-attente.test.ts (panne ou refus, ordre gardé, refus retiré avec ce qui en dépend, double « Réessayer », fiches en attente, textes du bandeau).
Ordinateur · barre latérale en panneau flottant
D’après la maquette « Rentoo – Propositions ordinateur », option C retenue (panneau flottant avec Roo et le profil).
- Panneau détaché des bords de la fenêtre, coins arrondis. Même vert qu’avant (clair et sombre).
- Rubriques groupées : Accueil, puis « Gérer » (Biens, Locataires, Calendrier) et « Argent » (Finances, Fiscalité). Les intitulés restent affichés quand la fenêtre est basse (moins de 860 px de haut), en plus petit et resserrés (correctif du 22/10 : ils disparaissaient sur la plupart des écrans de portable).
- Rubrique active dans une pastille verte, comme sur la barre du téléphone. Les icônes sont d’une seule couleur (fini les carrés de couleur). Les pastilles de compte (2, 1…) restent à droite.
- En haut : le logo, la loupe (Rechercher, Ctrl K) et la cloche.
- En bas : un grand bouton « Ajouter », la carte Roo (sa tête, « Conseils affichés » ou « Masqué · touche R », l’interrupteur de la bulle ; un clic sur la carte ouvre Roo, la carte est entourée de vert quand on y est), puis « Profil et réglages » et les raccourcis clavier.
- Roo n’a plus de ligne dans la liste : la carte la remplace (une seule entrée Roo). Le téléphone ne change pas.
- Fichiers :
src/components/AppShell.tsx, src/components/nav.ts (NAV_GROUPS). Documentation : CLAUDE.md, docs/produit.md, docs/architecture.md.
- Tests : les parcours
e2eUX13 (7 liens dans le même ordre, Roo en dernier), e2eQW (pas de défilement, pas de lien vers les réglages), e2eSide (pied visible) et e2eC5 (« Rechercher (Ctrl+K) ») restent valables sans changement.
Dépenses du relevé bancaire, proposées en un geste
D’après la maquette validée « Dépenses du relevé » (docs/maquettes/depenses-du-releve/, fiche docs/fiches/2026-10-21-depenses-du-releve.md).
- Importer un relevé (Finances) lit maintenant aussi les débits. Deux listes : Loyers (inchangé) et Dépenses (nouveau). Sur téléphone, pastilles « Loyers · 2 / Dépenses · 4 » ; sur ordinateur, côte à côte.
- Seuls les débits qui ressemblent à une dépense de location sont proposés : fournisseur déjà classé par le bailleur, mot-clé (syndic, taxe foncière, CFE, assurance PNO, GLI, prêt, agence, comptable, artisan, travaux, commissaire de justice), ou montant égal à la mensualité de crédit d’un bien ou à la prime d’une assurance du bailleur (PNO, GLI, autre ; jamais l’habitation du locataire ni l’emprunteur). Les autres débits (courses, abonnements) sont rangés dans « non proposés ».
- Bien et catégorie devinés, modifiables d’un toucher. Un seul bien : choisi d’office. Sans bien : dépense générale. Le classement est retenu par fournisseur (via les dépenses déjà enregistrées).
- Doublon (même montant, date à 3 jours près, même bien) : « Déjà enregistrée le … », décoché.
- Mensualité de crédit : rappel « La mensualité compte dans votre cash-flow ; pour les impôts, seuls les intérêts sont déduits (Fiscalité) ». Règle appliquée : seuls les intérêts d’emprunt sont déductibles des revenus fonciers (déclaration 2044, ligne 250), le capital ne l’est pas. À faire confirmer par un professionnel pour les cas particuliers.
- Rien n’est enregistré avant « Enregistrer 2 loyers et 3 dépenses » ; le fichier reste lu sur l’appareil.
- Écart avec la maquette : après l’enregistrement, un message résume ce qui a été fait (au lieu d’une carte « Relevé importé ») et l’écran ouvre Finances › Loyers (ou Dépenses s’il n’y avait que des dépenses).
- Fichiers :
src/lib/bankCsv.ts (parseBankDebits, lecture de l’en-tête partagée), src/lib/bankExpenses.ts (nouveau), src/app/finances/releve.tsx.
- Tests :
tests/depenses-du-releve.test.ts (débits signés ou en colonne, libellé lisible, courses non proposées, mot-clé, bien cité, bien unique, mensualité, prime PNO, assurance habitation exclue, fournisseur retenu, doublons). tests/c7-releve.test.ts inchangé et vert.
Réglages à faire : aucun script SQL, aucune fonction à redéployer. Publier la mise à jour (OTA).
Expérience de A à Z · « Pendant votre absence »
D’après la maquette « Pendant votre absence » (canevas « Rentoo · Expérience de A à Z », idée n° 4).
- Retour après 7 jours ou plus sans ouvrir l’appli : en haut de l’accueil, une carte « Content de vous revoir, Sophie » avec Roo : « En 12 jours, voici ce qui s’est passé. » Une ligne par fait, avec les prénoms : quittances envoyées, paiements annoncés par les locataires, messages des locataires, documents déposés par eux, candidatures reçues, documents signés par tout le monde, locataires qui ont ouvert leur espace.
- Puis une phrase qui renvoie à la carte « Roo a préparé votre semaine » juste en dessous (« 2 points vous attendent, prêts juste en dessous » ou « Rien ne vous attend : tout est à jour »). Pas de bouton d’action en double.
- Rien de nouveau : « En 12 jours, rien de nouveau : Rentoo a veillé. »
- « Merci » retire la carte jusqu’à la prochaine absence. Elle reste affichée pendant la session si l’on change d’écran.
- Seulement des faits enregistrés : aucune estimation, rien que Roo aurait fait seul. Écart avec la maquette : « papiers reçus par e-mail » n’existe pas dans Rentoo (l’adresse Rentoo sert seulement à l’envoi), donc absent.
- La date de la dernière visite est gardée sur l’appareil (clé
rentoo.derniere-visite) ; rien de nouveau dans la base.
- Correction au passage : les cartes « Le mois est bouclé », anniversaire du bail et premières fois ne s’affichaient que sur un accueil sans aucun bien, donc jamais. Elles sont maintenant sur l’accueil normal, avant « Roo a préparé votre semaine ».
- Fichiers :
src/lib/away.ts, src/components/home/AwayCard.tsx, src/app/index.tsx, docs/produit.md.
- Tests :
tests/pendant-votre-absence.test.ts (6 tests) ; nouveau parcours e2e/parcours/e2eAbsence.js (390 px et 1440 px), pas encore dans la série vérifiée.
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Expérience de A à Z · « Le premier coup de baguette »
D’après la maquette « Le premier coup de baguette » (canevas « Rentoo · Expérience de A à Z », idée n° 2).
- Juste après la création d’un bail, la fiche du locataire s’ouvre sur une carte foncée avec Roo : « Voici la quittance que Marie recevra en novembre 2026 ». Dessous, l’aperçu de la quittance comme un papier posé : bailleur (nom, ou SCI « représentée par »), adresse, locataire et logement, loyer, charges, total, signature. Même calcul que la vraie quittance (révisions de loyer, prorata d’un premier mois entamé).
- Ce qui manque est dit tout de suite : prénom, nom, adresse ou nom de la SCI (obligatoires), ou signature absente, avec « Compléter mon profil ».
- « Elle part toute seule » : l’interrupteur d’envoi automatique de ce locataire, avec la phrase qui va avec (« Elle part toute seule à marie@… dès que vous marquez le loyer reçu », « Ajoutez l’e-mail de Marie… », ou envoi automatique coupé pour tous dans les réglages).
- Loyer déjà échu : « Déjà reçu : marquer 710 € payé » (pointage avec « Annuler », la vraie quittance part ensuite, comme avant) ou « Pas encore ». Sinon « C’est parfait ».
- Règle prudente : c’est un aperçu, marqué comme tel. Aucun document n’est créé ni téléchargeable pour un loyer non reçu : une quittance atteste un paiement (loi du 6 juillet 1989, article 21). À faire confirmer par un professionnel si l’on voulait un jour proposer un « avis d’échéance » téléchargeable à la place.
- Remplace l’ancienne carte « Premier loyer » de la fiche (même rôle, plus parlante) : pas de doublon.
- Fichiers :
src/lib/firstReceipt.ts, src/components/tenant/FirstReceiptCard.tsx, src/components/tenant/TenantDetail.tsx.
- Tests :
tests/premier-coup-de-baguette.test.ts (6 tests) ; nouveau parcours e2e/parcours/e2eBaguette.js (390 px et 1440 px), pas encore dans la série vérifiée.
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Suite de « Ordinateur · barre latérale en panneau flottant » : le menu du téléphone (bouton « Menu » de la barre du bas) n’avait pas changé.
- Rubriques groupées : « Gérer » (Calendrier, Travaux & avaries, Assurances, Documents, Mise en location) et « Argent » (Fiscalité). Le Calendrier reste en tête.
- Rubrique active dans une pastille verte, icônes d’une seule couleur (fini les carrés de couleur), comme sur l’ordinateur et la barre du bas.
- En bas : la carte Roo (sa tête, son réglage, l’interrupteur de la bulle ; un appui sur la carte ouvre Roo, la carte est entourée de vert quand on y est), puis « Pierre-Louis · Profil et réglages ».
- Roo et « Profil et réglages » n’ont plus de ligne en double dans la liste : une seule entrée chacun.
- Les rubriques pas encore utilisées (« Apparaîtront quand elles vous serviront ») ne changent pas.
- Fichiers :
src/components/SideDrawer.tsx, docs/produit.md.
- Tests : les parcours
e2eUX13 (Calendrier avant Fiscalité, « Roo » et « Profil et réglages » présents), e2e13, e2eUX10 et e2eT04 restent valables sans changement. Non lancés.
Calendrier · filtres en puces à cocher
D’après la maquette « Rentoo – Propositions ordinateur », planche « 2 · Filtres du Calendrier », option A retenue.
- Avant : un appui sur une pastille la barrait (texte rayé, pastille pâlie). Peu lisible : on ne savait pas bien si c’était affiché ou non.
- Maintenant : chaque pastille porte une coche verte quand elle est affichée, un rond vide quand elle est masquée. Plus de texte barré.
- Les biens gardent leur couleur : rond plein et coché = affiché, anneau de couleur = masqué. Un appui sur le rond change toujours la couleur du bien.
- Deux intitulés : « Afficher » (types) et « Biens ». Un lien « Tout afficher » apparaît dès qu’un filtre est retiré, avec un résumé (« Affichés : 4 types sur 5 · 2 biens sur 3 »).
- Pastilles plus hautes (40 px) pour le doigt.
- Même chose sur téléphone (dans « Filtres ») et sur ordinateur (toujours visibles).
- Fichier :
src/app/calendrier/index.tsx.
- Tests :
e2eUX5 (cases « Loyers » et biens, repliées sur téléphone) reste valable sans changement. Non lancé.
Réglages à faire : aucun script SQL, aucune fonction à redéployer. Publier la mise à jour (OTA).
Ordinateur · plus de pastilles coupées au bord des cartes
Retour de Pierre-Louis (22/10, « Modifier l’événement ») : les choix « Type » et « Me le rappeler » étaient coupés à droite (« Copropriété (AG… », « 1 mois avant »), sans moyen de les faire défiler à la souris.
- Sur ordinateur, les pastilles de choix passent à la ligne quand la place manque. Rien n’est plus coupé, dans tous les formulaires.
- Sur téléphone, rien ne change : elles défilent au doigt sur une seule ligne.
- Fichier :
src/components/ui/Segmented.tsx (mode pills seulement ; tabs et block inchangés).
Journal des erreurs · les extensions du navigateur ne le polluent plus
- Une erreur dont la pile vient d’une extension du navigateur (Chrome, Firefox, Safari) n’est plus notée dans
app_errors. En octobre 2026, 40 erreurs « M_ID » venaient d’une extension, pas de Rentoo.
- Fichiers :
src/lib/errorSource.ts (nouveau), src/lib/errors.ts. Test : tests/journal-sans-extensions.test.ts.
Réglages à faire : aucun. Publier la mise à jour.
Une dépense en double ne passe plus inaperçue
D’après la maquette validée « Dépense en double » (docs/maquettes/doublon-depense/, fiche docs/fiches/2026-10-22-doublon-depense.md).
- À l’ajout d’une dépense : si une dépense du même montant, à 3 jours près, sur le même bien (ou sans bien) existe déjà, rien n’est enregistré. Une carte « Déjà enregistrée ? » rappelle laquelle ; les boutons deviennent « Voir l’autre » et « Enregistrer quand même ». Changer le montant, la date ou le bien retire l’avertissement.
- Finances › À surveiller : « Dépense peut-être en double » pour chaque paire déjà présente (3 au plus), avec « Vérifier ».
- Vérifier (
/finances/doublon) : les deux dépenses côte à côte, avec leur origine (ajoutée le…, facture détaillée, justificatif). « Supprimer celle-ci » (avec « Annuler » 10 s) ou « Ce sont deux dépenses différentes » (la paire n’est plus signalée sur cet appareil).
- Les lignes d’une même facture détaillée ne sont jamais vues comme des doublons.
- Une seule règle pour la saisie, le relevé bancaire et À surveiller (
src/lib/expenseDuplicates.ts).
- Écart avec la maquette : sur téléphone, la carte d’avertissement est en haut du formulaire et les boutons du bas changent (« Voir l’autre », « Enregistrer quand même »), au lieu d’une carte posée au-dessus des boutons.
- Fichiers :
src/lib/expenseDuplicates.ts (nouveau), src/app/finances/doublon.tsx (nouveau), src/app/finances/depense.tsx, src/app/finances/index.tsx, src/lib/financeWatch.ts, src/lib/bankExpenses.ts, src/data/prefs.ts.
- Tests :
tests/doublon-depense.test.ts (règle, saisie, paires, paire écartée, facture détaillée, ligne d’À surveiller) ; depenses-du-releve toujours vert.
Importer ses biens et baux depuis un tableau
D’après la maquette validée « Importer un tableau » (docs/maquettes/import-tableau/, fiche docs/fiches/2026-10-22-import-tableau.md).
- Nouveau bien : une carte « Vous avez déjà un tableau ? » sous « Roo remplit la fiche pour vous ». Elle ouvre
/biens/tableau.
- Fichier CSV (Excel « Enregistrer sous CSV », Google Sheets « Télécharger en CSV »), lu sur l’appareil. « Télécharger le modèle » donne un tableau prêt à remplir.
- Colonnes reconnues automatiquement (adresse, code postal, ville, type, surface, pièces, locataire ou prénom et nom, e-mail, téléphone, loyer, charges, dépôt, date d’entrée, jour d’échéance, nue ou meublée), modifiables (« Modifier »). Une adresse complète dans une seule colonne (« 12 rue…, 44000 Nantes ») est découpée.
- Une ligne par logement : « Prêt », « À compléter » (ce qui manque est dit en clair), « Déjà dans Rentoo » (même adresse : non importé), « Non importé » (adresse ou ville absente). Lignes cochées d’office, sauf celles qu’on ne peut pas importer.
- Création : « Créer 3 biens et 2 baux ». Les baux passent par les règles communes (
buildLease) : suivi des loyers à partir du mois en cours (pas de faux impayés, règle A02), dépôt de garantie vérifié, indice IRL de référence. La limite de la formule est dite avant de créer.
- Choix prudents : sans date d’entrée ou sans loyer, seul le bien est créé (le bail se crée depuis sa fiche) ; sans jour d’échéance, le 1er du mois, signalé « à vérifier » ; les quittances automatiques ne sont pas activées pour les locataires importés (à activer sur leur fiche).
- Hors périmètre : fichier
.xlsx lu directement (bibliothèque supplémentaire), paiements passés, documents, prêts.
- Écart avec la maquette : un logement loué dont le jour d’échéance manque est « À compléter » (au lieu de « Prêt ») ; le choix des colonnes se fait dans une liste qui se déplie sous chaque colonne.
- Fichiers :
src/lib/tableImport.ts (nouveau), src/app/biens/tableau.tsx (nouveau), src/app/biens/nouveau.tsx, src/lib/bankCsv.ts (lecture CSV partagée : splitLine, parseAmount, parseDate, detectSeparator).
- Tests :
tests/import-tableau.test.ts (11 cas : colonnes, modèle, ligne vide, bail suivi au mois en cours, parking, date absente, adresse déjà connue, adresse en une colonne, prénom et nom séparés, meublé, virgules, doublon dans le tableau) ; c7-releve et depenses-du-releve toujours verts.
Réglages à faire : aucun script SQL, aucune fonction à redéployer. Publier la mise à jour.
Expérience de A à Z · « Votre année de bailleur »
D’après les maquettes « Votre année de bailleur » (canevas « Rentoo · Expérience de A à Z », idée n° 7).
- Le récit de l’année en quatre écrans (
/annee), à faire défiler avec « Suivant » et « Précédent » :
- « 2026 · Votre année de bailleur, Sophie. » avec Roo ;
- « 12 mois bouclés sur 12. » (ou « 11 mois bouclés sur 12, et Roo a suivi les autres »), les douze pastilles, quittances envoyées, papiers rangés, relances préparées, loyers encaissés, et le mois record ;
- la déclaration : loyers encaissés, dépenses classées, intérêts d’emprunt (tableau de la banque, attestation ou calcul de Rentoo), taxe foncière enregistrée ou à ajouter, avec « Voir ma fiscalité ». Rappel : Roo prépare la 2044, le bailleur relit, un conseiller fiscal tranche en cas de doute ;
- la carte à partager « Bailleur serein » : mois bouclés, quittances, papiers, sans montant, sans adresse, sans nom de locataire. « Partager ma carte » (copie sur ordinateur, partage sur téléphone, avec le lien de parrainage s’il existe) et « Inviter un ami bailleur ».
- Quand : une carte « Votre année 2026 est prête » à l’accueil du 15 décembre au 31 janvier, si l’année a de la matière ; « Plus tard » la retire pour l’année. Le récit reste ouvert à tout moment depuis le menu « … » de l’accueil (« Votre année 2026 », « jusqu’ici » en cours d’année).
- Mêmes chiffres que le reste de l’appli : mois bouclés comme la carte « Le mois est bouclé », loyers encaissés comme Finances. Couleurs fixes, comme une affiche, en clair comme en sombre.
- Écart avec la maquette : pas de « temps gagné » (« 17 h ») ni de « papier rangé en 41 secondes » : ce seraient des estimations sans règle validée. À décider avant de les ajouter (ajouté aux questions).
- Correction au passage : sur la carte « premier coup de baguette », les boutons vert foncé étaient posés sur le fond vert foncé ; ils prennent la couleur claire des autres cartes foncées.
- Fichiers :
src/lib/yearStory.ts, src/app/annee.tsx, src/components/home/YearStoryCard.tsx, src/app/index.tsx, src/components/AppShell.tsx (route cachée), src/components/nav.ts, src/components/tenant/FirstReceiptCard.tsx, docs/produit.md.
- Tests :
tests/votre-annee.test.ts (7 tests) ; nouveau parcours e2e/parcours/e2eAnnee.js (390 px et 1440 px), pas encore dans la série vérifiée.
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Expérience de A à Z · « Ce que Roo surveille »
D’après la maquette « Ce que Roo surveille » (canevas « Rentoo · Expérience de A à Z », idée n° 1).
- La liste « Bien démarrer » devient « Ce que Roo surveille » : huit veilles qui s’allument à mesure que le bailleur complète Rentoo, au lieu de huit corvées à cocher. « 3 sur 8 · chaque information ajoutée allume une veille. Je m’occupe du reste. »
- Les huit veilles, chacune liée à ce que Rentoo fait vraiment : Loyers (échéances et retards), Quittances (envoi automatique), Révision du loyer (bail qui la prévoit), Fin de bail (préavis, renouvellement, dépôt), Assurance (propriétaire ou habitation), DPE, Papiers (rangement et expirations), Déclaration (loyers et dépenses rangés pour mai).
- Une veille éteinte dit ce qu’il manque et combien de temps ça prend (« Une photo de l’attestation · 1 min », « L’e-mail du locataire · 30 s ») ; un appui y mène. Ajouter un bail en allume jusqu’à quatre d’un coup.
- Bouton « Allumer la suivante : assurance » ; sans bien, « Ajouter votre logement ». Repliée en une ligne « Ce que Roo surveille · 3 sur 8 » pour un compte déjà installé ; disparaît quand tout est allumé ; masquable comme avant (Réglages › Roo et apparence, libellé mis à jour).
- Écarts avec l’ancienne liste : « Activer Roo » et la signature ne sont plus des étapes (ce ne sont pas des veilles) ; la signature est demandée par la carte « premier coup de baguette », Roo garde son propre accueil.
- Fichiers :
src/lib/watches.ts, src/components/Onboarding.tsx, src/app/plus/apparence.tsx, src/data/prefs.ts (commentaires), docs/produit.md, e2e/parcours/e2e15.js (texte attendu).
- Tests :
tests/ce-que-roo-surveille.test.ts (7 tests).
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Expérience de A à Z · « Le merci du locataire »
D’après la maquette « Le merci du locataire » (canevas « Rentoo · Expérience de A à Z », idée n° 5).
- Côté locataire (espace « Mon logement », avec ou sans compte) : dans la liste des loyers, à côté de chaque quittance à télécharger, un petit cœur « Dire merci ». Un appui envoie « Merci pour la quittance d’octobre 2026 ! » au bailleur ; le cœur devient corail (« Merci envoyé »).
- Côté bailleur : le merci arrive comme un message (même fil d’échanges, même e-mail de prévenance) ; dans la fiche du locataire, la quittance prend un cœur corail et « Marie a dit merci ». La carte « Content de vous revoir » a sa ligne à part (« Marie vous a dit merci »).
- Un merci ne demande pas de réponse : il ne crée pas de carte « Message de Marie · Répondre » dans « À faire ».
- Sans changement de la base : le merci voyage comme un message, reconnu par son début de texte fixe. Aucun script SQL, aucune fonction à redéployer.
- Écart avec la maquette : pas de « trajet de la quittance » (partie, ouverte par Marie) ni de réponses toutes prêtes ; « ouverte » demanderait de suivre l’ouverture des e-mails, à décider (confidentialité).
- Fichiers :
src/lib/thanks.ts, src/lib/todos.ts, src/lib/away.ts, src/components/public/TenantPortalPage.tsx, src/components/tenant/TenantDetail.tsx.
- Tests :
tests/merci-du-locataire.test.ts (3 tests), tests/pendant-votre-absence.test.ts (+1).
Réglages à faire : aucun. Publier la mise à jour (OTA) ; l’espace locataire web suit la mise en ligne du site.
Expérience de A à Z · « Votre mois en 30 secondes » (temps rendu)
D’après la maquette « Votre mois en 30 secondes » (idée n° 6). Règle validée par Pierre-Louis le 22/10/2026.
- Récap du mois (Finances › Récap, et la carte d’accueil des 10 premiers jours) : un bloc « 1 h 25 rendues à vos dimanches d’octobre », le détail par tâche (2 quittances envoyées 20 min, 1 relance préparée 15 min, 2 papiers rangés 20 min, 1 révision de loyer 30 min) et la règle juste en dessous.
- La règle, toujours affichée : « Estimation : 10 min par quittance, 15 min par relance, 10 min par papier rangé et 30 min par révision de loyer, le temps moyen de chacune faite à la main. » Jamais présenté comme une mesure.
- Carte d’accueil du récap : « 1 h 25 rendues d’octobre · Votre mois en 30 secondes » quand il y a du temps rendu, sinon le texte d’avant.
- Votre année de bailleur : le total de l’année (« 17 h rendues à vos dimanches (estimation) ») sur le 2e écran, une ligne « de dimanches retrouvés » sur la carte à partager et dans le texte partagé (au-delà d’une heure). Question retirée de
AUDIT_CORRECTIONS.md.
- Un seul calcul pour le mois et pour l’année :
src/lib/timeSaved.ts.
- « La première semaine » (idée n° 3) abandonnée, validé par Pierre-Louis : doublon avec « Ce que Roo surveille ».
- Fichiers :
src/lib/timeSaved.ts, src/app/finances/recap.tsx, src/app/index.tsx, src/lib/yearStory.ts, src/app/annee.tsx, AUDIT_CORRECTIONS.md.
- Tests :
tests/temps-rendu.test.ts (3 tests), tests/votre-annee.test.ts (+1).
Réglages à faire : aucun script SQL, aucune fonction. Publier la mise à jour (OTA).
Sécurité · fonctions protégées fermées aux visiteurs sans compte (script 050)
D’après l’audit du 21/10/2026 (conseiller de sécurité Supabase : 130 fonctions exécutables sans compte).
- Pour le bailleur : rien ne change à l’écran. C’est une protection en plus : les fonctions réservées aux comptes connectés ne peuvent plus être appelées par un visiteur sans compte, même si elles vérifiaient déjà l’appelant.
- Restent ouvertes sans compte (liste blanche du script) : pages publiques à jeton (candidat, annonce, signature, devis, « Mon logement », espace locataire, agenda), journal d’erreurs, fonctions serveur protégées par un secret (abonnement, notifications, veille) et règles d’accès aux fichiers publics.
touch_invoice : chemin de recherche fixé (alerte du conseiller).
- Fichiers :
supabase/migrations/050_droits_fonctions_anonymes.sql (nouveau), e2e/securite/rls11.js (nouveau, dans la série vérifiée), CLAUDE.md (prochain script : 051).
- Tests :
rls11 (aucune fonction protégée hors liste blanche ; pages publiques ouvertes ; comptes connectés inchangés ; chemin de recherche). Toute la série de parcours rejoue les pages publiques sur une base avec ce script.
Réglages à faire : le script 050 part avec la mise en ligne (recette d’abord, production quand vous lancez « Run workflow »). Aucune fonction à redéployer. À faire avant la production : une série de parcours verte avec ce script (pages publiques).
Finances · « Mes indicateurs » : choisir ce qu’on suit
D’après les maquettes « Rentoo – Finances allégées », planches « Vos indicateurs : choisir, voir, zoomer ». Moment validé : option B (seulement quand il y a de vrais chiffres).
- Invitation en haut de la Synthèse, avec Roo : « Que voulez-vous suivre ? · Plus tard · Choisir ». Elle n’apparaît que si un bail a un loyer, que la synthèse n’a jamais été personnalisée, et tant que le bailleur n’a ni choisi ni passé. « Plus tard » la retire pour de bon (sur cet appareil).
- Étape 1 : 6 sujets avec les mots du bailleur, de 1 à 4 à cocher (3 cochés d’office : Ce qu’il me reste, Mes loyers rentrent, Ma rentabilité). Chaque sujet donne un ou plusieurs blocs existants : aucun nouveau calcul.
- Étape 2 : les blocs choisis, avec les vrais chiffres. « À surveiller » est toujours ajouté juste après le premier bloc (les actions avant les chiffres). On retire un bloc d’un appui, et on choisit la forme des graphiques : Évolution en barres ou en courbe (nouvelle courbe, tracée sans bibliothèque), Où part l’argent en liste ou en bande.
- « C’est parti » enregistre la synthèse pour l’ordinateur et le téléphone d’un coup (sur le compte, script 045), avec « Annuler » dans le message.
- Relançable à tout moment : Personnaliser › Modèles › « Me laisser guider ».
- La forme choisie est gardée dans la disposition (
chart) ; une forme inconnue est ignorée.
- Le zoom des maquettes existait déjà (panneau de focus : mesure, par bien, par poste, comparaison à la période précédente, opérations du mois touché) : inchangé.
- Fichiers :
src/lib/financeGoals.ts (nouveau), src/lib/financeBlocks.ts (FIN_CHARTS, chartOf, setFinChart), src/components/finances/GoalsSetup.tsx (nouveau), src/components/charts.tsx (LineChart), src/components/finances/Synthese.tsx, src/components/finances/Customize.tsx, src/app/finances/index.tsx, src/data/prefs.ts (financeGoalsDone), docs/produit.md.
- Tests :
tests/fin5-mes-indicateurs.test.ts (sujets → blocs, « À surveiller » toujours là, 4 sujets au plus, moment de l’invitation, forme enregistrée et relue). Parcours de Finances non relancés.
Réglages à faire : aucun script SQL (la disposition utilise la colonne du script 045), aucune fonction à redéployer. Publier la mise à jour (OTA).
Gladoo · chantier 1 : identité graphique
- Rentoo devient Gladoo (glad : « patrimoine » en breton). Ce chantier ne change que l’apparence : le nom affiché, les e-mails et les identifiants techniques suivent dans les chantiers 2 et 3.
- Nouveau logo partout où l’app l’affiche (accueil, connexion, barre latérale, menu, pages publiques, rapports) : GL·A·D en vert forêt, le A en toit de maison avec sa porte, le « oo » en boucle infinie. Lettres légèrement espacées (réglage « Aéré », choisi sur maquette).
- Nouvelle icône (toit blanc et porte menthe sur vert forêt) : iPhone, Android (adaptative et monochrome), écran de démarrage, favicon, app web installable, version recette avec bandeau « RECETTE ».
- Couleurs Gladoo : vert forêt
#143A31, vert sauge #6FA394, fond ivoire #F7F6F3, texte #1B2623. Mêmes noms dans tokens.ts, aucun écran réécrit. En sombre, la couleur principale reste le vert sauge. Contour des champs plus visible (3:1 au lieu de 1,6:1).
- Barre latérale (ordinateur) : le logo est seul sur sa ligne ; en dessous, une ligne d’outils « Rechercher » (Ctrl K) et la cloche des notifications, aux coins arrondis des boutons. Avant, le logo (plus large) passait sous la loupe et la cloche.
- Quittances, courriers, export fiscal et page « Mon logement » imprimée : nouvelles couleurs. Illustration de la maison recolorée.
- Fichiers :
src/theme/tokens.ts, src/components/Logo.tsx, src/components/AppShell.tsx (en-tête de la barre), src/components/Notifications.tsx (option square), couleurs en dur dans CopilotBubble.tsx, HomeLinkCard.tsx, public/PortalLiving.tsx, src/lib/letters.ts, quittanceHtml.ts, taxExport.ts ; app.json, public/index.html, public/manifest.json ; images de assets/images et public/ ; sources assets/images/logo-gladoo/ (script generer_logo.py) ; anciennes images dans assets/images/_ancien-logo/rentoo-v2. Doc : docs/identite.md.
Réglages à faire : app.json change (icônes, couleur de l’écran de démarrage) : recompiler l’APK ; le reste part en mise à jour (OTA). Aucun script SQL, aucune fonction à redéployer.
Gladoo · chantier 2 : le nom affiché
- « Rentoo » devient « Gladoo » partout où le bailleur ou le locataire le lit : écrans, messages, aide, réponses de Roo (« Basé sur vos données Gladoo »), quittances et courriers (« Document généré avec Gladoo »), noms des fichiers téléchargés (
Gladoo-declaration-2025.csv, gladoo-operations-….csv, gladoo.ics), nom de l’app sous l’icône et textes d’autorisation (photos, appareil photo, micro).
- Site public : pages Découvrir, Outils gratuits, Mentions légales et Confidentialité au nouveau nom, avec le nouveau logo et les couleurs Gladoo ; nouvelle image de partage
public/og-gladoo.png (l’ancienne est archivée).
- E-mails : expéditeur « Gladoo » ou « Léa Morel via Gladoo », pied « Envoyé avec Gladoo », couleurs Gladoo ; modèles d’e-mails de connexion (code, mot de passe, signature) mis à jour.
- Documentation,
CLAUDE.md et consignes des agents au nouveau nom. L’historique, le journal et les scripts SQL existants gardent « Rentoo » (ils racontent le passé ; une migration ne se modifie jamais).
- Pas changé ici (chantier 3) : adresses
contact@rentoo.fr et domaine d’envoi, adresse web rentoo.expo.app, liens rentoo://, identifiant fr.rentoo.app, clés d’enregistrement sur l’appareil (rentoo-prefs…), noms techniques (#rentoo-relais, RentooDemo). Les captures d’écran de la page Découvrir (public/decouvrir/*.jpg) montrent encore l’ancienne interface. La promesse « La gestion locative, simplement. » est conservée en attendant la décision de Pierre-Louis.
- Tests mis à jour avec le nouveau nom (
tests/n1-mail.test.ts, fisc-workflow, a02-suivi, r3-reponses, roo-accueil… et les parcours e2e concernés, faux service Anthropic compris).
Réglages à faire : redéployer les fonctions send-receipt, location, copilot, billing, veille ; coller les 3 modèles de supabase/templates/ dans Supabase (Authentication › Emails › Templates) et changer les objets en « Votre code Gladoo » et « Réinitialisation de votre mot de passe Gladoo », en recette puis en production ; recompiler l’APK (nom de l’app et textes d’autorisation dans app.json) ; publier la mise à jour (OTA). Aucun script SQL.