FocusAI
Développeur solo (Android)•Projet Personnel•Avr. 2026
Application Android de productivité premium pour le deep work : sessions de concentration immersives, coach IA « Lumina », streaming audio ambiant et statistiques d'activité. Stack réactive moderne (StateFlow, Hilt, ExoPlayer).
Technologies
Contexte & Objectif
Construire une application Android de productivité « deep work » avec une architecture réellement moderne de bout en bout — pas juste un MVP fonctionnel — couvrant sessions de concentration immersives, coach IA intégré, streaming audio ambiant et suivi d'activité, en s'appuyant volontairement sur la stack Android « recommandée » (StateFlow, Hilt, ExoPlayer) plutôt que des raccourcis.
Objectifs techniques :
- MVVM strict avec une vraie séparation UI / ViewModel / Repository / Data
- État réactif de bout en bout via Kotlin Flow/StateFlow plutôt que LiveData
- Streaming audio stable en arrière-plan pendant toute une session de focus, sans coupure
Architecture & Choix Techniques
Une architecture MVVM en 4 couches : Activities (ViewBinding, collecte de StateFlow) → ViewModels (@HiltViewModel, exposent l'état via StateFlow) → Repositories (@Singleton, injectés via Hilt, abstraction des sources de données) → couche Data (Room pour la persistance locale, Retrofit pour l'API Radio-Browser, Firebase pour l'authentification, ExoPlayer pour le streaming). L'injection de dépendances (Hilt/Dagger) traverse toutes les couches, évitant les singletons manuels et rendant chaque couche testable indépendamment.
Le Processus
Sessions immersives — mode plein écran avec minuteur, orbe de respiration animé et égaliseur audio en direct, piloté par un ViewModel dédié qui expose son état via StateFlow.
Coach IA « Lumina » — assistant conversationnel intégré donnant des conseils contextualisés à partir des statistiques de session réelles de l'utilisateur, plutôt qu'un LLM générique branché à l'aveugle.
Fiabilité en arrière-plan — les rappels quotidiens de concentration passent par WorkManager (planification qui survit au redémarrage de l'app/de l'appareil) plutôt qu'un simple minuteur en mémoire.
Défis Techniques & Solutions
Défi — streaming audio stable pendant une session immersive, sans coupure ni fuite mémoire. Solution : ExoPlayer (Media3) plutôt que le MediaPlayer natif, bien plus robuste sur la gestion du cycle de vie et des changements d'état réseau pendant une session longue.
Défi — état réactif cohérent entre plusieurs écrans (Home, Session, Stats) sans code répétitif. Solution : StateFlow de bout en bout via des @HiltViewModel, chaque écran collecte son propre flux d'état plutôt que de passer par des callbacks ou un bus d'événements global.
Résultats & Impact
- Stack « Pro » complète livrée : authentification Firebase (email/mot de passe + Google Sign-In via Credential Manager), sessions immersives, coach IA, streaming audio, graphiques d'activité hebdomadaire (MPAndroidChart)
- Architecture testable et modulaire (MVVM + Hilt), structure de dossiers organisée strictement par responsabilité
- Ciblage Android API 31+ sur JDK 17, avec Firebase Auth + Firestore en place pour la synchronisation temps réel des statistiques prévue