How I Became 1st in Japanese Elementary Class

Feb 28, 2026 · 10 min read

JapaneseLanguage LearningSM-2AIWeb ScrapingObsidian

I joined an elementary Japanese class in April 2025 as a complete beginner. 4 months later, I finished 1st in my cohort. This is the exact system I built — the scraper, the spaced repetition algorithm, the AI workflow, and the Obsidian vault that made it work.

The Problem with Generic Apps

Apps like Duolingo and Anki work, but they're generic. You study what the app gives you. I wanted to study what I encountered — kanji from articles I tried to read, words I heard in conversation, sentences I failed to understand.

So I built my own learning pipeline.

Step 1: Scrape All the Kanji Data

I wrote a Node.js scraper using Puppeteer and Cheerio to grab kanji data from online resources.

This fed into a JSON dataset I could query programmatically and import into my review system.

Step 2: SM-2 Spaced Repetition

Instead of using Anki, I implemented the SM-2 algorithm from scratch. It's surprisingly simple.

  • Q = 5: Perfect recall → interval grows
  • Q = 3: Struggled but got it → interval barely grows
  • Q ≤ 2: Forgot → interval resets to 1 day

I stored each card's state (interval, ease factor, next review date) in a local JSON file synced across devices. Every morning, the system surfaces cards due for review. I grade my recall, SM-2 recalculates, and the next interval is set.

The key insight: building it myself meant I could customize the input. Instead of pre-made decks, I fed in kanji from my scraper, vocabulary from my AI tutor sessions, and sentences from native content I actually wanted to read.

Step 3: AI as a Language Tutor

I used AI prompts to turn LLMs into personalized Japanese tutors. The setup was simple:

This gave me infinite practice material tailored to my level. When I struggled with a grammar point, I'd ask for 10 more examples using only words I knew. When I learned 5 new kanji, I'd ask for a short paragraph using all of them.

Step 4: The Obsidian Vault

Everything lived in an Obsidian vault with a kanji folder, vocabulary notes, grammar references, and daily quizzes.

The vault structure mattered. Every kanji note linked to vocabulary that used it. Every grammar note linked to example sentences. The graph view became a map of what I knew and what I didn't.

Step 5: Bilingual Office Conversations

I started writing bilingual conversation scripts based on real scenarios — debugging a bug, attending a standup, asking for code review. Each line had Japanese text, reading, and English translation.

Practicing these out loud built my speaking confidence faster than any textbook exercise. They were conversations I'd actually have at work.

The Result

/novanda-ahsan-certificate.png

One year, zero days skipped. The system worked because it removed every excuse:

  • No "I don't know what to study" — the scraper and AI generated material
  • No "I forgot to review" — SM-2 scheduled everything
  • No "this isn't useful" — everything I studied came from real content I wanted to understand

I finished 1st in my class. The foundation is solid — I can introduce myself, ask basic questions, and read simple sentences without reaching for a dictionary. Still a long road ahead, but the system is proven.

If you're learning a language as a developer, don't use generic tools. Build your own pipeline. It's the difference between studying and actually learning.