5 Reasons Why I Vibe Coded a Mandarin Learning Tool

As an American adopted from China, I have always wanted to learn Mandarin to connect more with my culture. After enrolling in a local beginner Mandarin course, I decided I wanted to use flashcards to supplement my learning. I tested out a few flashcard apps, but wasn’t fully satisfied with any of them, so I decided to use Claude to vibe code my own flashcard app / general learning tool tailored specifically for Mandarin. In this post, I’ll explain why I decided to make my own software.

IMPORTANT AI CAVEAT: There is obviously a lot of controversy surrounding pairing AI with language learning. The tool I made is designed as a supplement for my learning and not a replacement for real, human instructors. The content and exercises in the app come from the course material taught by my Mandarin teachers.

Reason 1: An All-In-One Platform

While the flashcard apps I initially studied with were fine, I wanted a tool that wasn’t just a flashcard app. For example, I built an exercise in the app that generates a random date so I can practice saying the day, month, and year. I also built a similar exercise that generates a random time of day and a random temperature. These are exercises that wouldn’t work as well as flashcards. While I probably could’ve found these same exercises somewhere on the internet, I liked the idea of having them all in one place.

Reason 2: Adding Features is Blazingly Fast

Within a few hours of prompting Claude, I already had a basic flashcard app that supported creating flashcards, creating decks, studying cards, starring difficult terms, etc. With existing tools, if a feature I wanted didn’t exist, there wasn’t anything I could do about it. By building my own software, adding new features was quick and painless.
For example, one feature I really liked was the ability to add tones quickly by using numbers. To add the second tone (´), I would usually need to hit option+e and then type the letter (e.g. á). While this is only a two click process, it got cumbersome after a while, so I added a feature where you can just type the letter and then the tone number which will automatically add the tone to the proceeding letter:

Tone Input Result
First tone a1 ā
Second tone a2 á
Third tone a3 ǎ
Fourth tone a4 à

Reason 3: Free to Use

While tools like Quizlet are free to use, the site is riddled with ads with certain features requiring a subscription. With Claude, I was able to create a quizlet-like interface in only a couple hours, completely ad free! You may be wondering why I didn’t go with Anki, a popular, free, open-source flashcard app. This brings me to my next reason…

Reason 4: An App Tailored to Me

I used Anki for about a week before deciding it wasn’t for me. While Anki is an extremely powerful flashcard tool (the spaced-repetition was really neat!), the UI was a bit overwhelming for me. And while this is a huge nit, I also wasn’t a fan of the aesthetics of the PyQT interface. By creating my own tool, I got to design the UI and layout based on my own preferences. This also eliminated the learning curve that Anki presented since I wasn’t as familiar with it.

Reason 5: It Motivated Me to Study

I put off creating flashcards for Mandarin for a long time because I didn’t want to go through the hassle of testing flashcard apps. Creating this tool not only remotivated to study, but was also a great exercise for my professional development as a software developer.

Conclusion

With AI getting a bad rap in the language learning community, I hope that this post highlights an example of a potentially positive use for AI in this space. Lastly, I want to reemphasize that the in-person mandarin class I’ve been taking over the past few months has been pivotal in my learning journey. While this tool has greatly supplemented my studying, I wouldn’t have learned nearly as much without the carefully-crafted curriculums made by my mandarin teachers.
For anyone interested, here is the GitHub repository link for the tool: https://github.com/georgia-martinez/learn-mandarin

Conversation

Join the conversation

Your email address will not be published. Required fields are marked *