I started working on kyoubenkyou in 2022 because I wanted to replace my Anki kanji deck with my own tool tailored to how I like to study.

The name is 今日勉強, where 今日 (kyou) means “today”, and 勉強 (benkyou) means “study”. I really liked that it’s a kind of syllabic palindrome.

To start, I figured that I could write some smaller tools that would be useful for studying Japanese in general, and keep adding new tools until I have a compelling suite of study tools.

At the moment, I’ve launched a hiragana/katakana quizzer and a number pronunciation quizzer.

A screenshot of the kana quizzer utility

The hiragana and katakana quizzer

You can take a look at

I put a lot of thought and effort into how to quiz items in a way that felt good, and I’m still not certain it feels truly great. Pseudo-random or random never quite feels right. For example, you never want to see the same element appear twice in a row during quizzing. So, there’s 3 strategies:

  • LeastQuizzed: Shows you the element that has appeared least often globally. This helps to expose you to new elements instead of seeing a lot of repeats.
  • LeastRecentlyAccurate: Shows you the item that you’ve recently struggled with, using a rolling average for accuracy. If we didn’t have this, we wouldn’t reinforce things we’re struggling with at the moment.
  • LeastGloballyAccurate: Shows you the item with the worst lifetime accuracy, disregarding recency. This is a measure to make sure really old items aren’t poorly remembered and never quizzed.

Of these 3 strategies, I pick a certain frequency of how often we’ll use each strategy to sample the next quiz item. All data is stored in localStorage allowing the app to be a simple JS+HTML app.

I found I was fairly good at identification with default fonts at large sizes, but sometimes struggled more at very small font sizes or with hand-written fonts. So, the app allows you to choose whether you’d like to study more typographic variations of the characters. I noticed that kanji can look quite different at different font sizes, so wanted to incorporate this aspect into the quizzers.

kyoubenkyou is a next.js website hosted with Vercel, and I authored every component of it using a Storybook-driven development methodology.

The Future

My longer term goals include:

  • Soon ✅: a number quizzer. Reading and pronouncing numbers in Japanese is a bit different than in English
  • Write my own web dictionary using publicly available datasets
  • Choose your own Kanji adventure. Some kanji built upon others. Once you learn a certain base, you can learn more that use that base kanji as a sub-component. Designing a directed tree of kanji could be interesting and a neat way to explore the space.
  • Study periodically throughout the day on your Apple Watch
  • Study from your Mac screensaver, showing you words or kanji you’ve studied recently as a refresher, or previewing new words you’ll learn soon