Inspiration
Learning Chinese pronunciation can be deceptively difficult. Pinyin looks simple at first, but remembering the correct spelling and, more importantly, the tone for each word requires repeated active recall.
Yinpin was inspired by the idea of making pinyin practice as focused and deliberate as possible. Instead of showing a list of words and asking learners to recognise them, Yinpin gives you one word at a time and asks you to actually produce the pronunciation from memory.
What it does
Yinpin is a focused Chinese pinyin flashcard app built around active recall and spaced repetition.
Words are presented in HSK order, and the learner types the pinyin before revealing the answer. The app then shows the correct pinyin, tone, meaning, and example information.
It supports both Mandarin pinyin and Jyutping, with simplified and traditional Chinese, and uses spaced repetition to bring words back at the right time.
The goal is deliberately simple: see a Chinese word, recall its pronunciation, type it, and learn from the result.
How we built it
Yinpin is built as a native Apple app, with a locally bundled vocabulary database and a lightweight spaced-repetition system.
The vocabulary pipeline combines Chinese dictionary resources with HSK vocabulary data, allowing words to be organised by HSK level while retaining useful dictionary information such as definitions, pinyin, and examples.
The app was designed around a single-word learning loop rather than a conventional dictionary interface. This keeps the interaction fast and makes it practical for short study sessions throughout the day.
Challenges we ran into
One of the biggest challenges was getting the vocabulary data into a form that was consistent and useful for learners. Chinese dictionary sources contain different conventions for pronunciation, definitions, variants, and examples, so the data needed to be processed and normalised before it could be used reliably.
Another challenge was designing the interaction so that it tests genuine recall without becoming frustrating. The learner needs enough information to understand what they are being asked, but the answer must remain hidden until they commit to a response.
We also had to think carefully about tones. A learner can recognise a word perfectly while still being unable to produce its pronunciation, so treating pinyin as something to actively type rather than simply display became an important part of the design.
Accomplishments that we’re proud of
We’re particularly proud that Yinpin feels like a focused learning tool rather than a dictionary with flashcards added on.
The app has a very clear learning loop: recall → type → reveal → review. It supports HSK progression while still making individual words useful outside of a rigid course structure.
We’re also proud of supporting both pinyin and Jyutping, allowing the same underlying approach to work for Mandarin and Cantonese learners.
What we learned
We learned that a small, highly focused learning interaction can be more effective than continually adding features.
Building Yinpin also reinforced how important the underlying vocabulary data is. The quality of a language-learning app depends heavily on the quality, consistency, and structure of its linguistic data, not just the interface built on top of it.
Most importantly, we learned that active recall changes the experience completely. Asking a learner to produce an answer, rather than simply recognise one, makes even a very small flashcard interaction much more meaningful.
What’s next for Yinpin
The next step is to make Yinpin a more complete pronunciation-learning system while keeping its deliberately focused interface.
We’re looking at deeper HSK 3.0 coverage, better pronunciation and tone feedback, richer example sentences, and further improvements to the spaced-repetition system.
Longer term, we’d like Yinpin to bridge the gap between knowing what a Chinese word means and being able to confidently read it, pronounce it, and recall it on demand.
Built With
- pixelmator
- swiftui
- xcode
Log in or sign up for Devpost to join the conversation.