Étude de cas 02 / 03 · Santé / Application web géolocalisée
PharMap
Une application qui aide les gens au Cameroun à trouver un médicament : quelles pharmacies proches l'ont en stock, à quel prix, et à quel point l'information est récente. Les pharmacies gèrent leurs propres fiches, et un administrateur les vérifie.
- Rôle
- Seul · frontend + backend
- Statut
- MVP en ligne · code privé
- Technologies
- React · NestJS · PostgreSQL
- Mis à jour
- sept. 2026

01
Ce qu'il fallait, et ce que j'ai construit
Quand quelqu'un au Cameroun a besoin d'un médicament, il va souvent de pharmacie en pharmacie ou appelle partout. L'information sur les stocks, quand elle existe, est souvent dépassée, et il n'y a pas de moyen simple de savoir à quelle pharmacie se fier.
01 · Trouver
ProblèmePour trouver un médicament, on va de pharmacie en pharmacie ou on appelle partout.
ConstruitRecherche par nom générique ou par marque locale (Doliprane, Panadol), et on voit quelles pharmacies l'ont.
Recherche en PostgreSQL simple : chaque mot comparé au nom, au générique et aux marques, sans tenir compte des accents, classé par correspondances

02 · Confiance
ProblèmeLes infos de stock sont souvent périmées, et rien n'indique à quelle pharmacie se fier.
ConstruitChaque pharmacie affiche le prix, l'état du stock et la date de mise à jour. Seules celles vérifiées par un administrateur portent le badge « vérifiée ».
La vérification suit une machine à états, et chaque changement de statut est enregistré dans un journal d'audit

03 · De retour en stock
ProblèmeQuand un médicament est en rupture, les patients doivent revenir vérifier sans cesse.
ConstruitQuand une pharmacie le remet en stock, les patients qui l'attendent sont prévenus.
Les notifications sont écrites dans la même transaction que le changement de stock : personne n'est oublié

Toutes les fonctionnalités (10)
- Recherche de médicaments par nom, nom générique ou marque locale (par ex. Doliprane ou Panadol pour le paracétamol)
- Voir quelles pharmacies ont un médicament, avec le prix en FCFA, l'état du stock et la fraîcheur de l'information (« Signalé il y a 2 heures », signalé après 14 jours)
- Pharmacies proches sur une carte (Leaflet + OpenStreetMap), avec les horaires et « ouvert maintenant » pour chaque pharmacie
- Inscription d'une pharmacie en 3 étapes : la trouver sur OpenStreetMap ou placer un repère, ajouter les infos, vérifier. Le bouton Retour du navigateur marche à chaque étape
- Les pharmacies gèrent leur stock : état, quantité et prix pour chaque médicament
- Vérification par un administrateur avec une vraie machine à états (en attente, en cours d'examen, vérifiée, refusée, suspendue) et un historique de qui a décidé quoi
- Alertes de réapprovisionnement : un patient peut demander à être prévenu quand un médicament en rupture revient dans une pharmacie
- Notes et avis, et un moyen de signaler une fiche erronée
- Français et anglais, installable sur un téléphone comme une application, avec une barre de navigation mobile qui s'adapte au type de compte
- Tests automatisés (unitaires et de bout en bout) lancés à chaque push dans la CI
02
Comment c'est construit
J'ai construit PharMap comme une application web installable (PWA), avec un frontend React et une API NestJS. Les patients cherchent un médicament et voient quelles pharmacies vérifiées l'ont, avec le prix et la date de mise à jour du stock. Les pharmacies s'inscrivent elles-mêmes sur une carte et tiennent leur stock à jour. Un administrateur vérifie chaque pharmacie avant qu'elle apparaisse comme vérifiée. Elle fonctionne en français et en anglais.
- Frontend
- React + TypeScript + Vite + TailwindUne PWA rapide et installable. C'est une application où l'on se connecte, donc pas besoin de rendu serveur.
- Cartes
- Leaflet + OpenStreetMapGratuit, sans compte de facturation ni clé API, avec une bonne recherche de lieux au Cameroun.
- Backend
- NestJS + TypeScriptUn module par domaine (auth, médicaments, pharmacies, avis, notifications), avec les contrôles de rôle faits côté serveur.
- Base de données
- PostgreSQL (Neon) + PrismaPharmacies, stocks, membres et avis sont tous liés, et les mises à jour de stock ont besoin de transactions.
- Hébergement
- Vercel + Render (Docker)L'application sur Vercel, l'API sur Render depuis son propre Dockerfile. Des offres gratuites qui conviennent sans perdre de fonctionnalités.
03
Ce qui était difficile
- La recherche a dû changer pour la mise en ligne. Elle utilisait Meilisearch, mais l'hébergement gratuit efface le disque au redémarrage, ce qui supprime son index. J'ai déplacé la recherche dans Postgres, en échangeant la tolérance aux fautes contre une solution qui tourne sur la base qu'on a déjà.
- Des notifications exactes. Quand une pharmacie remet un médicament en stock, les patients en attente sont prévenus dans la même transaction, donc il n'y a jamais un moment où le stock dit « en stock » et un abonné a été oublié.
- Les démarrages à froid en hébergement gratuit. La base s'endort après 5 minutes et l'API après 15, donc les déploiements échouaient pendant le réveil de la base. Un délai de connexion plus long a réglé les déploiements, et un appel programmé garde l'API éveillée.
- Un compte, plusieurs rôles. Une personne peut être patient et propriétaire de pharmacie en même temps, donc les rôles sont déduits de ses données au lieu d'être une seule valeur enregistrée.
04
Résultat
Elle est en ligne comme MVP : l'application sur Vercel, l'API sur Render et la base sur Neon, avec des tests unitaires et de bout en bout lancés à chaque push. Le code est dans un dépôt privé.
05
Écrans
8 écrans · touchez pour agrandir
Besoin d'une application comme celle-ci ?
Recherche, carte et fiches vérifiées, en français et en anglais.