Skip to content
Kyle Nakamura
All projects

Learning Korean,
one experiment at a time.

I wanted to understand how Hangul works and make time to practise it in short sessions. That became the starting point for Learning Korean: an app where you try something, get feedback, and return to it later through spaced repetition.

SvelteKit · TypeScript Try the first lab Source
The live Korean-learning lab: a mouth diagram and a prompt to identify where the m sound is made.
The first lab starts with a sound and a mouth diagram. The learner makes an attempt before seeing an explanation.

A lesson starts with
something to do.

The first lab asks you to make a sound and locate it on a mouth diagram. An explanation follows your answer. Later steps ask you to change a letter, build a syllable, or read unfamiliar text.

This sequence reflects a requirement in the project brief: lessons should be interactive, with explanations arriving as feedback. Each explanation has an immediate connection to something the learner has just tried.

Make the sound mmm → identify where your mouth closes → discover the letter ㅁ.

The same idea applies to building syllables. Korean packs each one into a square block, and the vowel decides where the consonant goes.

  • ㅂ + ㅏ → 바 (ba). ㅏ is a tall vowel, so the consonant sits beside it.
  • ㅅ + ㅗ → 소 (so). ㅗ is a wide vowel, so the consonant sits above it.

Keep the lesson separate
from the practice schedule.

A lab introduces a pattern. The review deck brings it back over time. Completing labs unlocks material for practice, so lesson progress and retention have separate jobs.

The scheduler uses correctness and response time to assign a grade. A slow correct answer receives a different grade from a fast one. A newly introduced card cannot earn the easiest grade on its first appearance.

The scheduling function then calculates the next due time from that grade and the card’s history. The visible interaction is small, while the state underneath tracks what has been introduced, attempted, and scheduled for later.

Take a card you have reviewed three times without a lapse. Answer it correctly and it comes back at an interval that depends on how quickly you answered:

  • Correct in 2 seconds: graded Easy, due again in 34.5 days.
  • Correct in 10 seconds: graded Hard, due again in 12 days.
Read the scheduling code

Let practice begin
without an account.

Signed-out use stores progress in the browser. The project also supports optional accounts and cross-device sync. The core learning experience can run as a static site; account and sync features use a server.

That split keeps the initial learning flow simple. It also creates an explicit tradeoff: browser-local progress belongs to that browser unless the learner uses the available transfer or sync features.

Where it stands.

The public project contains interactive Hangul labs, a spaced-repetition review deck, browser-local progress, and optional account infrastructure. You can explore the first lab directly.

The first lab is open to try without an account. Start with the mouth diagram, then work through the letter-building exercises.

Explore the lab