@syllst/ko 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/index.d.ts +80 -0
  2. package/dist/index.js +30 -0
  3. package/dist/shared.js +26 -0
  4. package/dist/syllabi/alphabet/index.d.ts +7 -0
  5. package/dist/syllabi/alphabet/index.js +47 -0
  6. package/dist/syllabi/alphabet/lessons/lesson-01.mdx.js +154 -0
  7. package/dist/syllabi/alphabet/lessons/lesson-02.mdx.js +169 -0
  8. package/dist/syllabi/alphabet/lessons/lesson-03.mdx.js +164 -0
  9. package/dist/syllabi/alphabet/lessons/lesson-04.mdx.js +154 -0
  10. package/dist/syllabi/alphabet/lessons/lesson-05.mdx.js +147 -0
  11. package/dist/syllabi/alphabet/lessons/lesson-06.mdx.js +169 -0
  12. package/dist/syllabi/alphabet/lessons/lesson-07.mdx.js +147 -0
  13. package/dist/syllabi/alphabet/lessons/lesson-08.mdx.js +172 -0
  14. package/dist/syllabi/alphabet/lessons/lesson-09.mdx.js +159 -0
  15. package/dist/syllabi/alphabet/lessons/lesson-10.mdx.js +175 -0
  16. package/dist/syllabi/essentials/index.d.ts +7 -0
  17. package/dist/syllabi/essentials/index.js +39 -0
  18. package/dist/syllabi/essentials/lessons/lesson-01.mdx.js +187 -0
  19. package/dist/syllabi/essentials/lessons/lesson-02.mdx.js +206 -0
  20. package/dist/syllabi/essentials/lessons/lesson-03.mdx.js +221 -0
  21. package/dist/syllabi/essentials/lessons/lesson-04.mdx.js +190 -0
  22. package/dist/syllabi/essentials/lessons/lesson-05.mdx.js +211 -0
  23. package/dist/syllabi/essentials/lessons/lesson-06.mdx.js +224 -0
  24. package/dist/syllabi/numbers/index.d.ts +7 -0
  25. package/dist/syllabi/numbers/index.js +37 -0
  26. package/dist/syllabi/numbers/lessons/lesson-01.mdx.js +175 -0
  27. package/dist/syllabi/numbers/lessons/lesson-02.mdx.js +200 -0
  28. package/dist/syllabi/numbers/lessons/lesson-03.mdx.js +193 -0
  29. package/dist/syllabi/numbers/lessons/lesson-04.mdx.js +166 -0
  30. package/dist/syllabi/numbers/lessons/lesson-05.mdx.js +237 -0
  31. package/package.json +72 -0
  32. package/src/syllabi/alphabet/lessons/lesson-01.mdx +150 -0
  33. package/src/syllabi/alphabet/lessons/lesson-02.mdx +165 -0
  34. package/src/syllabi/alphabet/lessons/lesson-03.mdx +160 -0
  35. package/src/syllabi/alphabet/lessons/lesson-04.mdx +150 -0
  36. package/src/syllabi/alphabet/lessons/lesson-05.mdx +143 -0
  37. package/src/syllabi/alphabet/lessons/lesson-06.mdx +165 -0
  38. package/src/syllabi/alphabet/lessons/lesson-07.mdx +143 -0
  39. package/src/syllabi/alphabet/lessons/lesson-08.mdx +168 -0
  40. package/src/syllabi/alphabet/lessons/lesson-09.mdx +155 -0
  41. package/src/syllabi/alphabet/lessons/lesson-10.mdx +171 -0
  42. package/src/syllabi/essentials/lessons/lesson-01.mdx +183 -0
  43. package/src/syllabi/essentials/lessons/lesson-02.mdx +202 -0
  44. package/src/syllabi/essentials/lessons/lesson-03.mdx +217 -0
  45. package/src/syllabi/essentials/lessons/lesson-04.mdx +186 -0
  46. package/src/syllabi/essentials/lessons/lesson-05.mdx +207 -0
  47. package/src/syllabi/essentials/lessons/lesson-06.mdx +220 -0
  48. package/src/syllabi/numbers/lessons/lesson-01.mdx +171 -0
  49. package/src/syllabi/numbers/lessons/lesson-02.mdx +196 -0
  50. package/src/syllabi/numbers/lessons/lesson-03.mdx +189 -0
  51. package/src/syllabi/numbers/lessons/lesson-04.mdx +162 -0
  52. package/src/syllabi/numbers/lessons/lesson-05.mdx +233 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Shared types and utilities for SYLLST content
3
+ * (Inlined from @syllst/content-shared to make package self-contained)
4
+ */
5
+ /**
6
+ * CEFR language proficiency levels
7
+ */
8
+ declare type CEFRLevel = 'A1' | 'A2' | 'B1' | 'B2' | 'C1' | 'C2';
9
+
10
+ export declare const config: SyllabusConfig;
11
+
12
+ /**
13
+ * Content loader interface
14
+ */
15
+ declare interface ContentLoader {
16
+ /** Syllabus configuration */
17
+ config: SyllabusConfig;
18
+ /** Load a single lesson by number */
19
+ loadLesson(lessonNumber: number): Promise<LoadedLesson>;
20
+ /** Load all lessons */
21
+ loadAllLessons(): Promise<LoadedLesson[]>;
22
+ /** Get list of available lesson numbers */
23
+ getAvailableLessons(): number[];
24
+ }
25
+
26
+ /**
27
+ * Difficulty levels
28
+ */
29
+ declare type Difficulty = 'beginner' | 'intermediate' | 'advanced';
30
+
31
+ export declare const getAvailableLessons: () => number[];
32
+
33
+ export declare const loadAllLessons: () => Promise<LoadedLesson[]>;
34
+
35
+ /**
36
+ * Result of loading a lesson
37
+ */
38
+ declare interface LoadedLesson {
39
+ /** Lesson number (1-indexed) */
40
+ number: number;
41
+ /** Raw MDX content */
42
+ rawContent: string;
43
+ }
44
+
45
+ export declare const loader: ContentLoader;
46
+
47
+ export declare const loadLesson: (lessonNumber: number) => Promise<LoadedLesson>;
48
+
49
+ /**
50
+ * Configuration for a syllabus content package
51
+ */
52
+ declare interface SyllabusConfig {
53
+ /** Unique syllabus ID (e.g., "ko-alphabet") */
54
+ id: string;
55
+ /** Display title */
56
+ title: string;
57
+ /** Description */
58
+ description: string;
59
+ /** Language code (ISO 639-1) */
60
+ language: string;
61
+ /** Locale code (e.g., "ko-KR") */
62
+ locale: string;
63
+ /** Number of lessons */
64
+ lessonCount: number;
65
+ /** Difficulty level */
66
+ difficulty: Difficulty;
67
+ /** CEFR level */
68
+ cefrLevel: CEFRLevel;
69
+ /** Icon for display */
70
+ icon?: SyllabusIcon;
71
+ /** Package version */
72
+ version: string;
73
+ }
74
+
75
+ /**
76
+ * Icon types for syllabi
77
+ */
78
+ declare type SyllabusIcon = 'alphabet' | 'dialogue' | 'vocabulary' | 'grammar' | 'reading' | 'numbers' | 'food' | 'travel';
79
+
80
+ export { }
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ import { config as s } from "./syllabi/alphabet/index.js";
2
+ import * as t from "./syllabi/alphabet/index.js";
3
+ import { loader as x } from "./syllabi/alphabet/index.js";
4
+ import { config as e } from "./syllabi/numbers/index.js";
5
+ import * as l from "./syllabi/numbers/index.js";
6
+ import { loader as u } from "./syllabi/numbers/index.js";
7
+ import { config as r } from "./syllabi/essentials/index.js";
8
+ import * as p from "./syllabi/essentials/index.js";
9
+ import { loader as C } from "./syllabi/essentials/index.js";
10
+ const i = [
11
+ s,
12
+ e,
13
+ r
14
+ ];
15
+ function d(o) {
16
+ return i.find((a) => a.id === o);
17
+ }
18
+ export {
19
+ i as allConfigs,
20
+ t as alphabet,
21
+ s as alphabetConfig,
22
+ x as alphabetLoader,
23
+ p as essentials,
24
+ r as essentialsConfig,
25
+ C as essentialsLoader,
26
+ d as getConfigById,
27
+ l as numbers,
28
+ e as numbersConfig,
29
+ u as numbersLoader
30
+ };
package/dist/shared.js ADDED
@@ -0,0 +1,26 @@
1
+ function s(o, e) {
2
+ return {
3
+ config: o,
4
+ async loadLesson(n) {
5
+ if (n < 1 || n > o.lessonCount)
6
+ throw new Error(`Lesson ${n} not found. Valid range: 1-${o.lessonCount}`);
7
+ const t = await e(n);
8
+ return {
9
+ number: n,
10
+ rawContent: t.default
11
+ };
12
+ },
13
+ async loadAllLessons() {
14
+ const n = [];
15
+ for (let t = 1; t <= o.lessonCount; t++)
16
+ n.push(await this.loadLesson(t));
17
+ return n;
18
+ },
19
+ getAvailableLessons() {
20
+ return Array.from({ length: o.lessonCount }, (n, t) => t + 1);
21
+ }
22
+ };
23
+ }
24
+ export {
25
+ s as createContentLoader
26
+ };
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,47 @@
1
+ import { createContentLoader as n } from "../../shared.js";
2
+ const s = {
3
+ id: "ko-alphabet",
4
+ title: "한글 (Hangul)",
5
+ description: "Learn the Korean Hangul script — basic vowels, consonants, double consonants, and compound vowels across 10 lessons",
6
+ language: "ko",
7
+ locale: "ko-KR",
8
+ lessonCount: 10,
9
+ difficulty: "beginner",
10
+ cefrLevel: "A1",
11
+ icon: "alphabet",
12
+ version: "0.1.0"
13
+ };
14
+ async function t(e) {
15
+ switch (e) {
16
+ case 1:
17
+ return import("./lessons/lesson-01.mdx.js");
18
+ case 2:
19
+ return import("./lessons/lesson-02.mdx.js");
20
+ case 3:
21
+ return import("./lessons/lesson-03.mdx.js");
22
+ case 4:
23
+ return import("./lessons/lesson-04.mdx.js");
24
+ case 5:
25
+ return import("./lessons/lesson-05.mdx.js");
26
+ case 6:
27
+ return import("./lessons/lesson-06.mdx.js");
28
+ case 7:
29
+ return import("./lessons/lesson-07.mdx.js");
30
+ case 8:
31
+ return import("./lessons/lesson-08.mdx.js");
32
+ case 9:
33
+ return import("./lessons/lesson-09.mdx.js");
34
+ case 10:
35
+ return import("./lessons/lesson-10.mdx.js");
36
+ default:
37
+ throw new Error(`Lesson ${e} not found`);
38
+ }
39
+ }
40
+ const o = n(s, t), a = o.loadLesson.bind(o), c = o.loadAllLessons.bind(o), i = o.getAvailableLessons.bind(o);
41
+ export {
42
+ s as config,
43
+ i as getAvailableLessons,
44
+ c as loadAllLessons,
45
+ a as loadLesson,
46
+ o as loader
47
+ };
@@ -0,0 +1,154 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: korean-hangul-lesson-01
4
+ title: "Lesson 1 — Basic Vowels I (ㅏ, ㅑ, ㅓ, ㅕ)"
5
+ description: "Learn the first four Korean basic vowels: a, ya, eo, yeo"
6
+ order: 1
7
+ parentId: ko-alphabet
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - vowels
12
+ - basic-characters
13
+ metadata:
14
+ estimatedTime: 20
15
+ prerequisites: []
16
+ learningObjectives:
17
+ - id: obj-ko-alph-01-recognize
18
+ description: "Recognize the vowels ㅏ, ㅑ, ㅓ, ㅕ"
19
+ skill: character-recognition
20
+ references: [a, ya, eo, yeo]
21
+ - id: obj-ko-alph-01-sounds
22
+ description: "Map each vowel to its sound"
23
+ skill: character-sound-mapping
24
+ references: [a, ya, eo, yeo]
25
+ ---
26
+
27
+ # Lesson 1 — Basic Vowels I (ㅏ, ㅑ, ㅓ, ㅕ)
28
+
29
+ ## Introduction
30
+
31
+ Welcome to Hangul, the Korean writing system. Hangul was created in 1443 by King Sejong the Great to promote literacy. Unlike Chinese characters or Japanese kanji, Hangul is a phonemic alphabet — each symbol represents a sound, not a word or idea.
32
+
33
+ Hangul is made up of two types of letters: **자음 (jaeum)** — consonants — and **모음 (moeum)** — vowels. These letters are combined into syllable blocks to write Korean words.
34
+
35
+ In this first lesson, you will learn four of the ten basic vowels.
36
+
37
+ ## What Is a Vowel in Hangul?
38
+
39
+ Korean vowels are written as vertical or horizontal strokes. They cannot stand alone as syllables — they are always combined with a consonant. The silent consonant **ㅇ (ieung)** is used as a placeholder when a vowel starts a syllable.
40
+
41
+ For example: **아** = ㅇ (silent) + ㅏ (a sound) = "a"
42
+
43
+ ## Characters
44
+
45
+ :::character-set{id="ko-vowels-1" title="Basic Vowels I"}
46
+
47
+ ::character{id="a" canonicalRef="a" char="ㅏ" name="ㅏ 아 (a)" charType="vowel" data:romanization="a" data:ipa="a"}
48
+
49
+ ::character{id="ya" canonicalRef="ya" char="ㅑ" name="ㅑ 야 (ya)" charType="vowel" data:romanization="ya" data:ipa="ja"}
50
+
51
+ ::character{id="eo" canonicalRef="eo" char="ㅓ" name="ㅓ 어 (eo)" charType="vowel" data:romanization="eo" data:ipa="ʌ"}
52
+
53
+ ::character{id="yeo" canonicalRef="yeo" char="ㅕ" name="ㅕ 여 (yeo)" charType="vowel" data:romanization="yeo" data:ipa="jʌ"}
54
+
55
+ :::
56
+
57
+ ## Pronunciation Guide
58
+
59
+ | Character | Romanization | Sound | English Approximation |
60
+ |-----------|-------------|-------|----------------------|
61
+ | ㅏ | a | /a/ | "a" in "father" |
62
+ | ㅑ | ya | /ja/ | "ya" in "yard" |
63
+ | ㅓ | eo | /ʌ/ | "u" in "but" (but lower) |
64
+ | ㅕ | yeo | /jʌ/ | "yuh" — like "ya" but with eo sound |
65
+
66
+ **Note on ㅓ (eo):** This vowel is often difficult for English speakers. It sounds like the "u" in "but" but with your mouth more open. Try keeping your lips relaxed and slightly open.
67
+
68
+ ## Shape Pattern
69
+
70
+ Notice the visual pattern:
71
+
72
+ - **ㅏ** — a vertical line with a short horizontal stroke pointing right
73
+ - **ㅑ** — same as ㅏ but with **two** short strokes (the "y" prefix doubles the stroke)
74
+ - **ㅓ** — a vertical line with a short horizontal stroke pointing **left**
75
+ - **ㅕ** — same as ㅓ but with **two** short strokes (the "y" prefix doubles the stroke)
76
+
77
+ This pattern continues throughout Hangul: adding an extra stroke creates the "y" version of any vowel.
78
+
79
+ ## Syllable Formation
80
+
81
+ When these vowels combine with the silent consonant ㅇ:
82
+
83
+ | Vowel | Syllable | Pronunciation |
84
+ |-------|----------|---------------|
85
+ | ㅏ | 아 | a |
86
+ | ㅑ | 야 | ya |
87
+ | ㅓ | 어 | eo |
88
+ | ㅕ | 여 | yeo |
89
+
90
+ ## Practice Words
91
+
92
+ | Korean | Romanization | Meaning |
93
+ |--------|-------------|---------|
94
+ | 아이 | a-i | child |
95
+ | 야구 | ya-gu | baseball |
96
+ | 어머니 | eo-meo-ni | mother |
97
+ | 여기 | yeo-gi | here |
98
+
99
+ ## Key Points
100
+
101
+ 1. **Hangul is systematic**: Vowels follow visual patterns (extra stroke = "y" prefix)
102
+ 2. **ㅇ is the silent placeholder**: Used when a vowel opens a syllable
103
+ 3. **ㅓ is unique**: The sound has no perfect English equivalent; keep lips relaxed
104
+ 4. **Vertical vowels** (ㅏ, ㅑ, ㅓ, ㅕ) go to the right of a consonant in a syllable block
105
+
106
+ ## Practice Recognition
107
+
108
+ :::exercise{id="ko-alph-01-recognition" type="matching" title="Match Vowels to Sounds" skill="character-recognition" tests="a,ya,eo,yeo" objectiveId="obj-ko-alph-01-recognize"}
109
+
110
+ **Question:** Match each Hangul vowel to its romanization
111
+
112
+ - ㅏ
113
+ - ㅑ
114
+ - ㅓ
115
+ - ㅕ
116
+
117
+ **Answer:**
118
+
119
+ - ㅏ = a
120
+ - ㅑ = ya
121
+ - ㅓ = eo
122
+ - ㅕ = yeo
123
+
124
+ **Explanation:** The four vowels follow a clear visual pattern. ㅏ and ㅓ are mirror images of each other. ㅑ and ㅕ add an extra stroke to create the "y" variants.
125
+
126
+ :::
127
+
128
+ :::exercise{id="ko-alph-01-sounds" type="fill-in-blank" title="Sound Mapping" skill="character-sound-mapping" tests="a,ya,eo,yeo" objectiveId="obj-ko-alph-01-sounds"}
129
+
130
+ **Question:** What sound does each vowel make?
131
+
132
+ - ㅏ sounds like ___
133
+ - ㅑ sounds like ___
134
+ - ㅓ sounds like ___
135
+ - ㅕ sounds like ___
136
+
137
+ **Answer:**
138
+
139
+ - ㅏ = /a/ as in "father"
140
+ - ㅑ = /ja/ as in "yard"
141
+ - ㅓ = /ʌ/ as in "but" (lips more open)
142
+ - ㅕ = /jʌ/ — "yuh" sound
143
+
144
+ **Explanation:** These four vowels form two pairs: ㅏ/ㅑ and ㅓ/ㅕ. The "y" variants simply add a "y" sound before the base vowel.
145
+
146
+ :::
147
+
148
+ ## What's Next
149
+
150
+ In Lesson 2, you will learn three more basic vowels: ㅗ (o), ㅛ (yo), and ㅜ (u) — the horizontal vowels of Hangul.
151
+ `;
152
+ export {
153
+ n as default
154
+ };
@@ -0,0 +1,169 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: korean-hangul-lesson-02
4
+ title: "Lesson 2 — Basic Vowels II (ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ)"
5
+ description: "Learn the remaining six Korean basic vowels: o, yo, u, yu, eu, i"
6
+ order: 2
7
+ parentId: ko-alphabet
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - vowels
12
+ - basic-characters
13
+ metadata:
14
+ estimatedTime: 25
15
+ prerequisites: [korean-hangul-lesson-01]
16
+ learningObjectives:
17
+ - id: obj-ko-alph-02-recognize
18
+ description: "Recognize the vowels ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ"
19
+ skill: character-recognition
20
+ references: [o, yo, u, yu, eu, i]
21
+ - id: obj-ko-alph-02-sounds
22
+ description: "Map each vowel to its sound"
23
+ skill: character-sound-mapping
24
+ references: [o, yo, u, yu, eu, i]
25
+ ---
26
+
27
+ # Lesson 2 — Basic Vowels II (ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ)
28
+
29
+ ## Introduction
30
+
31
+ In Lesson 1, you learned the four vertical vowels with strokes pointing left or right. In this lesson, you will complete the ten basic Korean vowels. The next set includes **horizontal vowels** — vowels whose base line is horizontal — plus the final two: ㅡ and ㅣ.
32
+
33
+ ## Characters
34
+
35
+ :::character-set{id="ko-vowels-2" title="Basic Vowels II"}
36
+
37
+ ::character{id="o" canonicalRef="o" char="ㅗ" name="ㅗ 오 (o)" charType="vowel" data:romanization="o" data:ipa="o"}
38
+
39
+ ::character{id="yo" canonicalRef="yo" char="ㅛ" name="ㅛ 요 (yo)" charType="vowel" data:romanization="yo" data:ipa="jo"}
40
+
41
+ ::character{id="u" canonicalRef="u" char="ㅜ" name="ㅜ 우 (u)" charType="vowel" data:romanization="u" data:ipa="u"}
42
+
43
+ ::character{id="yu" canonicalRef="yu" char="ㅠ" name="ㅠ 유 (yu)" charType="vowel" data:romanization="yu" data:ipa="ju"}
44
+
45
+ ::character{id="eu" canonicalRef="eu" char="ㅡ" name="ㅡ 으 (eu)" charType="vowel" data:romanization="eu" data:ipa="ɯ"}
46
+
47
+ ::character{id="i" canonicalRef="i" char="ㅣ" name="ㅣ 이 (i)" charType="vowel" data:romanization="i" data:ipa="i"}
48
+
49
+ :::
50
+
51
+ ## Pronunciation Guide
52
+
53
+ | Character | Romanization | Sound | English Approximation |
54
+ |-----------|-------------|-------|----------------------|
55
+ | ㅗ | o | /o/ | "o" in "go" |
56
+ | ㅛ | yo | /jo/ | "yo" in "yoke" |
57
+ | ㅜ | u | /u/ | "oo" in "moon" |
58
+ | ㅠ | yu | /ju/ | "you" |
59
+ | ㅡ | eu | /ɯ/ | No English equivalent — "uh" with lips spread flat |
60
+ | ㅣ | i | /i/ | "ee" in "see" |
61
+
62
+ **Note on ㅡ (eu):** This is the most difficult vowel for English speakers. Keep your lips spread flat (like you are smiling) and say "uh." It is the same sound as the Russian ы.
63
+
64
+ ## Shape Pattern
65
+
66
+ The horizontal vowels follow the same rule as vertical vowels:
67
+
68
+ - **ㅗ** — horizontal line with a short vertical stroke pointing **up**
69
+ - **ㅛ** — same as ㅗ but with **two** vertical strokes (the "y" prefix)
70
+ - **ㅜ** — horizontal line with a short vertical stroke pointing **down**
71
+ - **ㅠ** — same as ㅜ but with **two** vertical strokes (the "y" prefix)
72
+ - **ㅡ** — just a horizontal line — the "flat" vowel
73
+ - **ㅣ** — just a vertical line — the simplest vowel
74
+
75
+ ## Syllable Formation
76
+
77
+ When combined with the silent consonant ㅇ:
78
+
79
+ | Vowel | Syllable | Pronunciation |
80
+ |-------|----------|---------------|
81
+ | ㅗ | 오 | o |
82
+ | ㅛ | 요 | yo |
83
+ | ㅜ | 우 | u |
84
+ | ㅠ | 유 | yu |
85
+ | ㅡ | 으 | eu |
86
+ | ㅣ | 이 | i |
87
+
88
+ ## Placement in Syllable Blocks
89
+
90
+ Korean consonants and vowels are assembled into syllable blocks. The vowel's orientation determines where it goes:
91
+
92
+ - **Vertical vowels** (ㅏ, ㅑ, ㅓ, ㅕ, ㅣ): consonant goes **to the left**
93
+ - **Horizontal vowels** (ㅗ, ㅛ, ㅜ, ㅠ, ㅡ): consonant goes **above**
94
+
95
+ | Vowel | Example syllable | Description |
96
+ |-------|-----------------|-------------|
97
+ | ㅏ | 가 (ga) | ㄱ left, ㅏ right |
98
+ | ㅗ | 고 (go) | ㄱ above, ㅗ below |
99
+
100
+ ## Practice Words
101
+
102
+ | Korean | Romanization | Meaning |
103
+ |--------|-------------|---------|
104
+ | 오이 | o-i | cucumber |
105
+ | 유리 | yu-ri | glass (material) |
106
+ | 으로 | eu-ro | toward / with |
107
+ | 이유 | i-yu | reason |
108
+ | 우유 | u-yu | milk |
109
+
110
+ ## Key Points
111
+
112
+ 1. **All 10 basic vowels**: You now know all 10 (ㅏ, ㅑ, ㅓ, ㅕ, ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ)
113
+ 2. **Horizontal vowels go below consonants**: ㅗ, ㅛ, ㅜ, ㅠ, ㅡ position the consonant above
114
+ 3. **ㅡ is unique**: No close English equivalent — spread lips flat for "uh"
115
+ 4. **ㅣ is the simplest**: Just a vertical line, sounds like "ee"
116
+
117
+ ## Practice Recognition
118
+
119
+ :::exercise{id="ko-alph-02-recognition" type="matching" title="Match Vowels to Sounds" skill="character-recognition" tests="o,yo,u,yu,eu,i" objectiveId="obj-ko-alph-02-recognize"}
120
+
121
+ **Question:** Match each Hangul vowel to its romanization
122
+
123
+ - ㅗ
124
+ - ㅛ
125
+ - ㅜ
126
+ - ㅠ
127
+ - ㅡ
128
+ - ㅣ
129
+
130
+ **Answer:**
131
+
132
+ - ㅗ = o
133
+ - ㅛ = yo
134
+ - ㅜ = u
135
+ - ㅠ = yu
136
+ - ㅡ = eu
137
+ - ㅣ = i
138
+
139
+ **Explanation:** Horizontal vowels pair with their "y" versions just like the vertical vowels did in Lesson 1. ㅡ and ㅣ stand alone as the base horizontal and vertical lines.
140
+
141
+ :::
142
+
143
+ :::exercise{id="ko-alph-02-sounds" type="fill-in-blank" title="Sound Mapping" skill="character-sound-mapping" tests="o,yo,u,yu,eu,i" objectiveId="obj-ko-alph-02-sounds"}
144
+
145
+ **Question:** What sound does each vowel make?
146
+
147
+ - ㅗ sounds like ___
148
+ - ㅜ sounds like ___
149
+ - ㅡ sounds like ___
150
+ - ㅣ sounds like ___
151
+
152
+ **Answer:**
153
+
154
+ - ㅗ = /o/ as in "go"
155
+ - ㅜ = /u/ as in "moon"
156
+ - ㅡ = /ɯ/ — spread lips flat and say "uh"
157
+ - ㅣ = /i/ as in "see"
158
+
159
+ **Explanation:** ㅗ and ㅜ are the most common horizontal vowels. ㅡ is the only vowel with no close English equivalent. ㅣ is the simplest — just a straight line making the "ee" sound.
160
+
161
+ :::
162
+
163
+ ## What's Next
164
+
165
+ In Lesson 3, you will learn your first consonants: ㄱ, ㄴ, and ㄷ. Combined with the vowels you already know, you can begin reading real Korean syllables.
166
+ `;
167
+ export {
168
+ n as default
169
+ };
@@ -0,0 +1,164 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: korean-hangul-lesson-03
4
+ title: "Lesson 3 — Basic Vowels Review & Syllable Blocks"
5
+ description: "Review all 10 basic vowels and learn how syllable blocks are assembled"
6
+ order: 3
7
+ parentId: ko-alphabet
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - vowels
12
+ - syllable-structure
13
+ metadata:
14
+ estimatedTime: 25
15
+ prerequisites: [korean-hangul-lesson-01, korean-hangul-lesson-02]
16
+ learningObjectives:
17
+ - id: obj-ko-alph-03-review
18
+ description: "Recall all 10 basic vowels and their sounds"
19
+ skill: character-recognition
20
+ references: [a, ya, eo, yeo, o, yo, u, yu, eu, i]
21
+ - id: obj-ko-alph-03-syllables
22
+ description: "Understand how vowels and consonants combine into syllable blocks"
23
+ skill: syllable-analysis
24
+ references: [a, eo, o, u, eu, i]
25
+ ---
26
+
27
+ # Lesson 3 — Basic Vowels Review & Syllable Blocks
28
+
29
+ ## Introduction
30
+
31
+ You have now learned all 10 basic Korean vowels. Before moving on to consonants, it is important to understand **how Korean syllable blocks work**. This knowledge will let you read and write any Korean syllable correctly.
32
+
33
+ ## All 10 Basic Vowels at a Glance
34
+
35
+ :::character-set{id="ko-vowels-all" title="All 10 Basic Vowels"}
36
+
37
+ ::character{id="a" canonicalRef="a" char="ㅏ" name="ㅏ 아 (a)" charType="vowel" data:romanization="a" data:ipa="a"}
38
+
39
+ ::character{id="ya" canonicalRef="ya" char="ㅑ" name="ㅑ 야 (ya)" charType="vowel" data:romanization="ya" data:ipa="ja"}
40
+
41
+ ::character{id="eo" canonicalRef="eo" char="ㅓ" name="ㅓ 어 (eo)" charType="vowel" data:romanization="eo" data:ipa="ʌ"}
42
+
43
+ ::character{id="yeo" canonicalRef="yeo" char="ㅕ" name="ㅕ 여 (yeo)" charType="vowel" data:romanization="yeo" data:ipa="jʌ"}
44
+
45
+ ::character{id="o" canonicalRef="o" char="ㅗ" name="ㅗ 오 (o)" charType="vowel" data:romanization="o" data:ipa="o"}
46
+
47
+ ::character{id="yo" canonicalRef="yo" char="ㅛ" name="ㅛ 요 (yo)" charType="vowel" data:romanization="yo" data:ipa="jo"}
48
+
49
+ ::character{id="u" canonicalRef="u" char="ㅜ" name="ㅜ 우 (u)" charType="vowel" data:romanization="u" data:ipa="u"}
50
+
51
+ ::character{id="yu" canonicalRef="yu" char="ㅠ" name="ㅠ 유 (yu)" charType="vowel" data:romanization="yu" data:ipa="ju"}
52
+
53
+ ::character{id="eu" canonicalRef="eu" char="ㅡ" name="ㅡ 으 (eu)" charType="vowel" data:romanization="eu" data:ipa="ɯ"}
54
+
55
+ ::character{id="i" canonicalRef="i" char="ㅣ" name="ㅣ 이 (i)" charType="vowel" data:romanization="i" data:ipa="i"}
56
+
57
+ :::
58
+
59
+ ## The Vowel Chart
60
+
61
+ | Group | Characters | Base Sound |
62
+ |-------|-----------|------------|
63
+ | Vertical (right) | ㅏ, ㅑ | a, ya |
64
+ | Vertical (left) | ㅓ, ㅕ | eo, yeo |
65
+ | Horizontal (up) | ㅗ, ㅛ | o, yo |
66
+ | Horizontal (down) | ㅜ, ㅠ | u, yu |
67
+ | Solo | ㅡ, ㅣ | eu, i |
68
+
69
+ ## How Syllable Blocks Work
70
+
71
+ Korean words are written in **syllable blocks**, not as individual letters in a row. Each block contains exactly one vowel, at least one consonant, and sometimes a final consonant (called a **받침, batchim**).
72
+
73
+ ### Block Structure
74
+
75
+ There are four possible block shapes:
76
+
77
+ 1. **CV** — consonant + vertical vowel: **가** (ga = ㄱ+ㅏ)
78
+ 2. **CV** — consonant above horizontal vowel: **고** (go = ㄱ+ㅗ)
79
+ 3. **CVC** — consonant + vertical vowel + final consonant: **강** (gang = ㄱ+ㅏ+ㅇ)
80
+ 4. **CVC** — consonant above horizontal vowel + final consonant: **공** (gong = ㄱ+ㅗ+ㅇ)
81
+
82
+ ### The Silent Consonant ㅇ
83
+
84
+ When a syllable starts with a vowel sound, the silent consonant **ㅇ (ieung)** is used as a placeholder:
85
+
86
+ | Vowel | Syllable | Pronunciation |
87
+ |-------|----------|---------------|
88
+ | ㅏ | 아 | a |
89
+ | ㅓ | 어 | eo |
90
+ | ㅗ | 오 | o |
91
+ | ㅜ | 우 | u |
92
+ | ㅡ | 으 | eu |
93
+ | ㅣ | 이 | i |
94
+
95
+ ## Reading Practice
96
+
97
+ Now that you know all vowels, you can read these simple words:
98
+
99
+ | Korean | Parts | Pronunciation | Meaning |
100
+ |--------|-------|---------------|---------|
101
+ | 아이 | 아+이 | a-i | child |
102
+ | 오이 | 오+이 | o-i | cucumber |
103
+ | 유이 | 유+이 | yu-i | (a name) |
104
+ | 이유 | 이+유 | i-yu | reason |
105
+ | 으이 | 으+이 | eu-i | (exclamation of disgust) |
106
+
107
+ ## Key Points
108
+
109
+ 1. **10 basic vowels**: ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ — memorize them in order
110
+ 2. **Syllable blocks, not linear**: Korean is written in blocks, not letter by letter
111
+ 3. **ㅇ is silent at the start**: When a syllable begins with a vowel, ㅇ fills the consonant slot
112
+ 4. **Vowel position determines layout**: Vertical vowels → consonant left; horizontal → consonant above
113
+
114
+ ## Practice Recognition
115
+
116
+ :::exercise{id="ko-alph-03-review" type="matching" title="Vowel Review — All 10" skill="character-recognition" tests="a,ya,eo,yeo,o,yo,u,yu,eu,i" objectiveId="obj-ko-alph-03-review"}
117
+
118
+ **Question:** Match each Hangul vowel to its romanization
119
+
120
+ - ㅏ, ㅑ, ㅓ, ㅕ
121
+ - ㅗ, ㅛ, ㅜ, ㅠ
122
+ - ㅡ, ㅣ
123
+
124
+ **Answer:**
125
+
126
+ - ㅏ = a, ㅑ = ya, ㅓ = eo, ㅕ = yeo
127
+ - ㅗ = o, ㅛ = yo, ㅜ = u, ㅠ = yu
128
+ - ㅡ = eu, ㅣ = i
129
+
130
+ **Explanation:** The ten basic vowels divide into five pairs. Each base vowel (ㅏ, ㅓ, ㅗ, ㅜ) has a "y" variant formed by adding an extra stroke. ㅡ and ㅣ are the two "singleton" vowels.
131
+
132
+ :::
133
+
134
+ :::exercise{id="ko-alph-03-syllables" type="fill-in-blank" title="Syllable Block Reading" skill="syllable-analysis" tests="a,eo,o,u,eu,i" objectiveId="obj-ko-alph-03-syllables"}
135
+
136
+ **Question:** Read these syllables written with the silent consonant ㅇ:
137
+
138
+ - 아 = ___
139
+ - 어 = ___
140
+ - 오 = ___
141
+ - 우 = ___
142
+ - 으 = ___
143
+ - 이 = ___
144
+
145
+ **Answer:**
146
+
147
+ - 아 = a
148
+ - 어 = eo
149
+ - 오 = o
150
+ - 우 = u
151
+ - 으 = eu
152
+ - 이 = i
153
+
154
+ **Explanation:** Each syllable uses ㅇ (silent) + vowel. The ㅇ at the start of a syllable has no sound — it is purely a structural placeholder. When ㅇ appears at the **end** of a syllable (as batchim), it makes an "ng" sound.
155
+
156
+ :::
157
+
158
+ ## What's Next
159
+
160
+ In Lesson 4, you will learn your first group of consonants: ㄱ (giyeok), ㄴ (nieun), and ㄷ (digeut). With consonants added to the vowels you know, you can start reading real Korean words.
161
+ `;
162
+ export {
163
+ n as default
164
+ };