This was around March 2025. Spain's Kit Digital programme offered EU-funded grants to help small businesses and self-employed people adopt digital tools. The clinic had a new CRM. Years of patient history were still on paper.
Three dentists worked there full-time, each with an assistant. The CRM handled appointments, patient records, sales follow-up, and communication. They wanted their existing patient histories available in that same system.
The archive covered around 800 patients and roughly 3,000 physical sheets, many with writing on both sides. Some were readable. Others had the sort of handwriting you'd expect after years of dentists taking notes.
By the time they contacted me, the assistants had started typing records into the CRM. Read the handwritten notes, retype them, check the result. Then the next sheet. All alongside their work with the dentists.
Now that the pain is crystal clear...
...we need a solution.
We had one meeting. The owner explained the problem and what he had to work with. Three assistants knew the records, could match them to patients, and had time between appointments or during dedicated sessions to work through the archive.
That gave me enough to work out what a solution needed to do:
- Fit around the assistants' clinic duties.
- Cut the retyping, including when the handwriting was too messy for OCR.
- Let the assistants check and correct every entry before it reached a patient's record.
- Produce data the existing CRM could import.
- Be quick to build and easy for three people to use. This was one archive to get through.
I came back with three strategies and a recommendation.
- I take on the transcription and prepare the import files. That would take work off the assistants' hands, but the clinic would still need to help with unclear notes and matching patients. They already had people who knew the archive and time to work on it.
- The assistants keep entering everything manually. No software to build, but every sheet would still need retyping. The notes were already written. Making someone type them all out again felt like a poor use of their time.
- I build a small tool that lets the assistants photograph or dictate the notes, then check the text before import. This needed some development upfront, but used the team and time the clinic already had while cutting out much of the typing.
I recommended the third option. The assistants could use their knowledge of the records to review the text and match patients, while the app handled transcription. And dictation gave them a way through the handwriting OCR couldn't read.
The owner had options and my reasoning to make the call. He didn't need to figure out how the software should work. I worked out the requirements, wrote the specification, designed each step the assistants would follow, and built it.
Given that you're reading this, you can probably guess which option he chose.
I built a React web app for their phone browsers, with three staff accounts and no public registration. Those three people were the entire audience.
The application gave them two ways to capture a record.
Photograph the record
An assistant photographed a sheet and uploaded it. Google OCR read the Spanish handwriting and returned the text with confidence scores.
We used an 88% confidence threshold to route the work. Below it, the app prompted dictation. At or above it, the scan continued to review. The score never replaced the assistant's check of the medical information.
Read it aloud
When OCR struggled, the assistant read the notes aloud and Google Speech-to-Text V2 transcribed the recording. If they could read the handwriting, they could dictate it rather than type the whole thing.
Both routes ended with staff review and corrections. The app produced JSON or CSV for import, and the assistants matched each entry to the right patient in the CRM.
Working through the archive
I built the app in 11 working days. The assistants then worked through the archive over 27 working days. That made 38 working days for the build and digitization together.
Across the 3,000-sheet archive:
- 1,920 sheets went through OCR, or 64%.
- 750 went through dictation, or 25%.
- 330 stayed out of the CRM import, or 11%.
Getting 64% through OCR was more than I expected, given some of the handwriting.
The result was 2,670 sheets transcribed, checked, and imported into the CRM by the existing team, around their clinic responsibilities. I don't have a reliable hours-saved figure. The counts and completion time are what I can stand behind. Decisions about the physical archive were outside my scope.
The app isn't actively used anymore. It did its job and got to retire. Honestly, good for it :)
That's why I like this project so much. Three people, a stack of paper, and a very specific problem I could make go away. I knew who I was building for, what they had to work with, and what finished would look like.
I didn't have to imagine a million future users. My entire audience could fit around a table. I could spend my time on the things that would actually help them, like getting through bad handwriting and checking the results before import.
Then they reached the end of the archive, and that was it. No more paper to feed the app. There's something beautiful about building a piece of software that makes itself unnecessary. I'd happily do more of these.