← All cases

Case · own product · EdTech

From the Korean alphabet to Korean as it’s really said.

Korean is spelled one way and spoken another: 감사합니다 is said 감사함니다. Hangul Hero teaches the 40 letters, then X-rays 240 everyday phrases so you see every sound change. On Android and, after a native port written in five days, on iPhone.

Hangul HeroAndroid · iPhone · free, optional Premium · works offline

Six screens from the store listing

  • Hangul Hero home: Continue Unit 3 Lesson 2, Consonants, Reading Rules, Vowels, Words to review and Phrases
    Read Korean in days A clear path from your first letter
  • Phrase X-Ray for 괜찮아, Are you okay: written blocks 괜 찮 아 and sounds 괜 차 나 with the rule ㅎ goes silent before a vowel
    Speak real Korean 240 phrases, every sound change explained
  • Reading Direction rule: Korean reads left to right, one block at a time, with 김 drawn as three numbered parts
    See how Hangul works Visual rules, block by block
  • Consonants screen: 14 basic, 5 complex, 19 total, with letter cards from ㄱ to ㅌ
    All 40 letters with audio Basic, complex and double
  • Word details for 책, book: a photo, pronunciation chaek, listen button and Learn this word
    Learn words you’ll use Pictures, audio and smart review
  • Practice: Alphabet Trainer Hub with today’s goal 120 of 400 XP, a 7-day streak and Words to review
    A few minutes a day Daily goals, streaks and badges
10K+
downloads on Google Play
240
phrases, every sound change explained
40
letters, strokes generated from the font
5 days
to write the native iOS port
2,500+
automated tests across both apps
My role
Product, Korean content, the pronunciation engine, design, Android, iOS, the audio pipeline, ASO and the companion site.
Platforms
Android (since 2025), iPhone (November 2026), web: hanguledu.com.
Stack
Kotlin, Jetpack Compose, Room; Swift 6, SwiftUI, GRDB; RevenueCat, Firebase Analytics, Google Cloud TTS.
Business model
Free with daily limits; rewarded ads for extra cards, no interstitials. Premium $4.99/month or $19.99/year.
Try it · Phrase X-Ray

Guess how Koreans actually say it

Three everyday phrases. Pick the pronunciation you’d expect, then see the X-ray: the written blocks, the spoken blocks and the rule that turns one into the other.

If you read letter by letter, you’ll pick the spelling. That gap is exactly what the app is built to close.

Phrase X-Ray 1 of 3
Casual — friends only

괜찮아

Are you okay? / I’m okay

How is it said?

The alphabet

Hangul is a system, so teach the system

Hangul was designed: letters stack into square blocks, one block per syllable, in a fixed order. Learn that order and you can sound out any word in days. The app teaches the system first, then the letters inside it.

Rules you can seeReading direction, the order of letters in a block and where vowels sit, built from nine kinds of interactive blocks instead of paragraphs.
A 9-unit path20 lessons, from vertical vowels to compound ones. Every new letter goes meet → draw → example, then four kinds of practice questions.
Stroke order from the fontAll 40 letters animate and can be traced. The strokes are derived from the font’s own skeleton, not drawn by hand.
Reading Direction rule with 김 drawn stroke by stroke
Phrase X-Ray for 괜찮아 with written and spoken blocks
The phrases

Then real Korean, the way it’s spoken

Reading letters isn’t speaking. Phrase X-Ray takes what Koreans actually say in a café or a K-drama and shows, block by block, where the sound moves away from the spelling.

240 phrases in 8 situationsK-drama hits, food and café, getting around, shopping, feelings, dating, health, work — each labelled polite, casual or formal.
An engine, not a lookup tableNine rules — liaison, nasalization, aspiration, palatalization and five more — compute how every phrase is said and why. 15 phrases carry a hand-set override where grammar beats the rules.
Audio that ships with the app678 clips, all bundled. Phrases use a Chirp3 HD voice at 0.9 speed; single letters use Neural2, because Chirp3 returns silence for one syllable.

How the pieces fit

Two native apps and a website, no backend. What they share is the pronunciation engine and its golden test set, so a phrase is said the same way everywhere.

Search traffic
hanguledu.com
Astro · alphabet chart, block builder, 240 phrases
Android
Kotlin + Compose
Room · RevenueCat · AdMob rewarded
iOS
Swift 6 + SwiftUI
GRDB · RevenueCat · AdMob rewarded
Shared
One pronunciation engine
Kotlin, Swift and TypeScript, one golden test set
Consonants: 14 basic and 5 complex
Word details for 책, book
Practice hub with daily goal and streak

Six decisions behind the app

  1. 01Teach how it sounds, not only how it’s spelled Read letter by letter, 감사합니다 comes out as “gam-sa-hap-ni-da”. Nobody says that. Phrase X-Ray shows the written blocks, the spoken ones and the rule in between.
  2. 02An engine checked against golden pairs The first version worked syllable by syllable and failed 52 of 147 golden pairs. The rewrite splits blocks into letters, applies rules across the whole phrase, then romanizes. Order matters: 독립 → 동닙 needs ㄹ→ㄴ before ㄱ→ㅇ.
  3. 03Port the behaviour, not the code Ten analysis documents described what the Android app does; a plan of about 120 tasks in ten phases rebuilt it in SwiftUI, reusing modules from my Hebrew iOS app. 140 commits in five days; on the App Store since 7 November 2026.
  4. 04Everything ships in the app Content moved from Firestore into bundled JSON, and all audio is in the package. No server, no loading spinners, works on a plane.
  5. 05A paywall after value, rewarded ads only The launch paywall now waits for the third launch and a finished first lesson, at most once a day (it used to show up to three times a day from the second launch). Ads are opt-in rewards, never interstitials.
  6. 06A website made of tools hanguledu.com runs the same engine, ported line by line to TypeScript and tested against the app’s golden set, so the site’s phrase pages and the app never disagree.

Engineering details learners never see

An audit before new featuresA 61-finding audit of the Android app (8 of them P0). Unit tests went from zero to 766.
Reminders that never arrivedThe audit found the notification permission was never requested, so Android 13+ users got no reminders at all.
Streaks vs. the clockStreaks reset twice a year at the daylight-saving change. A date bug that no ordinary test run would ever hit.
Strokes that stay inside the letterThe stroke generator thins each glyph to a skeleton and refuses to write the file if any stroke leaves the glyph or misses part of it. A check mode proves the shipped file matches.
An iOS codebase with guard railsSwift 6 strict concurrency, three packages with enforced boundaries, about 1,800 tests, and ten lint scripts that CI runs exactly as I run them locally.
Unicode, done carefullyHangul syllables are composed and decomposed by formula. The Swift port moved from UTF-16 indexes to Unicode scalars, so no block is ever split in half.
The listing

One picture, the whole promise

The store banner shows the app’s path in one glance: the alphabet on the left, a real phrase X-rayed on the right. Every screenshot leads with what you’ll be able to do.

Not done yet

Honest gaps

  • Monetization is the open problem: subscription purchases are still rare. Paywall timing is the current experiment.
  • The interface is English only on both platforms.
  • The engine doesn’t yet handle ㄴ insertion (꽃잎), ㄼ exceptions (밟다) or words with two accepted readings (맛있다). Hand-set overrides cover the phrases that need them.
  • The Android audit still has 19 of 61 findings open.
What this means for your project

An app on both stores without doubling the budget

A second native platform in days, not months: document the behaviour, plan the port, reuse proven modules, and test the shared logic against one golden set.

Read a few blocks, then let’s talk.

Free on Google Play and the App Store. Building a learning app, or need it on the other platform too?