The Context
Finding a medicine in Cameroon usually means calling pharmacies one by one, without knowing who has it in stock, at what price, or where. EasyPharma solves this: a medicine search and ordering application connecting patients, pharmacies and couriers, delivered on three platforms (backend, web, mobile).
A Semester 1 group project at EADL: a team of 4 developers I coordinated end-to-end, task organization, code review, continuous integration.
For patients
Search by name, symptom or geographic proximity, order from several pharmacies in a single cart, track status in real time.
For pharmacies
Inventory, employees, statistics, automatic payouts and review management.
For couriers
Order lifecycle with delivery assignment and multi-channel notifications.
What I Built
Role: Tech Lead & team coordinator. I organized the work into feature branches, reviewed and merged 12+ pull requests, and set up the GitHub Actions pipeline (backend build, frontend build, SonarQube analysis) that validated every contribution before merge. Major personal contributions: prescription upload, multi-channel notifications (In-App, SMS, Push, Email), admin dashboard with statistics and search tracking, reviews & ratings with moderation, pharmacy payouts.
Backend, Spring Boot 3 (Java 21): clean architecture in 4 layers (presentation, application, domain, infrastructure), JWT authentication (Spring Security), PostgreSQL (with PostGIS for geographic search) / H2 for tests, Flyway migrations, Swagger/OpenAPI documentation, 75 unit & integration tests (JUnit 5, Mockito, AssertJ), order, payment and delivery management, WebSocket for real-time notifications.
Frontend, Angular 21: web interface (Tailwind) for patients, pharmacies and admin, e2e tests with Cypress, unit tests with Vitest.
Mobile, Flutter: application for patients and couriers, authentication and profiles, cart with stock verification and items grouped by pharmacy, order processing (one order per pharmacy, partial successes handled), order history with colored statuses and pull-to-refresh, network error handling (Dio).
Quality & security (DevSecOps): SonarQube (backend + frontend static analysis in CI), OWASP ZAP for penetration tests, multi-service Docker Compose (PostgreSQL, Redis, RabbitMQ, Mailhog).
Impact
3 platforms, 1 product
Spring Boot backend + Angular web + Flutter mobile, one product delivered on every screen, sharing a single API.
Coordinated team of 4
12+ pull requests reviewed and merged through a feature-branch workflow + GitHub Actions CI, proof of industrialized teamwork.
Measured quality
75 backend tests, SonarQube in CI, OWASP ZAP for security, a level of rigor rare for a student project.
Original business features
Search by symptom and geographic proximity (PostGIS), multi-channel notifications, payments and pharmacy payouts.
What This Experience Taught Me
Coordinating a team on a real git workflow confirmed that the Tech Lead role goes beyond code: splitting work into coherent branches, making the CI demanding (no merge without a green build), and integrating contributions of varying quality without breaking overall coherence. Delivering the same product on three platforms also taught me to define a single, stable API that web and mobile consume identically, the discipline that keeps a multi-platform application maintainable.