Plateforme complete d'assistance dermatologique avec:
- un backend FastAPI
- un tableau de bord web medecin (React + Vite)
- une application mobile patient (React Native + Expo)
Le projet couvre le parcours principal: comptes doctor/patient, consultations, resultats AI, suivi photo, conseils, check-ins et ecrans mobiles de comparaison.
| Couche | Technologie |
|---|---|
| Backend API | FastAPI, SQLAlchemy, Pydantic |
| Web medecin | React 18, Vite, Tailwind, Zustand |
| Mobile patient | Expo 49, React Native 0.72, React Navigation |
| Auth | JWT access + refresh tokens |
| Donnees | PostgreSQL (prod) ou SQLite (dev) |
| AI et enrichissement | pipeline AI, OpenWeather/OpenUV/OpenAQ, services LLM |
DermaAssist-AI/
├── backend/
│ ├── app/
│ │ ├── api/ # Routers FastAPI (auth, mobile, consultations, AI, chat...)
│ │ ├── services/ # Logique metier
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── db/ # Session SQLAlchemy
│ │ └── core/ # Config et securite
│ ├── main.py # Entree du serveur
│ └── requirements.txt
├── doctor-web/
│ ├── src/
│ │ ├── pages/
│ │ ├── components/
│ │ └── services/
│ ├── public/logo/ # Logos web (ex: white_logoSkin.png)
│ └── package.json
├── patient-mobile/
│ ├── src/
│ │ ├── screens/
│ │ ├── services/
│ │ └── constants/
│ ├── assets/logo/ # Logos mobile (ex: green_logoSkin.png)
│ ├── App.js
│ └── package.json
├── docs/
├── setup.bat
├── setup.sh
└── TROUBLESHOOTING.md
- Authentification complete: register, login (email ou username), refresh token
- Gestion patient/consultation
- Upload d'images de consultation et suivi patient
- Comparaison d'images cutanees patient
- Endpoints mobiles dedies (/mobile/patient/*)
- Resultats AI, historique AI, chat medecin
- Endpoints health/docs
- Dashboard, patients, profil patient, consultation, comparaison photo
- Generation/telechargement/impression de rapport consultation
- Correctif nom complet patient dans le rapport
- Notification page, contact/settings/profile pages
- Branding logo web via public/logo/white_logoSkin.png
- Auth, accueil, traitement, consultations, details
- Upload photo + ecran comparaison avec selection de 2 images
- Profil + aide/assistance + notifications
- Splash startup avec logo local (assets/logo/green_logoSkin.png)
- Node.js 18+
- Python 3.10+
- npm
Services optionnels pour un mode complet:
- PostgreSQL
- MinIO (ou S3 compatible)
Windows:
setup.batLinux/macOS:
bash setup.shcd backend
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
pip install -r requirements.txtCreer backend/.env (exemple minimal dev):
SECRET_KEY=change-this-secret
DEBUG=True
ENVIRONMENT=development
# Option simple dev (sans Postgres):
DATABASE_URL=sqlite:///./dermassist.db
# Option complete:
# DATABASE_URL=postgresql://user:password@localhost:5432/dermassist_db
REDIS_URL=redis://localhost:6379/0
MINIO_URL=localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET_IMAGES=dermassist-images
MINIO_SECURE=False
OPENWEATHERMAP_API_KEY=
OPENUV_API_KEY=
MISTRAL_API_KEY=
CLAUDE_API_KEY=Lancer le backend:
python main.pyBackend disponible sur:
cd doctor-web
npm install
npm install chart.js react-chartjs-2Optionnel: creer doctor-web/.env.local
VITE_API_URL=http://localhost:8000Lancer:
npm run devWeb dispo sur http://localhost:5173
cd patient-mobile
npm installOptionnel: creer patient-mobile/.env
EXPO_PUBLIC_API_URL=http://localhost:8000Pour emulateur Android, la valeur par defaut est deja 10.0.2.2:8000. Pour un telephone physique, utiliser l'IP LAN de votre machine.
Lancer:
npm startAutres commandes utiles:
npm run web
npm run android
npm run ios- setup.bat: bootstrap Windows
- setup.sh: bootstrap Linux/macOS
- npm run dev: uvicorn reload
- npm run start: uvicorn production-like
- npm run dev
- npm run build
- npm run preview
- npm run lint
- npm run format
- npm start
- npm run web
- npm run android
- npm run ios
- npm run build
- POST /auth/register
- POST /auth/login
- POST /auth/refresh
- GET /patients
- POST /patients
- GET /patients/{patient_id}
- PATCH /patients/{patient_id}
- DELETE /patients/{patient_id}
- POST /consultations
- GET /consultations/{consultation_id}
- GET /consultations/by-patient/{patient_id}
- PATCH /consultations/{consultation_id}/notes
- POST /consultations/{consultation_id}/images
- GET /consultations/{consultation_id}/images
- POST /patients/{patient_id}/skin-images
- GET /patients/{patient_id}/skin-images
- GET /patients/{patient_id}/skin-images/progression
- POST /patients/{patient_id}/skin-images/compare
- GET /mobile/patient/profile
- GET /mobile/patient/consultations
- GET /mobile/patient/advice
- GET /mobile/patient/ai-results-history
- GET /mobile/patient/ai-results/{ai_result_id}
- GET /mobile/patient/ai-medications
- GET /mobile/patient/checkins
- POST /ai/analyze
- GET /ai/result/{consultation_id}
- GET /ai/env-snapshot
- POST /chat/send-message
- GET /chat/history
- DELETE /chat/history
- Logo web: doctor-web/public/logo/white_logoSkin.png
- Logo mobile startup: patient-mobile/assets/logo/green_logoSkin.png
- backend/README.md
- doctor-web/README.md
- patient-mobile/README.md
- docs/ARCHITECTURE.md
- docs/AI_IMPLEMENTATION_GUIDE.md
- docs/MINIO_IMPLEMENTATION_GUIDE.md
- TROUBLESHOOTING.md
Le projet est activement en evolution avec des ameliorations recentes sur:
- le flux comparaison mobile
- les pages aide/notifications
- l'integration branding logo web/mobile
- la fiabilite du rapport consultation (nom complet patient)
Contributions bienvenue. Ouvrez une issue ou une PR avec contexte, reproduction et proposition claire.