Case Study — Medical device rental operations
200+ rentals.
One spreadsheet
too many.
A Hungarian medical device distributor was tracking rentals, client records, and contracts across a tangle of Excel versions. At 200+ active rentals, month-end reconciliation was consuming a full working day. We built VitalRegistry — a web CRM — to replace it.
See VitalRegistry live1 day → 30 min
month-end reconciliation time
10+
active distributors on the platform
10–30
devices tracked per operator
8 months
Streamlit prototype to React CRM
The situation
Hungarian medical device rental distributors operate with thin margins and no dedicated ops software. The standard workflow: one spreadsheet per device category, cross-referenced manually at month-end. At fewer than twenty devices that is manageable. Past one hundred it starts to break. Past two hundred it routinely consumes a full working day each month — day spent reconciling which entry was current, not talking to clients.
The ask was not "build us a product." It was: build something that stops the data from drifting. Something I can trust at the end of the month without spending all day in it. That constraint shaped every decision we made.
“Month-end reconciliation used to take me a full day. Now I run it in 30 minutes and actually know the data is right.”
Build timeline
The ask
A medical device rental distributor was managing 200+ rental records across a tangle of Excel versions. Month-end reconciliation took a full working day. She asked us whether we could build something that would let her trust her own data again.
Week 6
Streamlit prototype live. Auth, device and client CRUD, the table views she recognised from her spreadsheets. Not pretty — usable, which was the only metric that counted.
Month 2
Two operators in the same line of work asked for access. They came back with specific feedback and a willingness to pay. That shifted VitalRegistry from internal tool to product.
Month 3
Hosting math broke past twenty users. Rewrite decision. Full React migration started.
Month 8
React CRM live. Real component library, proper routing, contract generation, in-app reminders, calendar sync.
Today
Ten active operators running between ten and thirty devices each on the platform.
Stack
Features shipped
- Device inventory tracking
- Client records and notes
- Rental contract generation
- Payment status per device
- In-app reminders
- Google Calendar sync
- Role-based access
- Sub-rental and subletting support
Lessons and receipts
Month-end reconciliation dropped from a full day to under 30 minutes. The hours that used to go to cross-referencing versions now go to actually talking to clients.
When we asked early users whether they would pay for VitalRegistry, the answer was 'in a heartbeat'. Several said they'd happily pay a couple of thousand forint a month for the time it gives them back.
Six weeks from the first conversation to a prototype used daily. The first version wasn't pretty. It was usable, which was the only metric that counted.
A handful of distributors with ten to thirty devices each is enough load to find the holes in your data model. Real usage shows you which fields you underspecified, which queries you underindexed, and which UX flows assume more than you should about the user's discipline.
The hardest problem was social, not technical. Two people working the same repo without stepping on each other's branches. Messenger threads of 'are you on this?' and 'wait, did you just push?' That is what eventually pushed us to GSD and the agentic ship pipeline.
Work with us