MKO — Portfolio
Mohamed Karim OuertataniIngénieur Full-StackFull-Stack Engineer
IoTIAMobileWeb

DiabCare

Gestion du diabète

Janvier 2026 – Mai 2026 · Académique · ESPRIT

0vue
DiabCare — 1
DiabCare — 3
DiabCare — 2

Plateforme e-santé qui réunit patients diabétiques, médecins et pharmaciens : application Flutter (Android et iOS), API NestJS et back-office React, avec un glucomètre Bluetooth et cinq services d'IA générative (Gemini et Ollama).

En chiffres

0

routes REST documentées (environ)

0

modules NestJS

0

services d'IA

0

lignes de code (environ)

Dart 53 000TypeScript 21 700

Étude de cas

Le défi

Gérer un diabète, c'est mesurer sa glycémie plusieurs fois par jour, compter ses glucides, voir son médecin tous les trois mois et appeler plusieurs pharmacies pour trouver son insuline. Il fallait réunir patients, médecins et pharmaciens dans un seul outil, avec une IA utile même quand un fournisseur est indisponible.

Architecture

Clients

  • App Flutter Android / iOS (MVVM, Provider)
  • Back-office React 19 + Vite
  • Glucomètre Bluetooth LE

API NestJS 11

  • 31 modules, ~175 routes Swagger
  • JWT + sessions multi-appareils
  • Guards par rôle et Premium
  • 3 tâches planifiées (cron)

Données

  • MongoDB Atlas (29 schémas)
  • Discriminators par rôle
  • Index géospatiaux 2dsphere

Services externes

  • Gemini + Ollama
  • Firebase Cloud Messaging
  • RevenueCat
  • Google Maps & Sign-In
  • Cloudinary

Choix techniques

01

Une IA qui ne tombe jamais

Chaque requête passe par Gemini, puis Ollama en repli, puis un calcul local marqué « faible confiance ». Les réponses JSON sont réparées, validées champ par champ, et les réponses qui recopient le modèle de prompt sont rejetées.

02

Trouver un médicament en urgence

Une demande part vers toutes les pharmacies dans un rayon choisi grâce à une requête $nearSphere sur un index 2dsphere. Elle expire après 2 heures, et un cron la clôture automatiquement.

03

Un seul modèle d'utilisateur

Patients, médecins et pharmaciens partagent la collection users grâce aux discriminators Mongoose : chaque rôle ajoute ses propres champs sans dupliquer l'authentification.

04

Sécurité et consentement

Mots de passe bcrypt, JWT vérifié contre une session active (déconnexion à distance), guards par rôle et par abonnement, et accès du médecin au dossier soumis à l'accord du patient.

Fonctionnalités

  • Carnet glycémique : saisie manuelle ou lecture d'un glucomètre Bluetooth Low Energy, moyenne, temps dans la cible et HbA1c estimée
  • Alertes selon des seuils médicaux (hypo < 70, critique < 54, hyper > 180, critique > 250 mg/dL), envoyées au patient et à son médecin
  • 5 services d'IA : chatbot MediBot nourri des données du patient, analyse de repas par photo, prédiction de la glycémie à 2 h et 4 h, détection de patterns, assistant clinique MediAssist pour le médecin
  • Demandes de médicaments géolocalisées envoyées à plusieurs pharmacies proches, qui répondent avec prix et délai de préparation
  • Marketplace et commandes en click & collect, avec suivi du statut jusqu'au retrait
  • Espace médecin : patientèle, alertes critiques, dossier médical avec rapport généré par IA, agenda de rendez-vous et messagerie
  • Gamification des pharmacies (points, badges de Bronze à Diamond, classement), abonnement Premium et boosts de visibilité via RevenueCat
  • Back-office React : indicateurs clés, modération des comptes et des produits, commandes et réclamations

Captures d'écran (20)

DiabCare — Gestion du diabète — Captures d'écran 1
DiabCare — Gestion du diabète — Captures d'écran 2
DiabCare — Gestion du diabète — Captures d'écran 3
DiabCare — Gestion du diabète — Captures d'écran 4

Un mot sur ce projet

Une question, un avis, une idée ?

Écrivez-moi directement d'ici. Votre message n'est pas publié : je suis le seul à le lire.

Privé : jamais affiché sur le site