Portfolio
Carnet d'entraînement 2.0.0
Carnet d'entraînement est disponible sur le Google Play Store. C'est un carnet numérique pour noter l'entraînement que vous faites vraiment : séances, exercices, et séries en répétitions ou chronométrées, avec leur poids ou leur élastique. Le tout hors ligne : aucun compte, aucune connexion, aucun serveur.

Si la version commence à 2.0.0, c'est que ce n'est pas un coup d'essai. À l'origine, il y avait une application Android mono-plateforme, écrite il y a quelques années, avant ma formation officielle. La 2.0.0 en est une réécriture complète en Kotlin Multiplatform : une seule base de code pour Android, iOS et Desktop.
Sous le capot
L'application repose sur Compose Multiplatform et Kotlin 2.4, et toute l'interface utilisateur est partagée —
pas une ligne d'écran spécifique à une plateforme. Le projet est découpé en modules Gradle core:*
et feature:*, avec une direction de dépendance stricte : domain est du Kotlin pur, data
implémente les interfaces que domain déclare, et les features s'ignorent les unes les autres. Les
écrans suivent le patron MVI, l'injection passe par Koin, et les
données vivent dans SQLite en local via SQLDelight :
des requêtes typées, aucune réflexion, et le même schéma sur toutes les cibles. La navigation
s'appuie sur Navigation 3.
Le minuteur de repos aura été le problème multiplateforme le plus intéressant. Entre deux séries,
un compte à rebours qui ne tourne qu'au premier plan ne sert à rien : l'alarme est donc confiée au
système plutôt qu'à une coroutine, via un ordonnanceur expect/actual qui s'appuie sur
AlarmManager sur Android et sur une notification locale sur iOS. Elle sonne à la fin du repos,
que vous ayez changé d'application ou verrouillé l'écran — et si la permission d'alarme exacte est
refusée, elle bascule sur une alarme inexacte au lieu de planter.
Tout a été écrit en TDD, guidé par ZOMBIES : près de quatre fichiers Kotlin sur dix
sont des tests. Ils couvrent la logique métier, les ViewModels, les requêtes SQLDelight, le graphe
Koin, la navigation, et l'interface Compose elle-même via runComposeUiTest. Chaque build passe
par detekt, avec règles adaptées à Compose.
Accessibilité
L'accessibilité fait partie des tests, ce n'est pas une passe de finition : compatibilité TalkBack, zones tactiles et écrans qui tiennent aux plus grandes tailles de texte et d'affichage, thèmes clair et sombre, français et anglais, et des mises en page conçues pour la tablette et le mode paysage.
Vos séances restent sur votre appareil. Vous pouvez les exporter dans un fichier quand vous voulez, et les restaurer tout aussi facilement.

Commentaires
Aucun commentaire pour le moment.
Une remarque, une suggestion ? N'hésitez pas à vous exprimer ci-dessous. Veuillez simplement être courtois et poli, merci d'avance.