A pharmacy chain that stopped losing stock to expiry
Primary Measured Result
৳11 lakh
annual expiry loss recovered

- Client
- Rx Care Pharmacy
- Industry
- Healthcare & pharmacy
- Timeline
- 11 weeks
- Year
- 2025
- Core Stack
- LaravelPostgreSQLReact
The problem
What was broken before we arrived
Four branches, three ledgers, and one shared WhatsApp group. Stock was counted on paper at each location, purchase decisions were made from memory, and nobody could answer how much inventory the business held on any given day without a physical count.
The expensive problem was expiry. Medicines were reaching their expiry date on the shelf because no system flagged them in time, and the owner estimated the annual write-off in lakhs of taka — real money, disappearing quietly.
Two previous attempts to fix this had failed. Off-the-shelf software had been bought and abandoned twice, both times because it assumed a single-branch business and required the counter staff to change how they billed.
Strategy & Discovery
How we solved it
We spent the first week behind the counter at two branches during peak hours, watching how billing, stock receiving, and end-of-day reconciliation actually happened — including the workarounds staff had invented, which is where most of the real requirements were hiding.
The critical insight was that the counter workflow could not change. Staff bill fast, by keyboard, often with a queue waiting. Any system requiring more clicks per sale would be abandoned like the previous two, so we designed billing to be faster than the paper process rather than merely digital.
Batch and expiry tracking was modelled from the start rather than added as a field, because expiry is not an attribute of a medicine — it is an attribute of a specific batch of it, and getting that data model wrong makes accurate expiry reporting impossible later.
The Build
The system in detail

Billing built for a queue
Keyboard-first billing with barcode support, medicine search that matches on brand or generic name, and batch selection that defaults to the oldest stock so first-expiry items sell first automatically. A sale takes fewer keystrokes than the paper book it replaced.
Screenshot slot
Expiry forecast dashboard with 30/60/90 day windows
1440 × 900
Expiry as a forecast, not a report
The dashboard shows what expires in 30, 60, and 90 days, valued in taka, so the owner can discount or return stock while it still has worth. Alerts escalate as dates approach instead of appearing once and being missed.
Screenshot slot
Multi-branch inventory with transfer history
1440 × 900
Stock that agrees across four branches
One stock figure per batch per branch, with transfers between locations recorded as movements rather than manual adjustments. A branch running short can see which other branch holds the item before ordering more.
Screenshot slot
Role and permission management
1440 × 900
Roles that match the actual hierarchy
Counter staff bill and check stock. Branch managers receive goods, adjust stock with a mandatory reason, and see their own branch reporting. The owner sees everything across all four, including an audit trail of every adjustment and who made it.
The Outcome
Measured results in production
- ৳11L
- Annual expiry loss recovered
- 4 hrs
- Saved per branch per week
- 4
- Branches on one system
- 0
- Paper stock ledgers remaining
The verdict after rollout
Within three months the business had a single accurate stock figure for the first time, and expiry write-offs dropped sharply because slow-moving batches were being discounted while they still had value rather than discovered after they expired. End-of-day reconciliation went from roughly forty minutes of paperwork per branch to a few minutes on screen. The system is still in daily use across all four branches.
“We had bought software twice before and both times the staff went back to the notebook within a month. This time they preferred it by the second week, because billing is genuinely faster. That is the difference.”
Screens & Views
Interface gallery
Screenshot slot
Owner dashboard — all branches
1440 × 900
Owner dashboard — all branches
Screenshot slot
Purchase order and goods received
1440 × 900
Purchase order and goods received
Screenshot slot
Stock check on a phone
390 × 844
Stock check on a phone
Architecture
Why we chose this stack
Laravel
Mature, well-documented, and easy for the client to find another developer for later — which matters for software a business depends on daily.
PostgreSQL
Strong transactional guarantees for stock movements, where a half-completed update would corrupt inventory counts.
React
The billing screen needed to feel instant under rapid keyboard input, which a page-reload architecture cannot deliver.
Redis
Caches medicine search results so lookups stay fast as the catalogue grows past ten thousand items.
Ready to build a system like Rx Care Pharmacy's?
Tell us what your business actually needs. We will come back with an honest view of scope, timeline, and cost.
No obligation · We reply within one business day