bloodbank.software: inventory where every unit has an expiry date
An open source blood bank management system with QR-coded bag tracking, donor eligibility windows and location-aware WhatsApp outreach — built around the two ways a blood bank fails.
- SECTOR
- Healthcare / Blood services
- TYPE
- GegoSoft product
- LICENCE
- Open source
- TEAM
- 4 engineers
- STATUS
- Active development
Two failures, pulling in opposite directions
A blood bank can fail in exactly two ways. It can discard units that expired before anyone needed them, or it can run out of a group when a patient needs it. Both are inventory problems. They are also opposites: holding more stock reduces the second and increases the first.
What makes it harder than ordinary perishable inventory is that supply cannot be ordered. It has to be asked for, from people, who are only eligible to give at intervals, and who need a reason to come in today rather than next month.
Stock control and donor relationships are the same problem. Most software treats them as two.
That was the design premise. Rather than an inventory module with a donor database bolted on, we built the two around a single question a blood bank asks under pressure: who, near here, is eligible to donate this group right now?
A blood bag is a state machine, not a stock row
Every unit moves through a fixed sequence, and its availability differs at each step. The system models the sequence rather than a quantity on hand.
The distinction between these states is what a single stock number hides. Ninety-seven units on hand means nothing if thirty are awaiting screening, four expire this week and several are already reserved. The dashboard shows the states separately because the decisions they drive are different.
QR coding is what keeps the physical bag and its record in step. Each unit carries a scannable label from collection onward, so every state change is a scan rather than a handwritten entry reconciled later. Searching by the last digits of a unit ID lets staff find a specific bag without scanning shelves.
The query that matters in an emergency
When a group goes critical, the blood bank does not need its whole donor list. It needs the subset that satisfies three conditions at once.
Right group
The specific group required, including compatible alternatives where clinically appropriate.
Currently eligible
Past the mandatory interval since their last donation. Donors inside that window are held in a recovery state and excluded automatically.
Close enough to come
Within realistic travel distance. A willing donor three hundred kilometres away is not a donor today.
Filtering on all three produces a contactable list, and bulk WhatsApp messaging reaches it directly. WhatsApp rather than SMS because in the markets this was built for, it is the channel people actually read — and because a donor can reply.
Scheduled tasks handle the routine half: expiry warnings before units become unusable, low-stock alerts by group, and donation reminders when a donor's recovery period ends. Most outreach should happen before anything becomes critical.
What the platform covers
Technology choices and why
A different stack from our Laravel products, chosen for what this system does differently: constant scheduled evaluation and mobile scanning.
NestJS
Scheduled jobs are core rather than peripheral here. Nest's task scheduling and module structure suit a system where much of the logic runs unattended.
MongoDB
Donor and unit records accumulate varied history — camps, screening results, status transitions — without a fixed shape agreed in advance.
Next.js
The same application serves desk work and handheld scanning on the collection floor.
QR codes
No specialist hardware. Any phone camera reads a unit label, which matters for camps operating away from the main facility.
The channel donors read and can reply on, rather than the one that is cheapest to send.
Open source
Blood banks are frequently public or charitable bodies with no software budget. A licence fee should not stand between them and traceability.
How the team built it
A four-person team built this alongside other work. GegoSoft engineers use Claude Code as standard daily tooling, and on a NestJS codebase it carried the service scaffolding, DTO and validation layers, scheduled job structure and test coverage.
The state model, the eligibility rules and the decision to treat donor outreach as part of inventory rather than a separate module were the team's. Every change passed normal review before merge.
Where it stands
The project is open source and under active development at bloodbank.software, with source at github.com/bloodbank-software.
Common questions
Is bloodbank.software free to use?
The platform is open source and the code is publicly available. Hosting, deployment, data migration, customisation and support are paid services if you want them.
Do we need special scanning hardware?
No. Units are identified by QR code, readable with an ordinary phone camera. That was deliberate, so mobile collection camps work the same way as the main facility.
Can it handle multiple storage locations or branches?
EDIT-ANSWER — confirm current multi-location capability before publishing. Do not claim it if it is roadmap rather than shipped.
How does WhatsApp messaging work?
Donors are filtered by group, eligibility and location, then messaged in bulk through WhatsApp. EDIT-ANSWER — confirm whether this uses the WhatsApp Business API and whether the client supplies their own credentials.
Does it meet blood bank regulatory requirements in our country?
Regulatory requirements for blood services differ by country and are not something we claim compliance with generically. Tell us which framework applies to you and we will assess what the platform already satisfies and what would need building.
Can it be customised for how our blood bank operates?
Yes. The source is open, so your own developers can modify it, and we build customisations directly for organisations that would rather we did.
Related work
Microservices clinical records with a clinician-controlled AI assistant.
HEALTHCARE Multi-location pharmacy platformPOS, inventory, purchasing and supplier workflows across branches.
OPEN SOURCE GegoK12MIT-licensed school ERP with parent, teacher and transport apps.
Running a blood bank on spreadsheets?
Tell us how you track units and donors today. We will tell you what bloodbank.software would cover, what it would not, and what deployment would realistically involve.
Talk to us about deployment See all case studies