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
sept. 2026
Démo en ligne Code privé, disponible sur demande
pharmap-web.vercel.app
Page d'accueil de PharMap : trouver des médicaments et des pharmacies proches de confiance, avec les boutons de recherche de médicaments et de pharmacies à proximité

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

Recherche de médicaments PharMap : en tapant « para », on trouve le paracétamol et ses marques locales Doliprane, Panadol, Efferalgan et Dafalgan

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

Pharmacies qui ont le médicament : Pharmacie Kotto à Douala, en stock à 1 500 FCFA, signalé il y a 27 secondes

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é

Compte du propriétaire : une pharmacie vérifiée avec les actions gérer le stock, voir la page publique et supprimer la pharmacie
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.

Discuter sur WhatsApp