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/.
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.
npm install
npm run web
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
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 pour PostgreSQL, Docker et les règles de sécurité.
Pour connecter l’application à l’API :
EXPO_PUBLIC_API_URL=http://localhost:8000 npm run web
Les builds distribués utilisent https://api.metabloom.vicode.agency par défaut. Cette URL doit pointer vers le proxy HTTPS public, lui-même relié au conteneur FastAPI permanent. Le Compose d'exemple active restart: unless-stopped; un exemple de virtual host OpenResty est fourni dans server/openresty.metabloom.conf.example.
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
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
npm run typecheck
npm run build:web
cd server && pytest -q
Licence
MIT — voir LICENSE.