Inspiration
Blood shortages aren't usually a donor shortage — they're a coordination failure. Willing donors and urgent needs exist minutes apart with no way to find each other. We built VitalLink to close that gap, in line with SDG 3's goal of reducing preventable deaths.
What it does
A person needing blood posts a request, sees a ranked list of nearby compatible donors, and accepts who they want to reach. That donor gets notified instantly, confirms availability, and negotiates details with the requester through in-app chat — contact info stays private until both sides opt in.
How we built it
Fully free stack: Next.js (Vercel), FastAPI (Render), Supabase with PostGIS for geospatial matching and real-time updates, Leaflet + OpenStreetMap for maps, Resend for email alerts. Matching uses ABO/Rh compatibility rules plus a radius query that widens automatically for critical requests.
Challenges we ran into
We originally built this around hospitals broadcasting shortages to every nearby donor — but that recreated the impersonal, disconnected problem we were trying to solve. We pivoted to direct requester-donor matching mid-build, which meant reworking the data model and adding a whole negotiation/privacy layer we hadn't planned for.
Accomplishments that we're proud of
The full loop works end to end — post, match, accept, notify, confirm, negotiate — entirely on free infrastructure. We're especially proud of the privacy design: contact info is only revealed after mutual confirmation, never before.
What we learned
The most "automated" solution isn't always the most human one. Letting people choose who to connect with, and protecting their contact info until both sides agree, made this feel like real help between two people — not a dispatch system.
What's next for VitalLink
Extending to organ donation logistics, adding SMS as a paid fallback, building trust/verification to prevent misuse, and piloting with local blood banks and NGOs as a faster first-response layer alongside existing outreach.
Built With
- css
- fastapi
- github
- html
- javascript
- leaflet.js
- next.js
- node.js
- openstreetmap
- python
- react
- render
- typescript
- vercel

Log in or sign up for Devpost to join the conversation.