learn-app
Une application de révision par répétition espacée, en Expo et React Native. L’algorithme SM-2 au centre, un duel en temps réel autour, et tout qui continue de fonctionner sans réseau.
Réviser marche mal quand on choisit soi-même ce qu’on revoit : on retourne vers ce qu’on sait déjà, parce que c’est agréable. La réponse classique est l’algorithme SM-2, et c’est lui qui tient le cœur de l’application. Chaque question porte un facteur de facilité qui démarre à 2,5 et ne descend jamais sous 1,3, un intervalle et un compteur de répétitions ; une réponse juste envoie la carte à un jour, puis six, puis à l’intervalle précédent multiplié par son facteur ; une réponse ratée la renvoie au lendemain et remet le compteur à zéro. Les cartes en retard passent devant, et à égalité c’est la plus difficile qui sort.
La note qu’on donne à sa propre réponse est le point que le papier laisse au programme. Ici elle n’est pas demandée à l’utilisateur : elle est déduite du temps de réponse rapporté au temps imparti. Sous trois dixièmes de la limite, la réponse compte comme parfaite ; au-delà de la moitié, comme correcte mais laborieuse. C’est un compromis assumé, et le prix d’une application où l’on répond vite plutôt que de s’auto-évaluer après chaque carte.
Autour de ce noyau, dix-sept écrans : solo, révision, défi quotidien, amis, classements, succès, et un mode deux joueurs où la partie vit dans un document Firestore que les deux téléphones écoutent en temps réel. Deux cent quatre-vingts questions écrites à la main, sur dix thèmes et trois niveaux, dont une série qui pose une image plutôt qu’un énoncé.
Le hors-ligne n’est pas un mode dégradé mais la position par défaut : questions, résultats et cartes de révision sont en cache local, les résultats produits sans réseau attendent dans une file de synchronisation, et l’application démarre entièrement sans Firebase, un profil invité local suffisant à jouer.
Ce qui n’existe pas, et qu’il vaut mieux dire : la génération de questions par modèle. Le service est écrit, les thèmes et les niveaux y sont décrits en toutes lettres, l’invite est construite, mais aucune clé n’est branchée et l’appel lève une erreur explicite. C’est une prise en attente d’un appareil, pas une fonctionnalité.
Projet privé, pas de lien public
