Projets · EN
Le travail en cours.Quatre codebases, tous bien vivants.
Les logiciels que je construis et maintiens en ce moment. Chaque dépôt s’appuie sur un README à jour qui couvre l’architecture, les choix techniques et l’état actuel — écrit pour être lu, pas archivé.
ProfileForge
Une application Next.js auto-hébergeable qui transforme un CV téléversé en profil structuré avec traçabilité au niveau de chaque ligne, puis génère un CV et une lettre de motivation adaptés à une offre donnée. Le matching et le scoring sont des fonctions déterministes ; le LLM (via la clé OpenRouter de l’utilisateur) se limite à extraire les exigences et à reformuler le contenu adossé aux preuves, si bien que chaque affirmation remonte aux données du profil. Les exports PDF passent un contrôle d’extraction à deux niveaux avant tout téléchargement.
02RunLens
Une application Android qui lit votre dernière course Garmin via la Personal API de Garmin et l’enrichit avec le fichier FIT d’origine pour obtenir la dynamique de course seconde par seconde. Un moteur d’analyse en Kotlin pur calcule le découplage aérobie, l’allure ajustée au dénivelé (modèle de Minetti), la répartition par zones cardio et les tendances de forme ; un moteur de conseils transforme ces chiffres en recommandations priorisées qui les citent. Fonctionne hors ligne, avec des solutions de repli basées sur le FIT quand les endpoints de Garmin font défaut.
03sleep-analysis
Un suivi du sommeil sur Android, pensé pour la vie privée. L’audio nocturne passe par un service de premier plan de type micro ; les épisodes de ronflement sont détectés sur l’appareil par une heuristique spectrale et stockés sous forme de courts clips avec leur provenance complète dans Room — l’audio de la nuit entière ne quitte jamais le téléphone. Un import Garmin optionnel ajoute le contexte du bracelet, explicitement étiqueté comme estimations du fabricant, et une petite chaîne d’outils Python prend en charge le réglage des fixtures et l’analyse.
04stillroom
Respiration, attention et concentration, hors ligne, avec un son entièrement synthétisé en direct : un AudioWorklet superpose des bruits filtrés en paysages sonores qui ne bouclent jamais, planifiés sur l’horloge Web Audio avec une avance fixe, pour que le minutage ne dépende jamais de l’interface. Un service natif de premier plan avec session média maintient les séances actives téléphone verrouillé, et les changements de focus audio sont traduits en une politique pause/atténuation/reprise couverte par des tests unitaires.
RunLens vit dans le dépôt analysis-garmin. sleep-analysis est privé le temps que le travail de détection se stabilise ; son README n’en reste pas moins à jour.
Le fil conducteur
Des petits systèmes inspectables.
Local d’abord quand les données sont sensibles, déterministe quand la justesse compte, et suffisamment documenté pour être repris et exécuté. Des tests et de la CI plutôt que des promesses.