RhymeLight
A songwriting notebook for iPhone and iPad that colours every word by its vowel sound as you type, so your rhymes light up.
Active Side Project
RhymeLight is for anyone writing lyrics or poetry. Each word segment gets coloured by its vowel sounds as you type, so you can easily spot all your rhymes. Matching sounds on nearby lines get a coloured underline, and tapping any word pulls up a drawer full of rhymes, sorted into columns by syllable count.
Tap a word for rhymes, tap a rhyme to copy it, and paste it right into the next line
This idea has been rattling around in my head (and my hard drive) for a long time. Back in 2024 I built a few rough prototypes, starting with a web-based version that couldn't quite keep up with what I wanted to do. It made the jump to iOS for the extra on-device processing power, but it was still running into performance issues. I use an open-source dataset from Carnegie Mellon University called the CMU Pronouncing Dictionary, which is a giant text file of over 130,000 English words along with their ARPABET phonemes. Returning a list of syllable-ordered rhyme segment matches on the fly is a computationally expensive task, so this project ended up spawning a second one: cmuDB.
cmuDB mapping "daughter" letter by letter: all 4 letters of "augh" make a single vowel sound
I built the cmuDB app on macOS because I needed all the processing power my M1 Max could give me. Processing all 130,000+ entries takes time (even after enabling multi-core processing).
Basically the app works in 2 stages, using something called a dynamic programming alignment. First it walks through each word from left to right, trying to pair chunks of letters with chunks of phonemes, then scores each match: known spellings like "ph" → F are cheap, while pairing a vowel letter with a consonant sound is expensive. The cheapest overall path wins. Then, dozens of additional cleanup rules handle the quirks that scoring alone can't: things like silent e's, the "k" in "knee", all 4 letters of "augh" in "daughter" sharing one vowel sound, and so on. English is a messy language full of exceptions, and that's where most of my time went. I had the app assign a confidence score to each mapping, flagging anything under 0.7 for manual review. Once all that was done, I exported it to an optimized database format for use in the main iOS app. It was a long and painful process, and I'm still catching exceptions here and there, but I needed to do it to build a performant iOS app.
Using my original iOS build, Figma mockups, specs, and the exported cmuDB file as a reference, I had Fable create a plan for rebuilding the app properly. The original iOS app was a useful tool for playing with ideas, but there was a ton of old code in there that I didn't want to ship. I think a useful workflow in the LLM era is to iterate on something scrappy to get more clarity on the execution and idea, then document everything you want to keep and start over to build something clean and speedy.
Colour-coded lyrics as you type, rhymes for any word you tap, and all your saved pieces
Each highlight is a thin underline in the vowel's colour, backed by a softer bar that can stretch over matching consonants but never crosses into another vowel. In the rhyme drawer, perfect rhymes come first, followed by slant rhymes from closest to furthest, and each group is alphabetized so the list doesn't feel random. The keyboard and the drawer never share the screen. And it's fast: colouring a 1,000-line song takes about 6 milliseconds per keystroke.
RhymeLight is up and running on my phone, but I'm still tweaking the appearance and behaviour as I use it more. I'll be adding support for multi-word rhyme matches (e.g. "orange" and "door hinge"), then iCloud syncing, and it'll be just about ready for the App Store.