An audio-driven intake tool for a kitten rescue
A custom React application suite that turned a slow, manual intake process into something a volunteer can finish in a single breath.
The challenge
Kitten season moves fast. Every animal that comes through the door needs a record, and at Two Hearts that record was taking about 25 to 30 minutes of careful data entry per kitten. During an intake rush, that time is the difference between caring for animals and sitting at a keyboard.
The data also had to be exactly right, because it fed the shelter management system the whole rescue depends on. Slow and high-stakes is a hard combination.
What we built
We designed and built a custom React application suite with an audio-driven intake tool at its center. Instead of typing field by field, a volunteer speaks the details of a kitten, and the tool captures, structures, and files the information for them.
Crucially, it writes straight into their existing shelter management system, so there is no second copy to reconcile and no extra step. The data lands where it already needed to be.
How we approached it
The tool had to fit the rescue's real workflow, not the other way around, so we started by watching how intake actually happens and built outward from there.
Shadow the workflow
We followed the real intake process to find where the 25 to 30 minutes per kitten actually went.
Model the data
We designed a data model that matched their shelter management system field for field.
Build the capture flow
We built the React app suite around an audio-driven capture flow a volunteer can finish by speaking.
Wire it in
We connected the output straight into their existing shelter system, with no second copy to reconcile.
Test with volunteers
We tested against real intake scenarios alongside the people who would use it every day.
Roll out & refine
We launched it and kept refining based on how it held up in day-to-day use.
The result
Intake data entry dropped from about 25 to 30 minutes per kitten to about 3 seconds. The work that used to pull volunteers away from the animals now happens almost as fast as they can describe it, and it flows directly into the system they already trust.
- Intake data entry dropped from about 25 to 30 minutes to about 3 seconds per record
- Volunteers spend their time on the animals, not on data entry
- Far fewer typos and missed fields
- Data lands directly in the system they already rely on
Technologies & skills
A modern, lightweight stack chosen to fit a volunteer-run nonprofit: quick for the team to use, cheap to run, and built to talk directly to the tools they already have.
React
The full app suite is built in React, with an interface designed around the way intake really happens.
Firebase
Firebase handles the backend so the rescue gets a reliable, low-maintenance foundation without a server to babysit.
Audio capture
A volunteer speaks a kitten's details out loud, and the tool captures and structures that information for them.
API integration
The structured record writes straight into their existing shelter management system, with no second copy to reconcile.
Common questions
How does the intake actually work?
A volunteer speaks the kitten's details out loud. The audio-driven tool captures that, structures it into the right fields, and writes the record directly into the shelter management system the rescue already uses. What used to take about 25 to 30 minutes now takes about 3 seconds to confirm.
Did the rescue have to change systems?
No. The tool writes straight into their chosen shelter management system through an API integration, so there is no second copy to reconcile and no new platform to learn. The data lands where it already needed to be.
What was the biggest win?
Time and accuracy. Cutting intake from about 25 to 30 minutes to about 3 seconds gives volunteers their time back for the animals, and capturing details by voice means far fewer typos and missed fields than manual data entry.
