Digitizing a Handwritten Letter#
Grandpa Bill#
My grandpa was born in 1922 in Decatur, Illinois. He wrote a letter about his “pre-war” days to his grandsons. Handwritten in cursive, photocopied multiple times, 150 pages carefully inserted into double-sided plastic sheets, and bound in a 2-inch thick red binder.
His story is an incredible firsthand account of what it was like to grow up in a poor family with two disabled parents during the Great Depression and his path to eventually escape poverty by serving in WWII.
The letter also included his genealogical research that he sourced and compiled. Genealogy became an important part of his later life, partially to understand why deafness ran in his family so he could educate his family.
Digitization Attempt 2016#
I had started to digitize his letter when he passed away, but reading his cursive and transcribing a few pages took me hours. Why not use “AI”? Even in 2016 (when he passed) there was a mature field of “optical character recognition”(OCR) to exactly solve this problem: automatically detect text using machine learning algorithms. However, like most ML back then it didn’t generalize, i.e. would not have been able to read his handwriting.
Digitization Attempt 2026#
Fast forward 10 years, January 2026, the landscape of OCR is completely different. I took a picture of one of the pages, uploaded it to Mistral’s AI Studio: Document AI, and within a minute had the digitized text from one page. Skimming over it, I found 0 errors.
Re-energized by the accuracy of today’s OCR models, I spent about 5 hours executing this pipeline:
- Rig up a bootleg assembly line scanner with good ambient lighting
- Use iPhone document scanner to automatically capture cropped images of the handwritten pages
- Save pages to a PDF (iOs only lets use save 24 pages at a time max)
- AirDrop them to laptop
- Set up a Mistral account, pre-load your account with money (minimum $10), get an API Key
- Vibe code a ~100 line script to handle reading PDFs and calling Mistral’s OCR API
- Test on a few pages to make sure it works, re-vibe code as needed, run script on all PDFs
- Vibe code a file to combine the output of Mistral into a single markdown file (note: automatic image extraction didn’t work well)
- Review, reformat, and add images to the final file (screenshotting images and placing them inline was a manual step that took the most time, ~2 hours)
Why choose Mistral? Best OCR on benchmarks and reddit threads. After getting the results from a few pages it was able to read the handwriting better than I could.
Letter Exercept#
Feb. 9, 1995
Dear Grandson,
Just a few lines to let you know we are all well. Mary broke her elbow July 6. She is doing well now except for a little stiffness and swelling. Probably it will be corrected by physical therapy. Our summer vacation plans have been thwarted. Perhaps we will do something before Mary goes back to work at Ramona H.S. next month. She is on sick leave this month due to her therapy schedule. I’m sure we won’t visit my brothers in Illinois now.
To explain my opening line, it was commonly expressed in early day correspondence. Such was the way Aunt Rosa and I began our letters. She was Mom’s sister. I wrote letters for Mom because she had much difficulty with written communication because she was deaf. Aunt Rosa and Mom’s other brothers and sisters lived about a hundred miles south of Decatur, Illinois, our place of residence. Aunt Rosa was the maternal figure in Mom’s family since 1917, the year their parents died. Mom’s brother, Hulen was five or six years old when he witnessed his mother’s death. She was kicked in the head. He had lost his father nine months previous in January. He also lost sisters, Versa and Lillie. A measles epidemic took them. Aunt Rosa took in Uncle Hulen and Jim and Herman Yoder, sons of Aunt Lillie.
Every year Mom took Glenn, Junior Luke and me to Aunt Rosa’s for summer vacation. I barely remember going by train to Sandoval. In later years Aunt Rosa and Uncle George Pulver drove their model “A” Ford to Decatur and returned with us to their home in Salem. Our last family vacation was in 1938 when we visited Aunt Rosa on her farm just south of Salem. I spent the summer with them. I prize the memory of that summer. Some of the work was hard, but I didn’t mind. I learned to hitch up the team, plow with a “single blade”, pitch hay, milk the cows, prepare a “pullet” for Sunday dinner. Aunt Rosa was an excellent cook, especially her fried chicken. The following year Mom died, so family trips stopped. During the remaining teen years, and into my twenties I visited the folks in Salem via my thumb.
From React App to Google Doc#
I originally built a standalone React application as part of my site to host this letter digitally. It had all the website-stuff: password protection via Supabase, collaborative commenting on individual paragraphs, a table of contents, an image gallery with lightbox, and markdown rendering.
It was the wrong approach. Nobody wants to remember a password an account and log in just to read a family letter. The paragraph-level commenting, while technically interesting to build, added unnecessary friction. And maintaining a separate React application with its own deployment, database, and auth system is overkill for sharing a document with family.
The better solution was obvious: Google Docs. It already has commenting, editing, and sharing permissions built in, and everyone in my family already has a Google account. No login walls. No custom infrastructure. Just a shared link.
The full letter, including genealogical records and family history, is available as a shared Google Doc (to my family members):
Read the Full Letter (Google Doc)
For my site, the path to digitization is interesting and the family photos from the letter are available in the Thornton Family gallery.