Oléo 2024–2026 Moderniser une application métier déjà en service

APPLICATION MÉTIER · PRODUCT BUILDING

Faire évoluer une application existante sans rien casser de ce qui marchait, et rendre chaque évolution plus sûre que la précédente.

Client
Application pour enseignants · Produit indépendant
Rôle
Product Builder · Reprise, conception et développement
Équipe
Seule sur la reprise
Mode
Reprise d’une application existante
Outils
  • Figma
  • Claude Code
  • VS Code
  • Node.js
  • Express
  • SQLite
  • GitHub
  • GSAP
Périmètre
Audit de l’existant · Sécurité des données · Hébergement et sauvegardes · UX/UI · Développement · Site vitrine · SEO

Une application qui marchait, et que plus personne n’osait toucher.

Vous avez peut-être un outil comme celui-là : il rend service tous les jours, mais chaque modification fait peur. C’était le cas d’Oléo, une application de gestion de classe pour les enseignants : 47 comptes, plus d’un millier d’élèves suivis.

J’en avais conçu toutes les maquettes, à partir d’entretiens avec un prof, mon mari. Mon père l’avait ensuite développée. Deux ans plus tard, l’application avait grandi plus vite que ses fondations techniques.

En septembre 2026, j’ai tout repris, seule : consolider l’existant sans interrompre le service, moderniser les usages à partir de ce que les données révélaient, puis construire le site qui manquait pour faire venir de nouveaux utilisateurs.

47Comptes enseignantsrelevé en production, octobre 2026
1 071Élèves suivisrelevé en production, octobre 2026
2Ans entre la création et la reprise2024 → 2026
16Journées de travailpour toute la reprise, site vitrine compris

Le vrai risque d’une application existante, c’est ce qu’on ne voit pas

Oléo n’avait pas de problème visible : les enseignants s’en servaient chaque jour. Mais une partie du code n’existait que sur le serveur, sans copie ni historique : chaque modification se faisait sans filet.

Ce genre de fragilité ne se voit pas à l’écran. C’est pourquoi une reprise commence toujours par un état des lieux complet — le code, l’hébergement, les données — avant d’ajouter la moindre fonctionnalité.

Sur un produit existant, le risque n’est pas ce qui manque : c’est ce qu’on casse en ajoutant

Mon parti pris
Phase 01

Consolider l’existant sans interrompre le service

Des fondations solides, sans arrêter l’application

Le code récupéré et historisé. Tout ce qui tournait sur le serveur a été rapatrié, y compris des fichiers qui n’existaient nulle part ailleurs. Chaque modification peut désormais être relue, comparée et annulée.

Un environnement de test avant les utilisateurs. Chaque évolution est d’abord installée sur une copie de l’application, vérifiée, puis mise en ligne automatiquement.

Des données qui évoluent sans risque. Chaque changement dans la structure de la base est d’abord rejoué sur une copie des vraies données et vérifié ligne à ligne. Si quelque chose ne correspond pas, rien n’est appliqué.

Des accès vérifiés un par un. Deux audits complets du code et de la base, et des droits contrôlés compte par compte : chaque enseignant n’accède qu’à ses propres classes.

Des sauvegardes hors du serveur. Elles sont faites sans interrompre le service et rangées ailleurs : une panne de l’hébergeur n’emporterait pas les copies avec elle.

Dans votre entreprise, la question est la même : que se passerait-il demain si le serveur de votre outil tombait ?

3Environnements séparésdéveloppement, test, production
2Audits completsdu code et de la base
14Évolutions de la basechacune testée sur une copie des vraies données

Plus rapide, et mesuré

Les lenteurs ont été chronométrées avant d’être corrigées, puis chronométrées à nouveau. Et un défaut invisible a disparu : annoter toute une classe pouvait laisser la moitié des élèves annotés si la connexion coupait au milieu. C’est désormais tout ou rien.

Supprimer un compte enseignant
13,5 s40 ms
−99,7 %
Annoter une classe de 28 élèves
112 échanges1 seul
÷ 112
Phase 02

Moderniser l’application à partir de l’usage réel

Les données racontaient ce que personne n’avait formulé

J’ai repris mes propres maquettes avec, en face, deux années d’usage réel. Certaines décisions tenaient, d’autres non. Et la base de données en disait plus long qu’un entretien : elle gardait la trace des contournements que les utilisateurs avaient inventés faute de mieux.

C’est la première chose que je regarde quand je reprends une application métier : ce que les gens font vraiment, pas ce qu’on croit qu’ils font.

Décision de conception

Pourquoi les enseignants effaçaient-ils leurs listes d’élèves à chaque rentrée ?

Constat

Rien ne rattachait une classe à une année : faute d’un endroit où ranger l’ancienne, on réécrivait par-dessus. La base en gardait la trace, 5 210 fiches d’élèves et 239 classes créées depuis l’origine, pour 1 024 élèves et 45 classes encore actives.

Solution

Chaque classe appartient désormais à son année. À la rentrée, celles de l’an dernier rejoignent d’elles-mêmes les archives : rien n’est déplacé ni recopié, et plus aucune manipulation risquée au pire moment de l’année.

Décision de conception

Pourquoi une même salle était-elle dessinée trois fois ?

Constat

Un enseignant avait créé « P2 », « P2 - GR1 » et « P2 - GR2 » : la même salle de 27 tables, redessinée à la main pour chacun de ses demi-groupes. L’outil ne savait pas dire « ces seize élèves-là » sans inventer une fausse classe.

Solution

Des groupes au sein d’une classe : un élève peut appartenir à plusieurs, un cours peut ne concerner qu’un groupe, et le plan de classe d’un groupe part de celui de la classe entière. Une salle se duplique aussi en un geste.

Décision de conception

Que faisait vraiment le bouton « important » ?

Constat

Presque rien : une tâche marquée importante ne passait devant que celles écrites dans le quart d’heure précédent. Personne ne l’avait signalé, parce que la fonction semblait exister.

Solution

Plutôt que de réparer un marqueur, j’ai rendu l’ordre à l’enseignant : chaque ligne se déplace à la main, et sa position dit sa priorité. Les tâches déjà marquées ont été remontées en tête, pour que rien de l’intention de départ ne se perde.

Décision de conception

Faut-il laisser l’utilisateur choisir combien de temps garder les données ?

Constat

La maquette prévoyait une option « garder indéfiniment » : c’était laisser l’utilisateur décider seul du sort de données de mineurs.

Solution

La règle est fixée par le produit : l’année en cours et la précédente, puis suppression, et l’enseignant peut seulement l’abréger. Une durée de conservation se décide par le responsable du traitement, pas au détour d’une case à cocher.

  • Fenêtre « Placer automatiquement les 26 élèves » avec élèves à séparer, élèves à rassembler et préférences, devant le plan de classe

    Le placement automatique, enfin réel

    Les boutons « Séparer des élèves » et « Mettre ensemble » existaient, mais répondaient « Fonctionnalité disponible prochainement ». Ils fonctionnent désormais : l’outil cherche la meilleure disposition possible dans la vraie salle, et dit clairement ce qu’il n’a pas pu respecter.

    Résultat

    Sur 46 élèves et 30 tables, l’ordre alphabétique est respecté à 100 %, en moins de 50 ms.

  • Emploi du temps de la semaine B avec ses créneaux de 55 minutes, la pause de midi et les cours de groupes Q1 et Q2

    Les vrais horaires de l’établissement

    La grille allait de 8 h à 18 h par heures pleines : aucun établissement ne sonne à ces heures-là, et il fallait corriger chaque cours à la main. Elle suit désormais les vraies sonneries, les semaines A et B, et le samedi pour qui le travaille.

    Résultat

    Les créneaux et les pauses sont enfin ceux du collège, et un cours posé prend les horaires de sa case.

  • Mémo de la classe 3B listant les annotations à reporter sur Pronote, une tâche par catégorie et par jour avec les noms des élèves

    Ce qu’il reste à reporter sur Pronote

    Pronote ne permet pas qu’un autre logiciel y écrive : la double saisie ne peut pas disparaître, mais elle peut devenir rapide. Oléo prépare la liste exacte de ce qu’il reste à reporter, dans l’ordre où on la saisit.

    Résultat

    La liste à recopier le soir s’écrit toute seule dans le mémo, une tâche par classe et par jour.

  • Onglet Historique de la fiche d’un élève : annotations groupées par jour, retard, matériel oublié, travail à la maison

    L’historique d’un élève

    Les annotations ne se lisaient que par catégorie : on voyait « 3 retards », jamais ce qui s’était passé jeudi. L’information existait déjà ; il lui manquait simplement un écran.

    Résultat

    Un conseil de classe ou un mot aux parents se prépare depuis un seul onglet, jour par jour.

  • Plan de classe en mode annotation multiple, cinq élèves sélectionnés et le bouton « Appliquer travail à la maison à 5 élèves »

    Annoter toute une classe

    Sélectionner les élèves sur le plan, choisir l’annotation, appliquer. Derrière ce geste simple, tout a été réécrit pour qu’une coupure de connexion ne laisse jamais une classe à moitié annotée.

    Résultat

    La classe est annotée entière, ou pas du tout.

  • Éditeur de la salle P2 : 30 places, tables en rangées et en îlot pivoté, bureau du professeur, tableau à gauche

    Une salle qui reste comme on l’a dessinée

    Le bureau du professeur se recalculait à chaque ouverture : impossible de poser une table à côté. Et un défaut de calcul faisait ressortir des tables droites inclinées de sept degrés, 29 en production. Les deux sont corrigés, et les angles enregistrés remis d’aplomb.

    Résultat

    Le bureau se pose, pivote et garde sa place, et les tables droites restent droites.

Ce qui sert tous les jours, en premier

Le menu mettait six rubriques sur le même plan, alors que deux servent chaque jour, le tableau de bord et le mémo, et quatre se règlent une fois, en début d’année. Le quotidien passe désormais devant, le paramétrage est regroupé dessous, et chaque rubrique s’ouvre directement là où l’on modifie.

Phase 03

Faire venir de nouveaux utilisateurs

Vérification de l’import de l’emploi du temps exporté de Pronote : 10 libellés associés aux classes et groupes existants, 15 cours reconnus avec leurs semaines A et B, heures de fin ajustées aux horaires

Rien à ressaisir pour commencer

Le premier frein à l’adoption d’un nouvel outil, c’est la ressaisie. Les enseignants exportent leur emploi du temps depuis Pronote et le déposent dans Oléo : cours, horaires et alternance des semaines A et B sont reconnus automatiquement, puis relus avant d’être ajoutés. Les listes d’élèves arrivent de la même façon.

Une simple capture d’écran fonctionne aussi : une IA relève ce qui est écrit, puis des règles fixes recalent les horaires sur les vraies sonneries. L’IA ne devine jamais l’alternance des semaines, une erreur à cet endroit créerait des cours fantômes une semaine sur deux, invisibles à la relecture. Savoir où ne pas faire confiance à l’IA fait partie de la conception.

Assistant de mise en route en quatre étapes : emploi du temps, classes, salles, plans de classe

Une mise en route qui ne bloque personne

L’emploi du temps était un passage obligé : impossible de créer une classe ou une salle sans lui. Or, pour se servir d’Oléo, il suffit d’une classe, de ses élèves et d’une salle.

La mise en route devient un assistant en quatre étapes. L’emploi du temps reste proposé en premier, parce qu’un seul import en remplit deux autres, mais « Passer cette étape » est aussi visible que les autres choix, et l’outil s’en souvient.

Le site vitrine d’Oléo : la page d’accueil sur ordinateur, la page « Oléo et Pronote » et la page « Placement automatique » sur téléphone

Un site pour être trouvé, là où il n’y avait qu’un écran de connexion

L’adresse d’Oléo ouvrait directement l’écran de connexion : un enseignant qui en entendait parler n’avait rien à lire avant de créer un compte. J’ai conçu et intégré un site de treize pages, chacune pensée pour une recherche précise : importer depuis Pronote, faire un plan de classe en ligne, placer ses élèves automatiquement, disposer sa salle, annoter.

Le site respecte ses visiteurs autant que l’application respecte ses utilisateurs : aucun cookie, aucun service tiers, une mesure d’audience sans donnée personnelle, et donc pas de bandeau de consentement.

Reprendre votre application, avec la même méthode

Reprendre une application existante, c’est d’abord ne rien casser. Chaque évolution a été préparée séparément, testée sur une copie, puis livrée. Les gains ont été mesurés, pas supposés. Et quand une correction s’est révélée moins bonne que l’existant, elle a été défaite puis refaite autrement.

La mise en production, l’étape la plus délicate, a été préparée comme une étape à part entière : mode d’emploi pas à pas, ordre qui évite toute interruption de service, sauvegarde vérifiée avant de commencer.

Si votre outil ressemble à celui-ci — il rend service, mais plus personne n’ose y toucher — c’est exactement la mission « Moderniser une application existante ».

Reprendre un produit, ce n’est pas le réécrire : c’est rendre chaque évolution plus sûre que la précédente.

Ce que je retiens

Un processus à outiller ?

Parlons de votre application métier.

Montrez-moi comment vous travaillez aujourd’hui : vos fichiers, vos outils et les étapes qui vous font perdre du temps.