Healthcare · Open Source Product

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
bloodbank.software inventory dashboard showing total units, expiring soon, screening, reserved and discarded counts with per blood group status cards
The inventory view leads with the numbers that trigger action: units expiring in the next seven days, units awaiting screening results, and per-group stock status.

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.

01 Collected Unit created against a donor record and camp, QR label applied.
02 Screening Held pending test results. Counted, but not issuable.
03 Available Cleared and in storage, with an expiry date already ticking.
04 Reserved Allocated to a named patient. Present in stock, unavailable to others.
05 Issued or expired Released for transfusion, or discarded with the reason recorded.

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.

Donor management
Donor records carry blood group, last donation date, location and current eligibility status — the three fields that determine who can be contacted today.

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

QR bag trackingScannable unit identity from collection to issue.
Inventory managementStock by group and state, with expiry visibility.
Storage unitsPhysical storage locations mapped to held stock.
Donor recordsProfiles, donation history, camp attribution, eligibility.
Location filteringDonor segmentation by area for realistic outreach.
WhatsApp broadcastBulk messaging to a filtered donor segment.
Scheduled tasksAutomated expiry, stock and eligibility triggers.
RemindersDonation-due prompts as recovery periods end.
Role-based accessSeparate permissions for collection, lab and issue staff.

Technology choices and why

A different stack from our Laravel products, chosen for what this system does differently: constant scheduled evaluation and mobile scanning.

SERVICES

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.

DATA

MongoDB

Donor and unit records accumulate varied history — camps, screening results, status transitions — without a fixed shape agreed in advance.

INTERFACE

Next.js

The same application serves desk work and handheld scanning on the collection floor.

IDENTITY

QR codes

No specialist hardware. Any phone camera reads a unit label, which matters for camps operating away from the main facility.

MESSAGING

WhatsApp

The channel donors read and can reply on, rather than the one that is cheapest to send.

LICENCE

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.

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