-
-
[Home Screen] This is like a game lobby screen before starting a practice session.
-
[Warm-up screen] Here, users are introduced to new kana, try to recognize their sounds, and get an overview before starting the set.
-
Kuro-nyan builds muscle here by answering rep questions within a 5-second quick time event (QTE) window.
-
Learn more about how Kana Gym works, how to optimize your workout sessions, and the benefits of watching ads and becoming a premium member.
-
[Kana Stats Screen] Get to know how far you progress.
-
[Kana Statistics Detail Screen] Displays details showing how well you answered specific Kana.
-
GIF
[Level-Up Screen] You will see this celebration screen every time you level up.
-
Premium users can practice without a timer and obtain unlimited protein.
-
No need to worry about timing; Premium users won't fail due to slow response!
-
Premium users can practice Kana of their own choice and practice weak Kana.
-
App Icon
The Inspiration
Learning hiragana and katakana takes repetition. When I first started learning Japanese, my sensei asked me to fill a page with each kana, writing the characters over and over again so I could memorize them.
I found the process discouraging. What should have been a motivating first step felt more like a punishment. I started wondering: at this stage, did I really need to learn how to write every character, or was my immediate goal simply to recognize and remember them? Could kana practice be more enjoyable—and could I actually see my progress?
That question led me to create KanaGym.
KanaGym turns kana recall into a quick workout made up of sets and reps. Each training session is called a Set, consisting of 15 Reps. Each recall question represents one Rep: learners must choose the romaji that matches a kana character within 5 seconds — a quick time event (QTE). Every successful Rep increases the kana's mastery level while simultaneously helping Kuro-nyan, a chonky cat, grow stronger.
| Home Screen | Warmup | Training |
|---|---|---|
![]() |
![]() |
![]() |
Who It's For
KanaGym is designed for people who are just starting to learn Japanese and want a playful way to practice hiragana and katakana through short daily sessions.
How KanaGym Monetizes
Learning-First Model:
- The philosophy behind KanaGym is that monetization should never lock away or disrupt the learning experience.
- The full curriculum and the daily goal of 3 Sets per day are completely free, without requiring users to watch ads or purchase a lifetime membership.
So, how does KanaGym monetize?
Rewarded Ads That Provide Meaningful Rewards:
- In KanaGym, Mastery progression is determined by one thing: how consistently you practice kana every day.
- Every correct answer counts as a successful Rep, and the more Sets you complete in a day, the more kana you can level up on that same day.
This is where rewarded ads come in.
- When your Hearts run out and Kuro-nyan gets KO'd in the middle of a Set, a short rewarded ad can bring him back to life. All the Reps you've already completed are preserved, and the kana you struggled with can still be practiced again within the same session.
- The same applies when your daily Protein runs out. Watching a short rewarded ad provides additional Protein, letting you continue doing extra Sets without having to wait until the next day.
This means more Sets, more Reps, and a faster path toward Mastery—while still keeping the core learning experience completely free.
| Revive | Refill Protein |
|---|---|
![]() |
![]() |
KanaGym Lifetime membership (one-time purchase):
The Lifetime membership is deliberately pay-to-win in the gym sense: it buys progression speed and convenience.
- Members get unlimited Protein, allowing them to complete additional Sets whenever they want without waiting.
- 5 Hearts per Set instead of 3, giving them more room for mistakes.
- A timer-free training mode, so members never fail a Rep due to a failed QTE.
- Custom workouts for practicing their weakest kana as often as they want.
All of this comes without ads.

It's a one-time purchase, priced around the cost of a latte, with lifetime access to the membership benefits.
What Makes It Different
KanaGym connects three things that are often separate in kana-learning apps:
- Fast recall practice
- A visible sense of progression
- A character that grows alongside the learner's Mastery
Its short Sets are designed to make daily training feel approachable, while spaced repetition brings kana back into your training before you forget them, helping you reinforce each character over time.
How I Built It
KanaGym is built with React Native, Expo, and TypeScript.
- It uses local persistence to store learning progress.
- It integrates RevenueCat for lifetime premium purchases.
- Rewarded ads are served through AdMob and synced with RevenueCat.
- Rewards are granted only after the ad provider confirms that the user has successfully earned them.
Challenges I Ran Into
1. Speech-Based Rep Answers Didn't Work
Initially, KanaGym's core game mechanic was designed around voice input as the way users would answer each Rep.
However, when I tested it, the results were extremely poor. In my experiments, around 99% of correctly pronounced answers were not detected as correct.
The main problem was that the expo-speech-recognition library is optimized for recognizing words and sentences rather than isolated kana sounds.
For example, if the expected kana is し and the user correctly pronounces "shi", the speech recognition system may return several different transcriptions:
| Expected Kana | User Pronunciation | Possible Speech Recognition Results | Should Be Accepted? |
|---|---|---|---|
| し | shi |
し / シ / 市 / 詩 / 死 / 四 | Yes |
All of these results should be considered correct because they represent the same intended pronunciation: /shi/.
I initially tried to validate the pronunciation represented by the recognition result rather than requiring an exact transcript match. This improved the results: 7 out of 12 kana were correctly detected.
However, the system was still not reliable enough for a core game mechanic because whether an answer was marked correct depended not only on what the user actually said, but also on whether the speech-recognition system successfully interpreted it.
As a result, I decided to temporarily drop the speech-based mechanic.
2. Character Design and Animation
Since Kuro-nyan is the mascot of KanaGym, I wanted the character to feel unique and not look like generic AI-generated art.
- Initially, I experimented with Nano Banana, but the results looked too "AI-generated" and lacked a distinctive visual identity.
- I eventually used Midjourney to create a character design that felt more unique.
- Midjourney could also generate looping animations that worked well for the character. However, the generated animations were delivered as video.
- Converting the video directly to GIF solved one problem, but introduced another: the resulting GIF was only 320×320 px, making it noticeably blurry.
- I eventually solved this by extracting every frame from the animation, upscaling each frame by 4× using Real-ESRGAN with the
realesr-animevideov3-x4model—an open-source model designed for anime-style illustrations while maintaining consistency across animation frames—and then reassembling the frames into an animated WebP at 1280×1280 px.
| Chonky | Getting Fit | Athletic | Muscular | Buff Nyan |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
What's Next for KanaGym
Cloud-Based Save Progress
- Currently, all user progress is stored locally. For an MVP, this is sufficient.
- However, if a user uninstalls the app, all of their training progress is currently lost.
- Going forward, progress will be stored in the cloud so it can be synchronized when users reinstall the app or switch devices.
Build Kana/Syllabogram-Based ASR
- Building a specialized ASR system designed specifically to recognize kana and syllabogram sounds could solve the speech-input problem I encountered earlier.
- This would require deeper research into speech recognition, machine learning, and potentially LLM-related technologies, and it is an area I am very interested in exploring in the future.
Rive-Based Character Animation
- Although the current character animations are already good enough for the MVP, I believe Rive-based animation would be worth pursuing in the future if I want Kuro-nyan to become more interactive and responsive.
App Widget and Push Notification
- To keep users motivated to maintain their streaks, I plan to add app widgets and push notifications so they stay on track.
What I Learned
Although I have been building applications professionally for the past five years, this was the first time I built an app entirely for myself rather than for the needs of a company.
One of the biggest things I learned from this project wasn't just a new set of technical skills. Building something of my own reignited a spark in me that I hadn't felt in a long time—a feeling I remember having when I was in college.
Competing, turning ideas into something real, pushing through self-doubt, and executing everything with full ownership and agency turned out to be incredibly fulfilling.
KanaGym reminded me that building something I truly care about is not just a technical challenge. It's something that can bring back the excitement and sense of purpose that made me love building things in the first place.
Entered for Catvertising and RevenueCat Design Award.
KanaGym Official Site: https://kanagym.app














Log in or sign up for Devpost to join the conversation.