@rookiestar/eng-lang-tutor 1.0.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.
- package/.claude/settings.local.json +22 -0
- package/.gitignore +32 -0
- package/CHANGELOG.md +37 -0
- package/CLAUDE.md +275 -0
- package/README.md +369 -0
- package/SKILL.md +613 -0
- package/bin/eng-lang-tutor.js +177 -0
- package/docs/OPENCLAW_DEPLOYMENT.md +241 -0
- package/examples/sample_keypoint_a1.json +112 -0
- package/examples/sample_keypoint_a2.json +124 -0
- package/examples/sample_keypoint_b1.json +135 -0
- package/examples/sample_keypoint_b2.json +137 -0
- package/examples/sample_keypoint_c1.json +134 -0
- package/examples/sample_keypoint_c2.json +141 -0
- package/examples/sample_quiz_a1.json +94 -0
- package/examples/sample_quiz_a2.json +94 -0
- package/examples/sample_quiz_b1.json +92 -0
- package/examples/sample_quiz_b2.json +94 -0
- package/examples/sample_quiz_c1.json +94 -0
- package/examples/sample_quiz_c2.json +104 -0
- package/package.json +41 -0
- package/references/resources.md +292 -0
- package/requirements.txt +16 -0
- package/scripts/__init__.py +28 -0
- package/scripts/audio/__init__.py +23 -0
- package/scripts/audio/composer.py +367 -0
- package/scripts/audio/converter.py +331 -0
- package/scripts/audio/feishu_voice.py +404 -0
- package/scripts/audio/tts/__init__.py +30 -0
- package/scripts/audio/tts/base.py +166 -0
- package/scripts/audio/tts/manager.py +306 -0
- package/scripts/audio/tts/providers/__init__.py +12 -0
- package/scripts/audio/tts/providers/edge.py +111 -0
- package/scripts/audio/tts/providers/xunfei.py +205 -0
- package/scripts/audio/utils.py +63 -0
- package/scripts/cli/__init__.py +7 -0
- package/scripts/cli/cli.py +229 -0
- package/scripts/cli/command_parser.py +336 -0
- package/scripts/core/__init__.py +30 -0
- package/scripts/core/constants.py +125 -0
- package/scripts/core/error_notebook.py +308 -0
- package/scripts/core/gamification.py +405 -0
- package/scripts/core/scorer.py +295 -0
- package/scripts/core/state_manager.py +814 -0
- package/scripts/eng-lang-tutor +16 -0
- package/scripts/scheduling/__init__.py +6 -0
- package/scripts/scheduling/cron_push.py +229 -0
- package/scripts/utils/__init__.py +12 -0
- package/scripts/utils/dedup.py +331 -0
- package/scripts/utils/helpers.py +82 -0
- package/templates/keypoint_schema.json +420 -0
- package/templates/prompt_templates.md +73 -0
- package/templates/prompts/display_guide.md +106 -0
- package/templates/prompts/initialization.md +350 -0
- package/templates/prompts/keypoint_generation.md +272 -0
- package/templates/prompts/output_rules.md +106 -0
- package/templates/prompts/quiz_generation.md +190 -0
- package/templates/prompts/responses.md +339 -0
- package/templates/prompts/shared_enums.md +252 -0
- package/templates/quiz_schema.json +214 -0
- package/templates/state_schema.json +277 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
{
|
|
2
|
+
"date": "2026-02-20",
|
|
3
|
+
"topic_fingerprint": "workplace_touch_base",
|
|
4
|
+
"category": "oral",
|
|
5
|
+
"topic": "workplace",
|
|
6
|
+
"scene": {
|
|
7
|
+
"context": "You want to briefly connect with a colleague about a project or task. This is common in American workplaces for quick check-ins without scheduling a formal meeting.",
|
|
8
|
+
"formality": "neutral"
|
|
9
|
+
},
|
|
10
|
+
"expressions": [
|
|
11
|
+
{
|
|
12
|
+
"phrase": "Let's touch base",
|
|
13
|
+
"pronunciation_tip": "Sounds like 'touch base', not 'touch bases'. It comes from baseball!",
|
|
14
|
+
"usage_note": "Use this when you want to have a brief, informal check-in. Very common in American business culture."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"phrase": "Can we touch base on this?",
|
|
18
|
+
"pronunciation_tip": "Natural speed: 'Can-we-touch-base-on-this' flows together.",
|
|
19
|
+
"usage_note": "Add 'on this' when referring to a specific topic or project."
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"alternatives": [
|
|
23
|
+
"Let's sync up",
|
|
24
|
+
"Can we catch up briefly?",
|
|
25
|
+
"Let's check in",
|
|
26
|
+
"Do you have a minute to connect?"
|
|
27
|
+
],
|
|
28
|
+
"chinglish_trap": {
|
|
29
|
+
"wrong": "Let's discuss together. / I want to communicate with you.",
|
|
30
|
+
"correct": "Let's touch base. / Can we sync up?",
|
|
31
|
+
"explanation": "Chinese speakers often translate directly, using 'discuss together' or 'communicate with you', which sounds formal and awkward in casual workplace settings. 'Touch base' is the natural American way to suggest a quick check-in."
|
|
32
|
+
},
|
|
33
|
+
"examples": [
|
|
34
|
+
{
|
|
35
|
+
"situation": "Morning standup meeting",
|
|
36
|
+
"dialogue": [
|
|
37
|
+
"A: Hey, I haven't seen the latest mockups. Can we touch base on those?",
|
|
38
|
+
"B: Sure, I'll swing by your desk after lunch.",
|
|
39
|
+
"A: Perfect, thanks!"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"situation": "Email follow-up",
|
|
44
|
+
"dialogue": [
|
|
45
|
+
"A: I'm heading into a meeting, but let's touch base later about the client presentation.",
|
|
46
|
+
"B: Sounds good. I'll be free around 3.",
|
|
47
|
+
"A: Great, I'll ping you then."
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"extended_learning": {
|
|
52
|
+
"related_phrases": [
|
|
53
|
+
"circle back - return to a topic later",
|
|
54
|
+
"loop in - include someone in communication",
|
|
55
|
+
"keep in the loop - keep someone informed"
|
|
56
|
+
],
|
|
57
|
+
"cultural_note": "The phrase 'touch base' comes from baseball, where runners must touch each base to score. In business, it means making brief contact to share updates or align on goals. Americans use this several times per day in corporate settings!",
|
|
58
|
+
"common_mistakes": [
|
|
59
|
+
"Saying 'touch bases' (wrong plural)",
|
|
60
|
+
"Using it for long, formal meetings (it implies brevity)",
|
|
61
|
+
"Not following up after saying you'll 'touch base'"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"references": {
|
|
65
|
+
"dictionary": {
|
|
66
|
+
"source": "merriam-webster",
|
|
67
|
+
"url": "https://www.merriam-webster.com/dictionary/touch%20base",
|
|
68
|
+
"note": "Official definition and usage examples"
|
|
69
|
+
},
|
|
70
|
+
"usage_context": {
|
|
71
|
+
"source": "youglish",
|
|
72
|
+
"url": "https://youglish.com/pronounce/touch%20base/english/us",
|
|
73
|
+
"note": "Hear it in 1000+ real YouTube videos"
|
|
74
|
+
},
|
|
75
|
+
"etymology": {
|
|
76
|
+
"source": "etymonline",
|
|
77
|
+
"url": "https://www.etymonline.com/word/touch",
|
|
78
|
+
"note": "From baseball: runners must touch each base to score"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"display": {
|
|
82
|
+
"title": "๐ข ไปๆฅ็ฅ่ฏ็น | Today's Knowledge Point",
|
|
83
|
+
"topic_tag": "๐ท๏ธ ไธป้ข: ่ๅบๅฃ่ฏญ | Workplace Oral",
|
|
84
|
+
"formality_tag": "๐ ๆญฃๅผๅบฆ: ไธญๆง | Neutral",
|
|
85
|
+
"scene_intro": "๐ฌ ๅบๆฏ | Scene",
|
|
86
|
+
"scene_text": "Quick check-in with colleagues without scheduling a formal meeting.",
|
|
87
|
+
"expressions_title": "๐ฌ ๆ ธๅฟ่กจ่พพ | Key Expressions",
|
|
88
|
+
"expressions_formatted": [
|
|
89
|
+
{
|
|
90
|
+
"emoji": "โจ",
|
|
91
|
+
"phrase": "**Let's touch base**",
|
|
92
|
+
"phrase_plain": "Let's touch base",
|
|
93
|
+
"pronunciation": "๐ Sounds like 'touch base' (not 'bases')! From baseball โพ",
|
|
94
|
+
"usage": "๐ก Brief, informal check-in."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"emoji": "โจ",
|
|
98
|
+
"phrase": "**Can we touch base on this?**",
|
|
99
|
+
"phrase_plain": "Can we touch base on this?",
|
|
100
|
+
"pronunciation": "๐ Flows: Can-we-touch-base-ON-this.",
|
|
101
|
+
"usage": "๐ก Use when referring to a specific topic."
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"alternatives_title": "๐ ๅ
ถไป่ฏดๆณ | Alternatives",
|
|
105
|
+
"alternatives_formatted": "โข **Let's sync up**\nโข **Can we catch up briefly?**\nโข **Let's check in**\nโข Do you have a minute to connect?",
|
|
106
|
+
"chinglish_title": "โ ๏ธ Chinglish ้ท้ฑ | Chinglish Trap",
|
|
107
|
+
"chinglish_formatted": "โ Wrong: \"Let's discuss together.\"\nโ Wrong: \"I want to communicate with you.\"\nโ
Correct: **Let's touch base!**\nโ
Correct: **Can we sync up?**\n\n๐ Why? Direct translation sounds formal and awkward. **Touch base** is the natural American way!",
|
|
108
|
+
"examples_title": "๐ฃ๏ธ ๅฏน่ฏ็คบไพ | Example Dialogues",
|
|
109
|
+
"examples_formatted": [
|
|
110
|
+
{
|
|
111
|
+
"situation_emoji": "โ",
|
|
112
|
+
"situation": "Morning standup",
|
|
113
|
+
"dialogue": "๐ฌ A: Hey, can we **touch base** on those mockups?\n๐ฌ B: Sure, I'll swing by after lunch.\n๐ฌ A: Perfect, thanks!",
|
|
114
|
+
"key_phrase_highlight": "**touch base**"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"situation_emoji": "๐ง",
|
|
118
|
+
"situation": "Email follow-up",
|
|
119
|
+
"dialogue": "๐ฌ A: Let's **touch base** later about the presentation.\n๐ฌ B: Sounds good. Free around 3?\n๐ฌ A: Great, I'll ping you then!",
|
|
120
|
+
"key_phrase_highlight": "**touch base**"
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
"extended_title": "๐ ๅปถไผธๅญฆไน | Extended Learning",
|
|
124
|
+
"extended_formatted": "๐ Related: **circle back** | **loop in** | **keep in the loop**\n\n๐ Cultural Note: From baseball โพ - runners **touch** each **base** to score. Americans use this phrase several times a day!\n\n๐ซ Common Mistakes:\n โข Saying 'touch bases' โ\n โข Using for long meetings (it implies brevity)\n โข Not following up",
|
|
125
|
+
"references_title": "๐ ๆๅจๅ่ | References",
|
|
126
|
+
"references_formatted": "๐ [Merriam-Webster](https://www.merriam-webster.com/dictionary/touch%20base) - Definition & examples\n๐ฌ [YouGlish](https://youglish.com/pronounce/touch%20base/english/us) - 1000+ YouTube videos\n๐ [Etymonline](https://www.etymonline.com/word/touch) - Word origin",
|
|
127
|
+
"footer": "โโโโโโโโโโโโโโโโโโโ\n๐
2026-02-20 | ๐ Take the quiz to earn XP!"
|
|
128
|
+
},
|
|
129
|
+
"audio": {
|
|
130
|
+
"enabled": true,
|
|
131
|
+
"narrator": "audio/2026-02-20/narrator.mp3",
|
|
132
|
+
"dialogue": []
|
|
133
|
+
},
|
|
134
|
+
"generated": true
|
|
135
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"prompt_version": "keypoint_gen_v2.1"
|
|
4
|
+
},
|
|
5
|
+
"date": "2026-02-25",
|
|
6
|
+
"topic_fingerprint": "workplace_circle_back",
|
|
7
|
+
"category": "oral",
|
|
8
|
+
"topic": "workplace",
|
|
9
|
+
"scene": {
|
|
10
|
+
"context": "You're in a meeting and need to postpone a discussion. This corporate idiom is essential for professional communication in American business culture.",
|
|
11
|
+
"formality": "neutral"
|
|
12
|
+
},
|
|
13
|
+
"expressions": [
|
|
14
|
+
{
|
|
15
|
+
"phrase": "Let's circle back on this",
|
|
16
|
+
"pronunciation_tip": "Natural: 'lets-circle-back-on-this'. The 'le' in circle is often dropped: 'cir-cle-back' โ 'sur-kull-back'.",
|
|
17
|
+
"usage_note": "Use when you want to return to a topic later. Very common in meetings when time is limited or more research is needed."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"phrase": "I'll loop you in",
|
|
21
|
+
"pronunciation_tip": "'loop-you-in' flows together smoothly",
|
|
22
|
+
"usage_note": "Use when you'll include someone in future communication about a topic."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"alternatives": [
|
|
26
|
+
"Let's revisit this later",
|
|
27
|
+
"Let's table this for now",
|
|
28
|
+
"We can follow up on this",
|
|
29
|
+
"Let's take this offline"
|
|
30
|
+
],
|
|
31
|
+
"chinglish_trap": {
|
|
32
|
+
"wrong": "Let's discuss again later / Let's talk about this again",
|
|
33
|
+
"correct": "Let's circle back on this",
|
|
34
|
+
"explanation": "'Discuss again' sounds mechanical and direct. Americans prefer the spatial metaphor 'circle back' (returning to a point) which sounds more natural in corporate settings. It implies a planned return rather than just repeating."
|
|
35
|
+
},
|
|
36
|
+
"examples": [
|
|
37
|
+
{
|
|
38
|
+
"situation": "Running out of meeting time",
|
|
39
|
+
"dialogue": [
|
|
40
|
+
"A: We've spent 20 minutes on the budget. We still have three more items.",
|
|
41
|
+
"B: Good point. Let's circle back on the budget after we cover the other items.",
|
|
42
|
+
"A: Sounds good. Moving on to the marketing plan..."
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"situation": "Need more information",
|
|
47
|
+
"dialogue": [
|
|
48
|
+
"A: Should we increase the ad spend for Q4?",
|
|
49
|
+
"B: I don't have the ROI data yet. Can we circle back on this tomorrow?",
|
|
50
|
+
"A: Absolutely. I'll loop you in once I get the numbers from analytics."
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"extended_learning": {
|
|
55
|
+
"related_phrases": [
|
|
56
|
+
"touch base - quick check-in",
|
|
57
|
+
"loop in - include someone",
|
|
58
|
+
"keep in the loop - keep someone informed",
|
|
59
|
+
"reach out - contact someone"
|
|
60
|
+
],
|
|
61
|
+
"cultural_note": "Corporate jargon often uses spatial metaphors (circle back, touch base, loop in). These originated from baseball and navigation but are now standard business language. Using them correctly signals you're familiar with American corporate culture.",
|
|
62
|
+
"common_mistakes": [
|
|
63
|
+
"Saying 'circle around' instead of 'circle back'",
|
|
64
|
+
"Using it too often - it can sound evasive if overused",
|
|
65
|
+
"Not actually following up - only say it if you mean to return to the topic"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"references": {
|
|
69
|
+
"dictionary": {
|
|
70
|
+
"source": "merriam-webster",
|
|
71
|
+
"url": "https://www.merriam-webster.com/dictionary/circle%20back",
|
|
72
|
+
"note": "Definition and business usage"
|
|
73
|
+
},
|
|
74
|
+
"usage_context": {
|
|
75
|
+
"source": "youglish",
|
|
76
|
+
"url": "https://youglish.com/pronounce/circle%20back/english/us",
|
|
77
|
+
"note": "Hear it in real business meetings"
|
|
78
|
+
},
|
|
79
|
+
"etymology": {
|
|
80
|
+
"source": "corporate-lingo",
|
|
81
|
+
"url": "https://www.linkedin.com/pulse/origins-corporate-jargon/",
|
|
82
|
+
"note": "Originated in 1990s corporate America"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"display": {
|
|
86
|
+
"title": "๐ข ไปๆฅ็ฅ่ฏ็น | Today's Knowledge Point",
|
|
87
|
+
"topic_tag": "๐ท๏ธ ไธป้ข: ่ๅบๅฃ่ฏญ | Workplace Oral",
|
|
88
|
+
"formality_tag": "๐ ๆญฃๅผๅบฆ: ไธญๆง | Neutral",
|
|
89
|
+
"scene_intro": "๐ฌ ๅบๆฏ | Scene",
|
|
90
|
+
"scene_text": "Postponing a discussion in a meeting - essential corporate idiom",
|
|
91
|
+
"expressions_title": "๐ฌ ๆ ธๅฟ่กจ่พพ | Key Expressions",
|
|
92
|
+
"expressions_formatted": [
|
|
93
|
+
{
|
|
94
|
+
"emoji": "โจ",
|
|
95
|
+
"phrase": "**Let's circle back on this**",
|
|
96
|
+
"phrase_plain": "Let's circle back on this",
|
|
97
|
+
"pronunciation": "๐ 'sur-kull-back' - 'le' often dropped",
|
|
98
|
+
"usage": "๐ก Return to a topic later. Very common in meetings."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"emoji": "โจ",
|
|
102
|
+
"phrase": "**I'll loop you in**",
|
|
103
|
+
"phrase_plain": "I'll loop you in",
|
|
104
|
+
"pronunciation": "๐ 'loop-you-in' - flows together",
|
|
105
|
+
"usage": "๐ก Include someone in future communication."
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"alternatives_title": "๐ ๅ
ถไป่ฏดๆณ | Alternatives",
|
|
109
|
+
"alternatives_formatted": "โข **Let's revisit this later**\nโข **Let's table this for now**\nโข **We can follow up on this**\nโข **Let's take this offline**",
|
|
110
|
+
"chinglish_title": "โ ๏ธ Chinglish ้ท้ฑ | Chinglish Trap",
|
|
111
|
+
"chinglish_formatted": "โ Wrong: \"Let's **discuss again later**\"\nโ
Correct: **Let's circle back on this!**\n\n๐ 'Discuss again' sounds mechanical. **Circle back** uses a spatial metaphor that sounds natural in American corporate culture.",
|
|
112
|
+
"examples_title": "๐ฃ๏ธ ๅฏน่ฏ็คบไพ | Example Dialogues",
|
|
113
|
+
"examples_formatted": [
|
|
114
|
+
{
|
|
115
|
+
"situation_emoji": "โฐ",
|
|
116
|
+
"situation": "Running out of meeting time",
|
|
117
|
+
"dialogue": "๐ฌ A: We've spent 20 minutes on budget.\n๐ฌ B: **Let's circle back** after other items.\n๐ฌ A: Sounds good. Moving on...",
|
|
118
|
+
"key_phrase_highlight": "**circle back**"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"situation_emoji": "๐",
|
|
122
|
+
"situation": "Need more information",
|
|
123
|
+
"dialogue": "๐ฌ A: Should we increase ad spend?\n๐ฌ B: **Can we circle back** tomorrow? I need ROI data.\n๐ฌ A: Absolutely. **I'll loop you in** once I get numbers.",
|
|
124
|
+
"key_phrase_highlight": "**circle back / loop you in**"
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"extended_title": "๐ ๅปถไผธๅญฆไน | Extended Learning",
|
|
128
|
+
"extended_formatted": "๐ Related: **touch base** | **loop in** | **keep in the loop** | **reach out**\n\n๐ Cultural Note: Corporate jargon uses spatial metaphors (circle back, touch base, loop in). Using them correctly signals familiarity with American corporate culture.\n\n๐ซ Common Mistakes:\n โข 'Circle around' โ (should be 'back')\n โข Overusing it (can sound evasive)\n โข Not actually following up",
|
|
129
|
+
"references_title": "๐ ๆๅจๅ่ | References",
|
|
130
|
+
"references_formatted": "๐ [Merriam-Webster](https://www.merriam-webster.com/dictionary/circle%20back) - Definition\n๐ฌ [YouGlish](https://youglish.com/pronounce/circle%20back/english/us) - Real meetings\n๐ [Corporate Lingo](https://www.linkedin.com/pulse/origins-corporate-jargon/) - Origins",
|
|
131
|
+
"footer": "โโโโโโโโโโโโโโโโโโโ\n๐
2026-02-25 | ๐ Take the quiz to earn XP!"
|
|
132
|
+
},
|
|
133
|
+
"audio": {
|
|
134
|
+
"enabled": true
|
|
135
|
+
},
|
|
136
|
+
"generated": true
|
|
137
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"prompt_version": "keypoint_gen_v2.1"
|
|
4
|
+
},
|
|
5
|
+
"date": "2026-02-25",
|
|
6
|
+
"topic_fingerprint": "workplace_take_offline",
|
|
7
|
+
"category": "oral",
|
|
8
|
+
"topic": "workplace",
|
|
9
|
+
"scene": {
|
|
10
|
+
"context": "You're in a meeting with multiple stakeholders and a sensitive or detailed topic comes up that's better discussed privately. This is a diplomatic way to redirect the conversation.",
|
|
11
|
+
"formality": "neutral"
|
|
12
|
+
},
|
|
13
|
+
"expressions": [
|
|
14
|
+
{
|
|
15
|
+
"phrase": "Let's take this offline",
|
|
16
|
+
"pronunciation_tip": "Natural: 'lets-take-this-off-line'. Emphasis on 'offline'.",
|
|
17
|
+
"usage_note": "Use when a discussion is getting too detailed, sensitive, or off-topic for the current meeting. It's a polite way to say 'let's discuss this privately later'."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"phrase": "We're spinning our wheels",
|
|
21
|
+
"pronunciation_tip": "'spinning-our-wheels' - all words connect smoothly",
|
|
22
|
+
"usage_note": "Use when a discussion is unproductive and going in circles. Signals it's time to move on or change approach."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"alternatives": [
|
|
26
|
+
"Let's continue this conversation separately",
|
|
27
|
+
"Let's set up a separate call for this",
|
|
28
|
+
"Let's park this for now",
|
|
29
|
+
"This might be better as a follow-up"
|
|
30
|
+
],
|
|
31
|
+
"chinglish_trap": {
|
|
32
|
+
"wrong": "Let's talk privately / Let's discuss this in private later",
|
|
33
|
+
"correct": "Let's take this offline",
|
|
34
|
+
"explanation": "'Talk privately' can sound exclusionary or secretive in a group setting. 'Take offline' is the standard corporate euphemism that sounds professional and inclusive while still redirecting. It implies efficiency, not secrecy."
|
|
35
|
+
},
|
|
36
|
+
"examples": [
|
|
37
|
+
{
|
|
38
|
+
"situation": "Sensitive HR issue in team meeting",
|
|
39
|
+
"dialogue": [
|
|
40
|
+
"A: I think the problem is that some team members aren't pulling their weight...",
|
|
41
|
+
"B: (interrupting) This might be getting into specifics that are better discussed separately. Let's take this offline and focus on the process improvements.",
|
|
42
|
+
"A: Fair point. So about the new workflow..."
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"situation": "Technical deep-dive in stakeholder meeting",
|
|
47
|
+
"dialogue": [
|
|
48
|
+
"A: The API latency is caused by the database connection pooling whichโ",
|
|
49
|
+
"B: We're spinning our wheels on technical details here. The stakeholders don't need this level of detail. Let's take this offline with just the engineering team.",
|
|
50
|
+
"A: You're right. Moving on to the timeline..."
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"extended_learning": {
|
|
55
|
+
"related_phrases": [
|
|
56
|
+
"take it offline - discuss privately",
|
|
57
|
+
"parking lot - table a topic for later",
|
|
58
|
+
"side bar - quick private discussion",
|
|
59
|
+
"back-channel - informal communication"
|
|
60
|
+
],
|
|
61
|
+
"cultural_note": "American corporate culture values meeting efficiency. 'Take offline' originated from the idea of taking a conversation 'off the main line' (like a railway siding). It's considered diplomatic because it doesn't shut down the topicโjust redirects it appropriately.",
|
|
62
|
+
"common_mistakes": [
|
|
63
|
+
"Using it to avoid difficult conversations entirely",
|
|
64
|
+
"Saying it in a way that embarrasses the person speaking",
|
|
65
|
+
"Not following up on the offline discussion",
|
|
66
|
+
"Using it too casually with clients (can seem dismissive)"
|
|
67
|
+
],
|
|
68
|
+
"nuance": "'Spinning our wheels' comes from car imageryโwhen wheels spin in mud/snow without moving forward. Use it when discussion is unproductive, not when you simply disagree."
|
|
69
|
+
},
|
|
70
|
+
"references": {
|
|
71
|
+
"dictionary": {
|
|
72
|
+
"source": "merriam-webster",
|
|
73
|
+
"url": "https://www.merriam-webster.com/dictionary/off-line",
|
|
74
|
+
"note": "Definition of 'offline' in business context"
|
|
75
|
+
},
|
|
76
|
+
"usage_context": {
|
|
77
|
+
"source": "youglish",
|
|
78
|
+
"url": "https://youglish.com/pronounce/take%20this%20offline/english/us",
|
|
79
|
+
"note": "Hear it in real business contexts"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"display": {
|
|
83
|
+
"title": "๐ข ไปๆฅ็ฅ่ฏ็น | Today's Knowledge Point",
|
|
84
|
+
"topic_tag": "๐ท๏ธ ไธป้ข: ่ๅบๅฃ่ฏญ | Workplace Oral",
|
|
85
|
+
"formality_tag": "๐ ๆญฃๅผๅบฆ: ไธญๆง | Neutral",
|
|
86
|
+
"scene_intro": "๐ฌ ๅบๆฏ | Scene",
|
|
87
|
+
"scene_text": "Redirecting sensitive or detailed discussions in meetings",
|
|
88
|
+
"expressions_title": "๐ฌ ๆ ธๅฟ่กจ่พพ | Key Expressions",
|
|
89
|
+
"expressions_formatted": [
|
|
90
|
+
{
|
|
91
|
+
"emoji": "โจ",
|
|
92
|
+
"phrase": "**Let's take this offline**",
|
|
93
|
+
"phrase_plain": "Let's take this offline",
|
|
94
|
+
"pronunciation": "๐ 'lets-take-this-off-line' - emphasis on 'offline'",
|
|
95
|
+
"usage": "๐ก Discuss privately later. Polite redirect in meetings."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"emoji": "โจ",
|
|
99
|
+
"phrase": "**We're spinning our wheels**",
|
|
100
|
+
"phrase_plain": "We're spinning our wheels",
|
|
101
|
+
"pronunciation": "๐ 'spinning-our-wheels' - all connect",
|
|
102
|
+
"usage": "๐ก Discussion is unproductive. Time to move on."
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"alternatives_title": "๐ ๅ
ถไป่ฏดๆณ | Alternatives",
|
|
106
|
+
"alternatives_formatted": "โข **Let's continue this separately**\nโข **Let's set up a separate call**\nโข **Let's park this for now**\nโข **This might be better as a follow-up**",
|
|
107
|
+
"chinglish_title": "โ ๏ธ Chinglish ้ท้ฑ | Chinglish Trap",
|
|
108
|
+
"chinglish_formatted": "โ Wrong: \"Let's **talk privately**\"\nโ
Correct: **Let's take this offline!**\n\n๐ 'Talk privately' sounds secretive or exclusionary. **Take offline** is the professional euphemism that sounds efficient, not secretive.",
|
|
109
|
+
"examples_title": "๐ฃ๏ธ ๅฏน่ฏ็คบไพ | Example Dialogues",
|
|
110
|
+
"examples_formatted": [
|
|
111
|
+
{
|
|
112
|
+
"situation_emoji": "๐",
|
|
113
|
+
"situation": "Sensitive HR issue",
|
|
114
|
+
"dialogue": "๐ฌ A: Some team members aren't pulling their weight...\n๐ฌ B: **Let's take this offline** and focus on process.\n๐ฌ A: Fair point. About the workflow...",
|
|
115
|
+
"key_phrase_highlight": "**take this offline**"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"situation_emoji": "โ๏ธ",
|
|
119
|
+
"situation": "Technical deep-dive",
|
|
120
|
+
"dialogue": "๐ฌ A: The API latency is caused byโ\n๐ฌ B: **We're spinning our wheels** on details. **Let's take this offline** with just engineering.\n๐ฌ A: You're right. Moving to timeline...",
|
|
121
|
+
"key_phrase_highlight": "**spinning our wheels / take offline**"
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
"extended_title": "๐ ๅปถไผธๅญฆไน | Extended Learning",
|
|
125
|
+
"extended_formatted": "๐ Related: **parking lot** | **side bar** | **back-channel**\n\n๐ Cultural Note: 'Take offline' = 'off the main line' (railway metaphor). Signals efficiency, not secrecy.\n\n๐ซ Common Mistakes:\n โข Using it to avoid difficult conversations\n โข Embarrassing the speaker\n โข Not following up\n\n๐ก Nuance: 'Spinning wheels' = car in mud, going nowhere. Use for unproductive discussions.",
|
|
126
|
+
"references_title": "๐ ๆๅจๅ่ | References",
|
|
127
|
+
"references_formatted": "๐ [Merriam-Webster](https://www.merriam-webster.com/dictionary/off-line) - Definition\n๐ฌ [YouGlish](https://youglish.com/pronounce/take%20this%20offline/english/us) - Real usage",
|
|
128
|
+
"footer": "โโโโโโโโโโโโโโโโโโโ\n๐
2026-02-25 | ๐ Take the quiz to earn XP!"
|
|
129
|
+
},
|
|
130
|
+
"audio": {
|
|
131
|
+
"enabled": true
|
|
132
|
+
},
|
|
133
|
+
"generated": true
|
|
134
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"prompt_version": "keypoint_gen_v2.1"
|
|
4
|
+
},
|
|
5
|
+
"date": "2026-02-25",
|
|
6
|
+
"topic_fingerprint": "workplace_boil_the_ocean",
|
|
7
|
+
"category": "oral",
|
|
8
|
+
"topic": "workplace",
|
|
9
|
+
"scene": {
|
|
10
|
+
"context": "You're in a strategic planning session or executive meeting. Someone proposes an overly ambitious scope. This idiom elegantly pushes back while sounding experienced and pragmatic.",
|
|
11
|
+
"formality": "formal"
|
|
12
|
+
},
|
|
13
|
+
"expressions": [
|
|
14
|
+
{
|
|
15
|
+
"phrase": "Let's not boil the ocean",
|
|
16
|
+
"pronunciation_tip": "'lets-not-boil-the-o-shun' - 'ocean' flows into 'shun' sound",
|
|
17
|
+
"usage_note": "Use when someone proposes something impossibly ambitious. This idiom means 'let's not try to do everything at once.' It signals strategic thinking and scope management."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"phrase": "We need to socialize this",
|
|
21
|
+
"pronunciation_tip": "'so-shuh-lize-this' - verb form, not the social media meaning",
|
|
22
|
+
"usage_note": "Use when a decision or idea needs to be shared with stakeholders for input and buy-in before finalizing. Very common in corporate decision-making."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"alternatives": [
|
|
26
|
+
"Let's not try to solve world hunger here",
|
|
27
|
+
"We should scope this down",
|
|
28
|
+
"Let's focus on what's achievable",
|
|
29
|
+
"This needs broader alignment"
|
|
30
|
+
],
|
|
31
|
+
"chinglish_trap": {
|
|
32
|
+
"wrong": "Don't do too much / Let's not be too ambitious / This is too big",
|
|
33
|
+
"correct": "Let's not boil the ocean",
|
|
34
|
+
"explanation": "Direct translations like 'don't do too much' sound unsophisticated in executive settings. 'Boil the ocean' is the idiom that shows you understand corporate strategic language. It's a metaphor for attempting something impossible (boiling the entire ocean) that originated in management consulting."
|
|
35
|
+
},
|
|
36
|
+
"examples": [
|
|
37
|
+
{
|
|
38
|
+
"situation": "Overly ambitious project scope",
|
|
39
|
+
"dialogue": [
|
|
40
|
+
"A: For Phase 1, let's rebuild the entire platform, add AI capabilities, and enter three new markets.",
|
|
41
|
+
"B: I appreciate the ambition, but let's not boil the ocean. What's the minimum viable scope that still moves the needle?",
|
|
42
|
+
"A: Fair enough. If we just focus on the platform rebuild first...",
|
|
43
|
+
"B: That's more like it. And we should socialize this with the regional teams before locking it down."
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"situation": "Unrealistic timeline expectations",
|
|
48
|
+
"dialogue": [
|
|
49
|
+
"A: The CEO wants a complete digital transformation by Q2.",
|
|
50
|
+
"B: Q2? That's boiling the ocean. We need to push back with a realistic phased approach.",
|
|
51
|
+
"A: Should I prepare a presentation with the revised timeline?",
|
|
52
|
+
"B: Yes, but socialize it with the key stakeholders first. Get alignment before going to the board."
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"extended_learning": {
|
|
57
|
+
"related_phrases": [
|
|
58
|
+
"move the needle - make meaningful progress",
|
|
59
|
+
"minimum viable - smallest workable version",
|
|
60
|
+
"low-hanging fruit - easy wins",
|
|
61
|
+
"nice-to-have vs must-have - prioritize features"
|
|
62
|
+
],
|
|
63
|
+
"cultural_note": "'Boil the ocean' originated in management consulting (McKinsey, BCG) in the 1980s. It's now standard C-suite language. Using it correctly signals you think strategically and understand scope trade-offs. The idiom is particularly powerful because it's visual and slightly humorous while making a serious point.",
|
|
64
|
+
"common_mistakes": [
|
|
65
|
+
"Using it too casually - it's for strategic discussions, not daily tasks",
|
|
66
|
+
"Using it to dismiss all ambitious ideas (some ambition is good)",
|
|
67
|
+
"Not offering an alternative scope after using it",
|
|
68
|
+
"Confusing 'socialize' with 'discuss' - socialize implies getting buy-in"
|
|
69
|
+
],
|
|
70
|
+
"nuance": "'Socialize this' is uniquely corporate. It means systematically sharing an idea with stakeholders to gather input and build consensus. It's more deliberate than just 'discussing'โit's a process. In contrast, 'boil the ocean' is about avoiding overreach."
|
|
71
|
+
},
|
|
72
|
+
"references": {
|
|
73
|
+
"dictionary": {
|
|
74
|
+
"source": "merriam-webster",
|
|
75
|
+
"url": "https://www.merriam-webster.com/dictionary/boil%20the%20ocean",
|
|
76
|
+
"note": "Definition of business idiom"
|
|
77
|
+
},
|
|
78
|
+
"usage_context": {
|
|
79
|
+
"source": "youglish",
|
|
80
|
+
"url": "https://youglish.com/pronounce/boil%20the%20ocean/english/us",
|
|
81
|
+
"note": "Hear it in executive contexts"
|
|
82
|
+
},
|
|
83
|
+
"etymology": {
|
|
84
|
+
"source": "hbr",
|
|
85
|
+
"url": "https://hbr.org/2019/01/consulting-lingo-explained",
|
|
86
|
+
"note": "Origin: 1980s management consulting"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"display": {
|
|
90
|
+
"title": "๐ข ไปๆฅ็ฅ่ฏ็น | Today's Knowledge Point",
|
|
91
|
+
"topic_tag": "๐ท๏ธ ไธป้ข: ่ๅบ้ซ็บง | Executive Workplace",
|
|
92
|
+
"formality_tag": "๐ ๆญฃๅผๅบฆ: ๆญฃๅผ | Formal",
|
|
93
|
+
"scene_intro": "๐ฌ ๅบๆฏ | Scene",
|
|
94
|
+
"scene_text": "Strategic planning or executive meeting - managing scope and expectations",
|
|
95
|
+
"expressions_title": "๐ฌ ๆ ธๅฟ่กจ่พพ | Key Expressions",
|
|
96
|
+
"expressions_formatted": [
|
|
97
|
+
{
|
|
98
|
+
"emoji": "โจ",
|
|
99
|
+
"phrase": "**Let's not boil the ocean**",
|
|
100
|
+
"phrase_plain": "Let's not boil the ocean",
|
|
101
|
+
"pronunciation": "๐ 'boil-the-o-shun' - ocean flows",
|
|
102
|
+
"usage": "๐ก Don't be impossibly ambitious. Shows strategic thinking."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"emoji": "โจ",
|
|
106
|
+
"phrase": "**We need to socialize this**",
|
|
107
|
+
"phrase_plain": "We need to socialize this",
|
|
108
|
+
"pronunciation": "๐ 'so-shuh-lize' - verb form",
|
|
109
|
+
"usage": "๐ก Share with stakeholders for buy-in before deciding."
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"alternatives_title": "๐ ๅ
ถไป่ฏดๆณ | Alternatives",
|
|
113
|
+
"alternatives_formatted": "โข **Let's scope this down**\nโข **Let's focus on what's achievable**\nโข **This needs broader alignment**\nโข **What's the minimum viable scope?**",
|
|
114
|
+
"chinglish_title": "โ ๏ธ Chinglish ้ท้ฑ | Chinglish Trap",
|
|
115
|
+
"chinglish_formatted": "โ Wrong: \"Don't do too much\" / \"This is too big\"\nโ
Correct: **Let's not boil the ocean!**\n\n๐ Direct translations sound unsophisticated. This idiom shows you understand C-suite language. Metaphor: attempting the impossible (boiling an entire ocean).",
|
|
116
|
+
"examples_title": "๐ฃ๏ธ ๅฏน่ฏ็คบไพ | Example Dialogues",
|
|
117
|
+
"examples_formatted": [
|
|
118
|
+
{
|
|
119
|
+
"situation_emoji": "๐ฏ",
|
|
120
|
+
"situation": "Overly ambitious scope",
|
|
121
|
+
"dialogue": "๐ฌ A: Let's rebuild everything AND add AI AND enter 3 markets!\n๐ฌ B: **Let's not boil the ocean.** What's the minimum viable scope?\n๐ฌ A: Focus on platform first?\n๐ฌ B: Better. **We should socialize this** with regional teams first.",
|
|
122
|
+
"key_phrase_highlight": "**boil the ocean / socialize**"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"situation_emoji": "โฑ๏ธ",
|
|
126
|
+
"situation": "Unrealistic timeline",
|
|
127
|
+
"dialogue": "๐ฌ A: CEO wants full digital transformation by Q2.\n๐ฌ B: Q2? **That's boiling the ocean.** We need a phased approach.\n๐ฌ A: Prepare revised timeline?\n๐ฌ B: Yes, but **socialize it with stakeholders first.**",
|
|
128
|
+
"key_phrase_highlight": "**boiling the ocean / socialize**"
|
|
129
|
+
}
|
|
130
|
+
],
|
|
131
|
+
"extended_title": "๐ ๅปถไผธๅญฆไน | Extended Learning",
|
|
132
|
+
"extended_formatted": "๐ Related: **move the needle** | **minimum viable** | **low-hanging fruit** | **nice-to-have vs must-have**\n\n๐ Cultural Note: 'Boil the ocean' = 1980s consulting lingo (McKinsey, BCG). Now standard C-suite language. Using it signals strategic thinking.\n\n๐ก Nuance: 'Socialize' โ just 'discuss'. It means systematically getting stakeholder buy-in.\n\n๐ซ Common Mistakes:\n โข Using it for daily tasks (too casual)\n โข Dismissing ALL ambition (some is good)\n โข Not offering alternative scope",
|
|
133
|
+
"references_title": "๐ ๆๅจๅ่ | References",
|
|
134
|
+
"references_formatted": "๐ [Merriam-Webster](https://www.merriam-webster.com/dictionary/boil%20the%20ocean) - Definition\n๐ฌ [YouGlish](https://youglish.com/pronounce/boil%20the%20ocean/english/us) - Executive contexts\n๐ [HBR](https://hbr.org/2019/01/consulting-lingo-explained) - Origins",
|
|
135
|
+
"footer": "โโโโโโโโโโโโโโโโโโโ\n๐
2026-02-25 | ๐ Take the quiz to earn XP!"
|
|
136
|
+
},
|
|
137
|
+
"audio": {
|
|
138
|
+
"enabled": true
|
|
139
|
+
},
|
|
140
|
+
"generated": true
|
|
141
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"prompt_version": "quiz_gen_v1.2"
|
|
4
|
+
},
|
|
5
|
+
"quiz_date": "2026-02-25",
|
|
6
|
+
"cefr_level": "A1",
|
|
7
|
+
"keypoint_fingerprint": "daily_life_thank_you",
|
|
8
|
+
"questions": [
|
|
9
|
+
{
|
|
10
|
+
"id": 1,
|
|
11
|
+
"type": "multiple_choice",
|
|
12
|
+
"question": "What do you say when someone helps you?",
|
|
13
|
+
"context": "A cashier hands you your change at a store.",
|
|
14
|
+
"options": [
|
|
15
|
+
"A. Hello",
|
|
16
|
+
"B. Thank you",
|
|
17
|
+
"C. Goodbye",
|
|
18
|
+
"D. Sorry"
|
|
19
|
+
],
|
|
20
|
+
"correct_answer": "B",
|
|
21
|
+
"explanation": "'Thank you' is what you say when someone helps you or gives you something. 'Hello' is for greeting, 'Goodbye' is for leaving, and 'Sorry' is for apologies.",
|
|
22
|
+
"xp_value": 10,
|
|
23
|
+
"display": {
|
|
24
|
+
"type_emoji": "๐ค",
|
|
25
|
+
"type_name": "้ๆฉ้ข | Multiple Choice",
|
|
26
|
+
"question_formatted": "๐ฌ What do you say when someone **helps you**?",
|
|
27
|
+
"context_formatted": "๐ช A cashier hands you your change.",
|
|
28
|
+
"options_formatted": [
|
|
29
|
+
"โฌ A. Hello",
|
|
30
|
+
"โฌ B. Thank you",
|
|
31
|
+
"โฌ C. Goodbye",
|
|
32
|
+
"โฌ D. Sorry"
|
|
33
|
+
],
|
|
34
|
+
"hint": "๐ก Think: what do you say when you get something?",
|
|
35
|
+
"correct_feedback": "โ
Correct! **'Thank you'** = ่ฐข่ฐข!",
|
|
36
|
+
"wrong_feedback": "โ Not quite. When someone helps you, say **'Thank you'**!",
|
|
37
|
+
"xp_display": "๐ +10 XP"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": 2,
|
|
42
|
+
"type": "chinglish_fix",
|
|
43
|
+
"question": "Fix this sentence:",
|
|
44
|
+
"chinglish_sentence": "Thank you very many for your help!",
|
|
45
|
+
"correct_answer": "Thank you very much",
|
|
46
|
+
"explanation": "'Many' is for things you can count (many apples, many people). 'Much' is for amount or degree (very much). This is a very common mistake!",
|
|
47
|
+
"xp_value": 15,
|
|
48
|
+
"display": {
|
|
49
|
+
"type_emoji": "๐ง",
|
|
50
|
+
"type_name": "Chinglish ไฟฎๆญฃ | Fix the Chinglish",
|
|
51
|
+
"question_formatted": "๐ง What's wrong with this sentence?",
|
|
52
|
+
"sentence_formatted": "๐ \"Thank you very **many** for your help!\"",
|
|
53
|
+
"hint": "๐ก 'Many' or 'Much' - which one for degree?",
|
|
54
|
+
"correct_feedback": "โ
Fixed! **'Thank you very much!'** sounds natural! ๐",
|
|
55
|
+
"wrong_feedback": "โ Use **'much'** not 'many' here. **'Thank you very much!'**",
|
|
56
|
+
"xp_display": "๐ +15 XP"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": 3,
|
|
61
|
+
"type": "fill_blank",
|
|
62
|
+
"question": "Complete the sentence:",
|
|
63
|
+
"context": "Your friend opens the door for you. You say: '___!'",
|
|
64
|
+
"word_bank": ["Thanks", "Hello", "Goodbye"],
|
|
65
|
+
"correct_answer": "Thanks",
|
|
66
|
+
"explanation": "'Thanks' is the casual short form of 'Thank you'. Use it with friends. 'Hello' is for greeting and 'Goodbye' is for leaving.",
|
|
67
|
+
"xp_value": 12,
|
|
68
|
+
"display": {
|
|
69
|
+
"type_emoji": "โ๏ธ",
|
|
70
|
+
"type_name": "ๅกซ็ฉบ้ข | Fill in the Blank",
|
|
71
|
+
"question_formatted": "โ๏ธ What do you say?",
|
|
72
|
+
"context_formatted": "๐ช Your friend opens the door for you. You say: '**___**!'",
|
|
73
|
+
"word_bank_formatted": "๐ฆ Options: [ **Thanks** | Hello | Goodbye ]",
|
|
74
|
+
"hint": "๐ก Which one means '่ฐข่ฐข'?",
|
|
75
|
+
"correct_feedback": "โ
Perfect! **'Thanks!'** is casual and friendly! ๐ฏ",
|
|
76
|
+
"wrong_feedback": "โ The answer was **'Thanks!'** - it means ่ฐข่ฐข!",
|
|
77
|
+
"xp_display": "๐ +12 XP"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"total_xp": 37,
|
|
82
|
+
"passing_score": 70,
|
|
83
|
+
"display": {
|
|
84
|
+
"header": "๐ ไปๆฅๆต้ช | Daily Quiz",
|
|
85
|
+
"date": "๐
2026-02-25",
|
|
86
|
+
"difficulty": "๐ Level: **A1** (ๅ
ฅ้จ็บง)",
|
|
87
|
+
"topic": "๐ท๏ธ Topic: **Thank You**",
|
|
88
|
+
"instructions": "๐ฏ 3้ๅฐ้ข๏ผ็ญๅฏน2้ๅฐฑ่ฟๅ
ณ๏ผ3 questions, get 2 right to pass!",
|
|
89
|
+
"progress_bar": "โฌโฌโฌ 0/3 questions",
|
|
90
|
+
"xp_summary": "๐ Total XP: 37 | ๐ Pass: 2/3 correct",
|
|
91
|
+
"footer": "โโโโโโโโโโโโโโโโโโโ\n๐ช Good luck! ๅ ๆฒน! ๐"
|
|
92
|
+
},
|
|
93
|
+
"generated": true
|
|
94
|
+
}
|