I’ve been wanting to add a speaking speed calculator to this site. The concept felt obvious - you read something out loud, and it tells you how many words per minute you speak. Useful for anyone prepping a presentation, timing a speech, or just curious how fast they talk.
My first instinct was that it would need a microphone to capture audio, and I didn’t know how to do all that. You’d press a record button, read your passage aloud, and then the app would record the audio, send it to some AI speech recognition service, count the words from the transcript, and do the math. That sounded cool, but complicated. I don’t have experience wiring up audio APIs or working with speech-to-text services, and I had no real interest in introducing some whole stack that may fail one day.
So I asked ChatGPT. And ChatGPT pointed out something that I should have noticed myself: you don’t need to capture any audio at all.
The number of words is already known - it’s right there in the text field. All you actually need to measure is time. How long did it take you to read the passage? That’s it. Start a timer when you start reading, stop it when you finish, divide the word count by the elapsed minutes. Just a stopwatch. It’s the same number of clicks for the user (maybe less?), so it seems very simple.
I built it with a textarea pre-loaded with a sample passage - about 155 words, enough to get a reliable reading - and a start/stop button. The live word count updates as you type, so if you paste in your own speech or script, you can see exactly what you’re working with before you start.
After the first working version, I did a bit of tweaking:
-
The textarea wasn’t tall enough by default. With the sample passage, it only showed part of the text, which felt wrong for a tool that’s specifically asking you to read the whole thing. I changed it to auto-grow to fit whatever content is in it.
-
The start/stop button was too far away for long passages. If you paste in a full speech - say, a five-minute conference talk - by the time you scroll to the bottom to stop the timer, you’ve already added a few seconds of dead time. The fix was to duplicate the timer and button at both the top and bottom of the text field, so you can stop it without scrolling.
-
The textarea border was too subtle. The text area sits on a white card, and white-on-white wasn’t giving enough visual separation. I bumped the border from 1px up to 4px to make it clearly feel like an editable input field.
You can try it at the Speaking Speed Calculator. The sample passage is just over a minute at a normal conversational pace - a good baseline reading. Or paste in something you’re actually preparing, and see exactly how long it will run.
I’m on Bluesky if you want to share your WPM.