The Problem
Custom fonts are expensive to commission, and while tools like Glyphs and FontForge let you build one yourself, they require a complex desktop application just to trace a handful of letterforms. The thing most people actually want, to take their own handwriting and use it as a font, has no good mobile-native answer.
What I Built
FotoFont is an iOS app that turns a photograph of your handwriting into a downloadable TTF font file. You write out a character sheet, photograph it, and the app detects each glyph, vectorizes the outlines, and assembles a complete font, ready to install and use anywhere.
I co-built the full product: product design, React Native frontend, computer vision pipeline, and Python backend deployment.
Outcome
Shipped to the App Store.
Design Decisions
The Character Sheet
The hardest UX problem was the input format. Users needed to write in a way the computer vision model could reliably segment, consistent spacing, clear boundaries, without making the sheet feel clinical or mechanical. I went through four versions. The final sheet uses a grid with generous gutters and lightly printed guide boxes that disappear visually once filled in, so the result still looks like your handwriting rather than a form.
Segmentation Feedback
After a photo is taken, the app shows you each detected character in a review grid before processing. This was a deliberate trust-building step. Users needed to see that the app understood what it was looking at before committing to a full export. It also gave them a natural correction point if a character was missed or misread.
The Export Flow
TTF files are unfamiliar to most users. “Download font” as a button label tested poorly. People didn’t know what would happen next or how they’d use the file. I changed the CTA to “Save to Files” with a secondary label “Install on your device,” which reduced confusion and matched the mental model users already had from other iOS file workflows.
Technical Constraints
Character segmentation remains the hardest problem in the pipeline. Dotted letters, descenders, and connected letterforms create genuine ambiguity for the computer vision model. An i and a j look identical until you find the dot, and a looping g can read as two separate glyphs. Malone and I have both taken passes at this and we’re still working through it. The current approach handles print handwriting reliably; cursive and highly stylized writing remain inconsistent.
The design response has been to make the constraint visible rather than hide it. The character sheet guides users toward print letterforms, and the review grid before export lets you catch and flag misread glyphs before they end up in the font file.