Priestly
← Tous les projets

É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
oct. 2026
Démo en ligne Code privé, disponible sur demande
pharmap-web.vercel.app
Page d'accueil de PharMap : « Trouvez votre médicament avant de sortir de chez vous », un champ de recherche, et une carte en direct montrant les pharmacies vérifiées qui ont du paracétamol, avec les prix et l'état du stock

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). La pharmacie la plus proche qui l'a, avec un stock mis à jour ces 14 derniers jours, apparaît en premier.

Recherche en PostgreSQL simple : chaque mot comparé au nom, au générique et aux marques, sans tenir compte des accents, classé par correspondances

Où le paracétamol est en stock : la meilleure option près de chez vous, Pharmacie Kotto, en stock à 1 500 FCFA à 0,4 km, avec les boutons appeler et itinéraire, puis les autres pharmacies avec leurs prix et leur stock

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

Pharmacie de la Cité Bonamoussadi à Douala : ouverte, vérifiée, notée 4,0, boutons appeler et itinéraire, la liste de ses médicaments avec les prix et la date de chaque signalement, et ses horaires

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é

Stock de la Pharmacie du Carrefour Warda : filtres à mettre à jour, en rupture et faible, et boutons en stock, faible et en rupture avec le prix de chaque médicament
Toutes les fonctionnalités (15)
  • 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
  • « Meilleure option près de chez vous » : la pharmacie la plus proche qui a le médicament, avec un stock mis à jour ces 14 derniers jours, apparaît en premier, avec les boutons appeler et itinéraire
  • Un tableau de bord pour les pharmaciens : plusieurs pharmacies sur un même compte, ce qui demande une action (stock non mis à jour depuis 14 jours, signalements), et des horaires avec pause de midi
  • Une seule file admin pour tout ce qui attend une décision, du plus ancien au plus récent : nouvelles pharmacies, examens en cours, signalements et nouveaux médicaments
  • Une vérification avec liste de contrôle (le repère est sur une vraie pharmacie, le téléphone répond, le nom correspond à l'enseigne), et des signalements que l'admin peut résoudre, rejeter ou transformer en suspension
  • Les pharmacies peuvent ajouter un médicament absent du catalogue ; il est utilisable tout de suite, et l'admin l'approuve, corrige le nom ou fusionne un doublon
  • 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

9 écrans · touchez pour agrandir

Besoin d'une application comme celle-ci ?

Recherche, carte et fiches vérifiées, en français et en anglais.

Discuter sur WhatsApp