Files
HabitForge/ROADMAP.md
T

13 KiB

🗺️ HabitForge - Roadmap

État des lieux et vision future du projet


📋 Ce qui est fait ✅

🏗️ Infrastructure

Fonctionnalité Statut Détails
Docker (simple SQLite) ✅ docker-compose.yml - déploiement rapide
Docker Dev (PostgreSQL + CloudBeaver) ✅ docker-compose.dev.yml - DB admin UI
Docker Prod (Nginx + Gunicorn + Backup) ✅ docker-compose.prod.yml - prêt production
Environnements (.env) ✅ .env.development, .env.staging, .env.production
Alembic Migrations ✅ 9 migrations, support SQLite & PostgreSQL
Rate Limiting ✅ SlowAPI avec config par env
Git LFS ✅ GIFs des exercices stockés via LFS

🔐 Authentification

Fonctionnalité Statut Détails
JWT Auth (OAuth2 Password Flow) ✅ Access + Refresh tokens
Registration ✅ POST /api/auth/register
Login ✅ POST /api/auth/token
Token Refresh ✅ POST /api/auth/refresh
Password Hashing (Argon2) ✅ Passlib + argon2-cffi
Google OAuth (configuré) ✅ Client ID/Secret dans config

🎯 Challenges & Tracking (Core)

Fonctionnalité Statut Détails
CRUD Challenges ✅ Création, lecture, modification, suppression
Types de périodes ✅ Jour, Semaine, Mois, Année
Unités variées ✅ reps, minutes, pages, km
Jours de repos ✅ Configuration par défi
Fréquence custom ✅ Jours spécifiques de la semaine
Icônes (FontAwesome) ✅ 15+ icônes disponibles
Images d'exercice (GIFs) ✅ 15 exercices animés
Descriptions ✅ Texte descriptif par défi
Réordonnancement (Drag & Drop) ✅ SortableJS
Suivi quotidien ✅ Reps, completed, notes
Statistiques ✅ Reps totales, streak, taux de complétion
Heatmap de consistance ✅ Vue calendrier

📊 Health Dashboard

Fonctionnalité Statut Détails
Métriques quotidiennes ✅ Steps, calories, distance, sleep, HR, SpO2
Widgets Weight & BMI ✅ Jauges semi-circulaires Canvas
Graphiques d'historique ✅ Chart.js (7j, 30j, 365j)
Périodes (day/week/month/year) ✅ Navigation par date
Sessions d'entraînement ✅ Liste + résumé par type
Contexte utilisateur ✅ Mood score, tags, notes

📱 Android Companion App

Fonctionnalité Statut Détails
Lecture Health Connect ✅ Tous les types de données supportés
Sync manuelle ✅ Bouton Sync Now
Auto-sync configurable ✅ 1h, 3h, 6h, 12h, 24h
Authentification JWT ✅ Mêmes credentials que le web
Historique des syncs ✅ Succès/échec, compteurs
Test de connexion serveur ✅ Ping + temps de réponse
Validation schéma données ✅ DataCompatibilityValidator
Indicateur statut serveur ✅ Online/Auth/Timeout/Offline
Configuration serveur ✅ URL + credentials

🔄 Intégrations & Data Pipeline

Fonctionnalité Statut Détails
Health Connect → Raw Storage ✅ 15 tables raw avec déduplication
Raw → Aggregation Service ✅ Agrégation on-demand par jour/semaine/mois
Health Analytics API ✅ /api/analytics/daily, /api/analytics/range
Readiness Score ✅ Score mental + physique avec recommandations
Source filtering ✅ Filtrage par source de données
Zepp Data Import ✅ Script CSV → DB (activité, sommeil, HR, workouts)
Provider abstraction ✅ HealthProviderFactory (extensible)
Sync logs ✅ Traçabilité complète des batchs

🎨 Frontend

Fonctionnalité Statut Détails
Design Mobile-First ✅ Tailwind CSS responsive
Dark Mode ✅ Toggle avec persistance localStorage
Jauges Canvas ✅ Animations semi-circulaires
Graphiques Chart.js ✅ Steps, calories, HR, poids
Drag & Drop ✅ Réordonnancement challenges
Modal détails métriques ✅ Weight/BMI détaillé
Page login ✅ Auth + redirection
Navigation par onglets ✅ Challenges, Health, Settings

🚧 En cours / Planifié

Phase 2 — Améliorations Core (Priorité Haute)

Fonctionnalité Priorité Notes
UX Onboarding 🔴 P0 Wizard de bienvenue, premier challenge, connexion appareil
Tests automatisés 🔴 P0 pytest pour backend, tests API, tests modèles
Validation Pydantic stricte 🔴 P0 Schémas request/response complets
Gestion d'erreurs frontend 🔴 P0 Toasts, retry, messages utilisateur
Cache d'agrégation 🟡 P1 Redis ou cache DB pour les requêtes analytics
CI/CD Pipeline 🟡 P1 GitHub Actions: lint, test, build docker
Seed data / Fixtures 🟡 P1 Données de démo pour nouveaux utilisateurs

Phase 3 — Santé & Analytics (Priorité Haute)

Fonctionnalité Priorité Notes
Corrélations santé/habitudes 🔴 P0 Impact du sommeil/steps sur la complétion des défis
Dashboard unifié 🔴 P0 Challenges + Santé sur une seule vue
Rapports hebdomadaires 🟡 P1 Email ou résumé in-app
Export données 🟡 P1 CSV/JSON de toutes les métriques
Objectifs de santé 🟡 P1 Cibles steps, sommeil, calories
Alertes / Notifications 🟢 P2 Web push ou email pour streaks, objectifs
ML Scoring avancé 🟢 P2 Prédictions de readiness, recommandations personnalisées

Phase 4 — Social & Gamification

Fonctionnalité Priorité Notes
Badges & Achievements 🟡 P1 Badges par streak, total reps, milestones
Niveaux / XP 🟢 P2 Système de progression
Classements 🟢 P2 Leaderboards entre amis
Partage social 🟢 P2 Partage de réussites
Défis de groupe 🔵 P3 Défis multi-utilisateurs

Phase 5 — Mobile & Plateforme

Fonctionnalité Priorité Notes
Google Play Store 🟡 P1 Publication companion app
iOS Companion (Swift/KMP) 🔵 P3 Application iOS native ou KMP
PWA 🟡 P1 Service worker, notifications push, offline
Multi-langue (i18n) 🟢 P2 Support FR/EN minimum
Admin panel 🔵 P3 Gestion utilisateurs, monitoring

Phase 6 — Infrastructure

Fonctionnalité Priorité Notes
Health endpoint monitoring 🟡 P1 Prometheus + Grafana
DB Connection pooling 🟡 P1 Optimisation PostgreSQL
CDN pour assets statiques 🟢 P2 GIFs, CSS, JS
Kubernetes Helm chart 🔵 P3 Déploiement scalable
Multi-tenant 🔵 P3 Isolation par organisation

📐 Architecture Actuelle

┌─────────────────────────────────────────────────────────┐
│                     FRONTEND (SPA)                       │
│  Vanilla JS + Tailwind CSS + Chart.js + SortableJS      │
│  Canvas Gauges • Dark Mode • Mobile-First               │
└─────────────────┬───────────────────────────────────────┘
                  │ REST API (JWT)
┌─────────────────▼───────────────────────────────────────┐
│                   BACKEND (FastAPI)                      │
│                                                          │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│  │ Auth     │ │Challenges│ │ Health   │ │ Analytics  │ │
│  │ /api/auth│ │/api/chal-│ │ /api/    │ │ /api/      │ │
│  │          │ │ lenges   │ │ health*  │ │ analytics  │ │
│  └──────────┘ └──────────┘ └──────────┘ └────────────┘ │
│  ┌──────────────────────────────────────────────────────┐│
│  │              Health Connect API                       ││
│  │  /api/health-connect/sync • /sync-raw • Raw Storage  ││
│  └──────────────────────────────────────────────────────┘│
│  ┌──────────────────────────────────────────────────────┐│
│  │              Service Layer                            ││
│  │  AuthService • AggregationService • HealthProvider   ││
│  └──────────────────────────────────────────────────────┘│
└─────────────────┬───────────────────────────────────────┘
                  │ SQLAlchemy ORM
┌─────────────────▼───────────────────────────────────────┐
│              DATABASE (PostgreSQL / SQLite)              │
│                                                          │
│  6 Core Tables  │  3 HC Aggregated  │  15 HC Raw Tables │
│  users          │  sync_logs        │  hc_raw_steps     │
│  challenges     │  daily_metrics    │  hc_raw_heart_*   │
│  tracking       │  exercise_sessions│  hc_raw_sleep_*   │
│  daily_health_* │                   │  hc_raw_spo2...   │
│  daily_context  │                   │  (15 total)       │
│  workout_sess.  │                   │                   │
└─────────────────┬───────────────────────────────────────┘
                  │
┌─────────────────▼───────────────────────────────────────┐
│              ANDROID COMPANION APP                       │
│  Health Connect API → Raw Records → POST /sync-raw      │
│  Kotlin • Retrofit • Jetpack • Health Connect SDK       │
│  Auto-sync • Sync History • Connection Test             │
└─────────────────────────────────────────────────────────┘

🧩 API Endpoints

Méthode Endpoint Description
POST /api/auth/register Créer un compte
POST /api/auth/token Login (JWT)
POST /api/auth/refresh Rafraîchir le token
GET /api/auth/me Profil utilisateur
GET /api/challenges Liste des défis
POST /api/challenges Créer un défi
PUT /api/challenges/{id} Modifier un défi
DELETE /api/challenges/{id} Supprimer un défi
PUT /api/challenges/reorder Réordonner
POST /api/tracking Logger une répétition
GET /api/tracking/{challenge_id} Historique tracking
GET /api/health Health check
GET /api/health/stats Stats de santé (période)
GET /api/health/workouts Liste workouts
GET /api/health/workouts/summary Résumé workouts
POST /api/health-connect/sync Sync Health Connect (legacy)
POST /api/health-connect/sync-raw Sync données brutes
GET /api/health-connect/sync/status Statut sync
GET /api/analytics/daily Analytics quotidien
GET /api/analytics/range Analytics plage de dates
POST /api/analytics/context Mise à jour contexte (mood)
GET /api/analytics/sources Sources de données disponibles
GET /api/static/images Liste images disponibles

🔑 Choix Techniques

Domaine Choix Raison
Backend FastAPI Performance async, Swagger auto, validation Pydantic
ORM SQLAlchemy 2.0 Maturité, flexibilité SQLite/PostgreSQL
Auth JWT + Argon2 Stateless, sécurisé, standard OAuth2
Frontend Vanilla JS + Tailwind Zéro build step, rapide, Tailwind CDN
Charts Chart.js Léger, bonne API, canvas performant
Mobile Kotlin natif Accès direct Health Connect SDK Android
DB PostgreSQL (prod) / SQLite (dev) Flexibilité selon environnement
Infra Docker Compose Simple, reproductible, 3 profils
LFS Git LFS GIFs lourds sans gonfler le repo

📈 Métriques du Projet

Métrique Valeur
Tables DB 25
Endpoints API 22+
Migrations Alembic 9
Modèles Python 25+
Schémas Pydantic 10+
Services 5 (auth, challenge, health, aggregation, provider)
Fichiers Android (Kotlin) 17
Tests 0 ❌ (priorité P0)
Linting ruff (configuré)