Bayan Bennett

Introduction—Typing Practice w/ Machine Learning


Articles in this series:

  1. Introduction
  2. Pseudo-English
  3. Keyboard Input
  4. Inference Using Web Workers

The finished project is located here:

I've never been a good typist. My backspace button has been weathered about as much as my space bar. I usually average about 70 wpm, 80 if I've brewed a fresh pot of coffee. I so envy those that can sit down at a desk and simply type at 120 wpm. Witnessing it in person, I can almost see a stream of thoughts cascading from their forehead and flowing through the keyboard onto their screen.

Making so many mistakes while typing is not only frustrating, but also a waste of time as a programmer. I've taken some time to learn how to be a better typist through some websites, like However, I noticed that after a while, my left hand was being used more than my right. I had become comfortable just using two fingers on my right hand because it never got enough practice.

Over the last few years, I've developed a better understanding about the basics of machine learning (ML) and I'm always on the lookout for simple and useful applications.


Create an application that can generate English-like words that is weighted according to how unskilled the user is at typing combinations of keys.


  • TensorflowJS: Machine learning library
  • React: To accept inputs and manage the site
  • Web Workers: To offload the calculations onto another thread


  1. Create a ML model that can generate English-like words
  2. Create a page that can take a keyboard input
  3. Add weights to the model output that correspond to the time between keystrokes
  4. Use Web Workers so that the computationally intensive tasks are not blocking rendering
© 2021 Bayan Bennett