A blood donation network that finds the nearest donor in seconds
A PWA that replaces the frantic phone-tree search for a blood donor with a ranked, distance-aware match — and live donor tracking the requester can actually follow.

- Client
- Arxiron
- Industry
- Healthcare
- Service
- Full-stack solutions
- Year
- 2026
The challenge
When somebody needs blood urgently, the search is a relative ringing everyone they know and messages forwarded through group chats until they reach someone who might help. It works, eventually. Eventually is the problem. The replacement had to reach compatible donors in seconds, respect medical eligibility rules, and never expose a donor's location beyond the person they chose to help.
What we did
- Split the system into two services that never call each other — identity owns accounts and sessions, platform owns donors, requests and matching — joined only by a shared JWT secret and a one-way Redis event stream
- Built matching on blood compatibility rather than type equality, filtered by availability, the 56-day donation cooldown, the search radius and each donor's own maximum travel distance, ranked nearest-first then most reliable
- Escalated unanswered requests automatically: a Celery beat job doubles the radius through 10, 20 and 40 km, capped at 50, notifying the donors earlier waves missed
- Kept access tokens out of the browser entirely — a BFF proxy attaches them from an httpOnly cookie, so a script injection has nothing to steal
- Shipped live donor location that is visible only to the requester, only while the donation is open, and never automatically
- Covered the two failure modes unit tests structurally cannot reach — a token crossing services, and an event crossing Redis — with 31 smoke checks against running containers
Outcome
Phone tree to seconds
Time to reach donors
Compatibility, distance and eligibility aware
Matching
Requester-only, donation-scoped
Location privacy
- Next.js 15
- React 19
- TypeScript
- Tailwind v4
- Serwist PWA
- Leaflet
- FastAPI
- Python 3.12
- PostGIS
- Redis
- Celery
- Web Push