# đŸ‹ïž HabitForge > Plateforme auto-hĂ©bergĂ©e de suivi d'habitudes, de santĂ© et de fitness avec companion app Android ![License](https://img.shields.io/badge/license-MIT-blue.svg) ![Python](https://img.shields.io/badge/python-3.10+-blue.svg) ![FastAPI](https://img.shields.io/badge/FastAPI-0.141-009688.svg) ![Kotlin](https://img.shields.io/badge/Kotlin-Android-purple.svg) ![Docker](https://img.shields.io/badge/Docker-Ready-2496ED.svg) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15-336791.svg) --- ## 📖 Vue d'Ensemble HabitForge est bien plus qu'un simple tracker d'habitudes. C'est une plateforme complĂšte qui combine : - 🎯 **Suivi d'habitudes** avec dĂ©fis personnalisables (reps, minutes, km, pages...) - 📊 **Dashboard santĂ©** connectĂ© Ă  Health Connect (Android) et Zepp/Amazfit - đŸ“± **Companion app Android** pour synchronisation automatique des donnĂ©es de santĂ© - 🧠 **Analytics avancĂ©s** : readiness score, corrĂ©lations, tendances - đŸ—ïž **Architecture scalable** : SQLite pour le dev, PostgreSQL pour la prod --- ## ✹ FonctionnalitĂ©s ### 🎯 Challenges & Habitudes - **DĂ©fis flexibles** : quotidien, hebdomadaire (jours spĂ©cifiques), mensuel, annuel - **Multi-unitĂ©s** : reps, minutes, pages, kilomĂštres - **Jours de repos** configurables - **15 exercices animĂ©s** (GIFs) comme rĂ©fĂ©rences visuelles - **IcĂŽnes FontAwesome** personnalisables - **Drag & drop** pour rĂ©organiser les prioritĂ©s - **Statistiques** : streak, taux de complĂ©tion, reps totales - **Heatmap de consistance** (vue calendrier) ### 📊 Dashboard SantĂ© - **Widgets interactifs** avec jauges semi-circulaires (Canvas API) - Steps quotidiens - Calories brĂ»lĂ©es - FrĂ©quence cardiaque (min/max/repos) - SpO2 - Poids (lbs/kg) & BMI avec tendances - **DĂ©composition du sommeil** : profond, lĂ©ger, REM, Ă©veillĂ© - **Graphiques d'historique** (Chart.js) : 7j, 30j, 365j - **Readiness Score** quotidien basĂ© sur HRV, RHR et sommeil - **Contexte subjectif** : humeur, tags, notes ### đŸ“± Android Companion App - **Lecture native Health Connect** (tous les types de donnĂ©es) - **Sync automatique** configurable (1h, 3h, 6h, 12h, 24h) - **15 types de donnĂ©es brutes** synchronisĂ©es (steps, HR, sleep stages, SpO2, poids, nutrition...) - **Historique des synchronisations** avec stats dĂ©taillĂ©es - **Test de connexion** serveur avec temps de rĂ©ponse - **Validation de schĂ©ma** des donnĂ©es avant sync - **Indicateur de statut** serveur en temps rĂ©el ### 🔄 IntĂ©grations - **Health Connect** (Android) — sync native via companion app - **Zepp/Amazfit** — import CSV des donnĂ©es exportĂ©es - **Architecture Provider** — extensible pour futures sources (Google Fit, Apple Health, Garmin...) - **AgrĂ©gation on-demand** — calcul des mĂ©triques Ă  partir des donnĂ©es brutes ### 🎹 UX/UI - **Mobile-First** design (Tailwind CSS) - **Dark Mode** avec persistance - **Jauges animĂ©es** Canvas pour poids et BMI - **Modales** pour dĂ©tails des mĂ©triques - **Navigation par onglets** fluide --- ## 🛠 Stack Technique ### Backend | Composant | Technologie | |:---|:---| | Framework | FastAPI 0.141 | | ORM | SQLAlchemy 2.0 | | Auth | JWT (OAuth2 Password Flow) + Argon2 | | Validation | Pydantic 2.0 | | Rate Limiting | SlowAPI | | Migrations | Alembic | | Server | Uvicorn (dev) / Gunicorn + Uvicorn Workers (prod) | ### Frontend | Composant | Technologie | |:---|:---| | Core | Vanilla JavaScript (ES6+) | | CSS | Tailwind CSS (CDN) | | Charts | Chart.js | | Icons | FontAwesome 6 | | Animations | Anime.js + Canvas API | | Drag & Drop | SortableJS | ### Android | Composant | Technologie | |:---|:---| | Langage | Kotlin | | HTTP Client | Retrofit | | Health SDK | Android Health Connect API | | UI | Jetpack + Material Design | | Auth | JWT token management | ### Infrastructure | Environnement | Configuration | |:---|:---| | Dev simple | `docker-compose.yml` — SQLite | | Dev complet | `docker-compose.dev.yml` — PostgreSQL + CloudBeaver | | Production | `docker-compose.prod.yml` — Nginx + Gunicorn + Backup auto | --- ## 🚀 DĂ©marrage Rapide ### PrĂ©requis - Docker & Docker Compose - Git LFS (pour les GIFs) ### Dev complet (PostgreSQL + interface DB) ```bash git clone https://git.dracodev.net/Projets/HabitForge.git cd HabitForge docker compose -f docker-compose.dev.yml up -d --build ``` **AccĂšs :** - 🌐 App : http://localhost:8000 - đŸ—„ïž CloudBeaver (DB GUI) : http://localhost:8978 (admin/admin) - 📖 API Docs : http://localhost:8000/docs ### Mode simple (SQLite) ```bash docker compose up -d --build ``` ### Production (Nginx + backup auto) ```bash # Configurer .env.production d'abord docker compose -f docker-compose.prod.yml up -d --build ``` --- ## 📂 Structure du Projet ``` HabitForge/ ├── backend/ # API FastAPI │ ├── api/v1/ # Routes REST │ │ ├── auth.py # Authentification JWT │ │ ├── challenges.py # CRUD Challenges + Tracking │ │ ├── health.py # Stats santĂ© + Workouts │ │ ├── health_connect.py # Sync Health Connect (legacy) │ │ ├── health_connect_raw.py# Sync donnĂ©es brutes (15 types) │ │ └── health_analytics.py # Analytics + Readiness Score │ ├── core/config.py # Configuration (pydantic-settings) │ ├── models/ # 25 modĂšles SQLAlchemy │ │ ├── user.py # Comptes utilisateurs │ │ ├── challenge.py # DĂ©fis │ │ ├── tracking.py # Suivi quotidien │ │ ├── daily_health_metrics.py # MĂ©triques agrĂ©gĂ©es legacy │ │ ├── daily_context.py # Contexte subjectif (mood) │ │ ├── workout_session.py # Sessions manuelles │ │ ├── health_connect.py # Sync logs + mĂ©triques HC │ │ └── health_connect_raw.py# 15 tables raw HC │ ├── services/ # Couche mĂ©tier │ │ ├── auth_service.py │ │ ├── challenge_service.py │ │ ├── health_service.py │ │ └── aggregation_service.py # AgrĂ©gation on-demand │ ├── integrations/ # Providers donnĂ©es santĂ© │ │ ├── health_provider.py # Interface abstraite │ │ ├── health_connect_provider.py │ │ └── import_zepp.py # Import CSV Zepp │ ├── schemas/ # Validation Pydantic │ ├── repositories/ # Data access layer │ └── database.py # Engine + Session ├── frontend/ # SPA vanilla JS │ ├── index.html # Dashboard principal │ ├── login.html # Page login │ ├── app.js # Logique applicative (4300+ lignes) │ └── static/ # 15 GIFs d'exercices (LFS) ├── android-companion/ # App Android Kotlin │ └── app/src/main/java/com/habitforge/companion/ │ ├── MainActivity.kt # UI principale │ ├── HealthConnectManager.kt # Lecture Health Connect │ ├── SyncService.kt # Service background │ ├── RawDataSyncService.kt# Sync donnĂ©es brutes │ ├── HabitForgeApi.kt # Client Retrofit │ └── ... # 17 fichiers Kotlin au total ├── alembic/ # Migrations DB (9 versions) ├── nginx/ # Config Nginx + SSL ├── scripts/ # Utilitaires │ ├── import_zepp_data.py # Import donnĂ©es Zepp │ ├── migrate_to_postgres.py # Migration SQLite → PostgreSQL │ └── backup_db.sh # Backup automatique PostgreSQL ├── docker-compose.yml # Dev simple (SQLite) ├── docker-compose.dev.yml # Dev complet (PostgreSQL + CloudBeaver) ├── docker-compose.prod.yml # Production (Nginx + Gunicorn + Backup) ├── Dockerfile # Image Python 3.10-slim ├── requirements.txt # DĂ©pendances Python ├── DATABASE_SCHEMA.md # SchĂ©mas Mermaid └── ROADMAP.md # Roadmap & Ă©tat du projet ``` --- ## 🔌 API — Principaux Endpoints | MĂ©thode | Endpoint | Description | |:---|:---|:---| | `POST` | `/api/auth/register` | CrĂ©er un compte | | `POST` | `/api/auth/token` | Obtenir un JWT | | `POST` | `/api/auth/refresh` | RafraĂźchir le JWT | | `GET` | `/api/auth/me` | Profil utilisateur | | `GET/POST/PUT/DELETE` | `/api/challenges[/{id}]` | CRUD Challenges | | `POST` | `/api/tracking` | Logger une rĂ©pĂ©tition | | `GET` | `/api/health` | Health check DB | | `GET` | `/api/health/stats` | Statistiques santĂ© (pĂ©riode) | | `GET` | `/api/health/workouts` | Sessions d'entraĂźnement | | `POST` | `/api/health-connect/sync-raw` | Sync donnĂ©es brutes (15 types) | | `GET` | `/api/analytics/daily` | Analytics quotidien (avec readiness) | | `GET` | `/api/analytics/range` | Analytics plage de dates | | `POST` | `/api/analytics/context` | Mise Ă  jour mood/tags | 📖 **Documentation interactive** : http://localhost:8000/docs (Swagger) | http://localhost:8000/redoc --- ## 📊 SchĂ©ma de Base de DonnĂ©es Le projet contient **25 tables** organisĂ©es en 3 couches : | Couche | Tables | Description | |:---|:---:|:---| | **Core** | 6 | users, challenges, tracking, daily_health_metrics, daily_context, workout_sessions | | **Health Connect Aggregated** | 3 | sync_logs, daily_metrics, exercise_sessions | | **Health Connect Raw** | 15 | steps, heart_rate + samples, resting_hr, sleep_sessions + stages, distance, calories, spo2, weight, height, body_fat, exercise_sessions, nutrition, hydration, hrv_rmssd | âžĄïž Voir [`DATABASE_SCHEMA.md`](./DATABASE_SCHEMA.md) pour les diagrammes Mermaid complets. --- ## đŸ—ș Roadmap âžĄïž Voir [`ROADMAP.md`](./ROADMAP.md) pour l'Ă©tat dĂ©taillĂ© des fonctionnalitĂ©s et la vision future. ### PrioritĂ©s actuelles - 🔮 Tests automatisĂ©s (pytest) - 🔮 Cache d'agrĂ©gation (performances) - 🟡 Badges & Achievements - 🟡 Export de donnĂ©es --- ## 🔧 Configuration Copier le fichier d'exemple et adapter : ```bash cp .env.example .env.development ``` ### Variables principales | Variable | Description | DĂ©faut | |:---|:---|:---| | `SECRET_KEY` | ClĂ© de chiffrement JWT | *À dĂ©finir* | | `DATABASE_URL` | ChaĂźne de connexion DB | `sqlite:///./data/habitforge.db` | | `CORS_ORIGINS` | Origines autorisĂ©es | `http://localhost:8000` | | `GOOGLE_CLIENT_ID` | OAuth Google | `""` | | `HEALTH_PROVIDER` | Provider santĂ© | `"health_connect"` | | `RATE_LIMIT_ENABLED` | Rate limiting | `true` | | `DEBUG` | Mode debug | `true` | --- ## đŸ“± Companion App Android L'application Android se synchronise avec votre instance HabitForge pour importer automatiquement vos donnĂ©es Health Connect. ### Build ```bash cd android-companion ./gradlew assembleDebug # APK dans app/build/outputs/apk/debug/ ``` ### DonnĂ©es synchronisĂ©es Steps ‱ Distance ‱ Calories ‱ FrĂ©quence cardiaque ‱ FC repos ‱ Sommeil (phases) ‱ SpO2 ‱ Poids ‱ Taille ‱ Masse grasse ‱ Sessions d'exercice ‱ Nutrition ‱ Hydratation ‱ HRV âžĄïž Voir [`android-companion/README.md`](./android-companion/README.md) pour la documentation complĂšte. --- ## đŸ“„ Import Zepp/Amazfit Si vous utilisez une montre Zepp/Amazfit, vous pouvez importer vos donnĂ©es : ```bash # Placer l'export dans export-zepp/ docker compose -f docker-compose.dev.yml exec web python scripts/import_zepp_data.py ``` âžĄïž Voir [`ZEPP_IMPORT.md`](./ZEPP_IMPORT.md) pour les dĂ©tails. --- ## đŸ€ Contribuer 1. Fork le projet 2. Branche feature : `git checkout -b feature/AmazingFeature` 3. Commit : `git commit -m 'Add AmazingFeature'` 4. Push : `git push origin feature/AmazingFeature` 5. Pull Request Le projet utilise **ruff** pour le linting Python et **pre-commit** pour les hooks. --- ## 📄 Licence MIT License — voir le fichier `LICENSE`.