# MetaBloom MetaBloom est un compagnon métabolique mobile-first, francophone et non culpabilisant pour les personnes concernées par le surpoids, le prédiabète ou le diabète de type 2. Une seule base Expo cible iOS, Android et le Web. > **Statut : produit en développement, usage éducatif et bien-être uniquement.** MetaBloom ne diagnostique pas, n’interprète pas une mesure, ne calcule pas de dose et ne modifie jamais un traitement. En cas d’urgence, contactez les services d’urgence. ## Fonctionnalités disponibles - onboarding avec objectif, parcours et consentement informatif ; - parcours Prévention, Perte de poids, Diabète type 2 et GLP-1 ; - dashboard quotidien responsive avec données réellement dynamiques ; - journal enrichi : poids, glycémie facultative, eau, pas, sommeil, repas et humeur ; - validation des valeurs et gestion mg/dL/mmol/L ; - graphiques et moyennes calculés sur les sept derniers jours ; - coaching comportemental et micro-leçons sans recommandations thérapeutiques ; - **Peg**, coach IA conversationnel relié au backend et compatible Ollama/OpenAI ; - préférences, rappels préparés, export CSV et effacement local ; - persistance hors ligne via AsyncStorage ; - backend FastAPI/PostgreSQL auto-hébergeable avec JWT, consentement, CRUD, export et suppression de compte ; - préparation UI pour scan de repas, Apple Santé et Health Connect. ## Captures Les captures mobiles sont disponibles dans [`screenshots/`](./screenshots/). ## Stack | Couche | Technologie | |---|---| | Application | Expo SDK 57, React Native 0.86, React 19, TypeScript | | Design system | Icônes vectorielles Lucide, composants accessibles, zones tactiles 44 px minimum | | Stockage local | AsyncStorage | | API | FastAPI, SQLAlchemy, Pydantic | | Données serveur | PostgreSQL en production, SQLite en développement | | Sécurité API | JWT expirant, Argon2, isolation par utilisateur | ## Démarrer l’application Prérequis : Node.js 20+ et npm. ```bash npm install npm run web ``` ```bash npm run android npm run ios npm run typecheck npm run build:web ``` Les cibles Android/iOS fonctionnent avec Expo Go pour ce prototype. HealthKit/Health Connect nécessiteront un development build natif et des comptes développeur Apple/Google. ## Démarrer l’API ```bash cd server python -m venv .venv . .venv/bin/activate pip install -r requirements-dev.txt uvicorn app.main:app --reload ``` Documentation OpenAPI : `http://localhost:8000/docs`. Voir [`server/README.md`](./server/README.md) pour PostgreSQL, Docker et les règles de sécurité. Pour connecter l’application à l’API : ```bash EXPO_PUBLIC_API_URL=http://localhost:8000 npm run web ``` Au premier message, l’application crée une session invitée pseudonyme et conserve son jeton sous `metabloom-auth-token`. Le moteur, le modèle et l’URL IA sont configurés uniquement côté serveur. Aucun secret ne doit être placé dans l’application. ## Architecture ```text App.tsx Expérience Expo multiplateforme assets/ Icônes et splash screen server/app/ API, modèles, validation et sécurité server/tests/ Tests d’intégration API server/docker-compose... PostgreSQL + API auto-hébergeables screenshots/ Captures produit .gitea/workflows/ Contrôles CI ``` L’application fonctionne actuellement en mode local-first. L’API est prête séparément ; la prochaine étape d’intégration est une file de synchronisation idempotente avec gestion explicite des conflits. ## Sécurité et réglementation - aucune donnée n’est envoyée par l’application tant que l’API n’est pas configurée ; - les conversations Peg ne sont pas persistées par le backend et l’historique transmis est limité ; - Peg filtre les urgences, diagnostics, dosages et modifications de traitement avant et après le modèle ; - l’API impose un consentement avant l’enregistrement de données de santé ; - les mots de passe sont hachés avec Argon2 et les données isolées par utilisateur ; - les secrets d’exemple ne doivent jamais être utilisés en production ; - AsyncStorage n’est pas chiffré : il doit être remplacé par SQLite + SecureStore avant production ; - une AIPD/RGPD, une analyse HDS, un audit OWASP et une qualification MDR sont obligatoires avant usage réel ; - aucun conseil GLP-1, seuil glycémique ou traitement n’est produit par l’application. ## État des fonctionnalités avancées - **Backend/auth/export/suppression :** implémentés et isolés dans `server/`. - **Synchronisation multi-appareil :** architecture définie, connexion client/API restante. - **Notifications :** préférences fonctionnelles ; branchement natif restant. - **Scan alimentaire :** expérience préparée ; source nutritionnelle et confirmation utilisateur restantes. - **HealthKit/Health Connect :** préparation produit ; dépendances natives et autorisations stores restantes. - **IA :** volontairement non branchée avant gouvernance clinique et corpus validé. ## Tests ```bash npm run typecheck npm run build:web cd server && pytest -q ``` ## Licence MIT — voir [`LICENSE`](./LICENSE).