Tsabo est une plateforme de santé numérique destinée à faciliter l'accès aux soins à Madagascar. ## Vision : Connecter les patients et les professionnels de santé grâce à une plateforme numérique simple, accessible et sécurisée.
## Cloner
```powershell
git clone
github.com
```
## Démarrage Back
```powershell
cd api
npm install
npm run start:dev
```
## Démarrage Front
```powershell
cd frontend-tsabo
Copy-Item .env.example .env.local
npm install
npm run dev
```
API : `
localhost`.
Frontend : `
localhost`
## Architecture frontend
```text
src/
├── app/
│ ├── login, register
│ ├── patient/
│ │ ├── doctors/[id] recherche, profil, créneaux, réservation
│ │ ├── appointments/[id] liste, détail, annulation
│ │ └── profile profil + photo
│ ├── doctor/
│ │ ├── availabilities CRUD + activation + couleurs
│ │ ├── appointments/[id] confirmation, refus, fin, annulation
│ │ └── profile profil pro + spécialités + photo
│ └── admin/
│ ├── users comptes
│ ├── doctors vérification
│ ├── appointments/[id] supervision
│ └── specialties catalogue
├── components/ shell, protections de rôles, UI
├── contexts/AuthContext.tsx JWT et session
├── lib/api/ client et fonctions de tous les endpoints
├── lib/time.ts affichage zoné Madagascar
└── types/ contrats TypeScript
```
## Règle horaire obligatoire
1. `DoctorAvailability.startTime/endTime` représentent une heure murale `HH:mm` à Madagascar.
2. Le backend transforme `YYYY-MM-DD + HH:mm + Indian/Antananarivo` en véritable instant UTC avec `fromZonedTime`.
3. `Appointment.startAt/endAt` sont enregistrés en UTC par PostgreSQL/Prisma.
4. L’API renvoie des ISO avec `Z` ; le frontend envoie directement `selectedSlot.startAt`, sans enlever `Z`, sans ajouter trois heures et sans reconstruire la date.
5. L’affichage utilise `NEXT_PUBLIC_CLINIC_TIMEZONE=Indian/Antananarivo`. Un utilisateur en Guyane et un utilisateur à Madagascar voient donc l’heure du cabinet identique.
6. `new Date()` rep …