Skip to content

Commit c709270

Browse files
dbsectrainerclaude
andcommitted
Merge branch 'claude/add-lesson-interactive-practice-011CUvvpCvVLdirM9MCFi264' into claude/flutter-ui-overhaul-011CUvd9SCPCzVjz6oWsTTuJ
This merge combines the UI overhaul features with interactive practice functionality: UI Overhaul Features (PR #13): - Bottom navigation with 4 tabs (Home, Achievements, Profile, Settings) - Onboarding flow with animated welcome screens - Dark mode and accessibility features - Gamification system with 17 achievements - Streak tracking and daily goals - Enhanced audio player (speed control 0.5x-2.0x, loop mode) - Profile screen with stats and charts - Settings screen with customization options Interactive Practice Features (PR #14): - Interactive practice screen with multiple exercise types - Vocabulary section with translation toggle - Exercise completion tracking - Real-time progress indicators - Sample content for Days 1-3 (exercises and vocabulary) Conflict Resolutions: - lesson_screen.dart: Combined audio player enhancements (loop/speed) with practice/vocabulary sections - progress_service.dart: Merged exercise tracking methods with resetAll() functionality - Progress model now tracks both lesson and exercise completion 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2 parents 239aaca + b841cc8 commit c709270

File tree

14 files changed

+1773
-21
lines changed

14 files changed

+1773
-21
lines changed

assets/exercises/day1_en.json

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{
2+
"exercises": [
3+
{
4+
"id": "day1_mc1",
5+
"type": "multipleChoice",
6+
"question": "Which greeting is most appropriate in a formal setting?",
7+
"options": [
8+
"Hey!",
9+
"Good morning",
10+
"Yo!",
11+
"What's up?"
12+
],
13+
"correctOptionIndex": 1
14+
},
15+
{
16+
"id": "day1_mc2",
17+
"type": "multipleChoice",
18+
"question": "How do you respond to 'How are you?'",
19+
"options": [
20+
"I'm fine, thank you. And you?",
21+
"Nothing",
22+
"Yes",
23+
"Goodbye"
24+
],
25+
"correctOptionIndex": 0
26+
},
27+
{
28+
"id": "day1_fib1",
29+
"type": "fillInBlank",
30+
"question": "Fill in the blank: 'Nice to ____ you!'",
31+
"correctAnswer": "meet",
32+
"caseSensitive": false
33+
},
34+
{
35+
"id": "day1_fib2",
36+
"type": "fillInBlank",
37+
"question": "Fill in the blank: 'My ____ is John.'",
38+
"correctAnswer": "name",
39+
"acceptableAlternatives": ["Name"],
40+
"caseSensitive": false
41+
},
42+
{
43+
"id": "day1_trans1",
44+
"type": "translation",
45+
"question": "Translate to English:",
46+
"targetText": "Hello",
47+
"correctTranslation": "Hello",
48+
"acceptableAlternatives": ["Hi", "Hey", "Greetings"]
49+
},
50+
{
51+
"id": "day1_mc3",
52+
"type": "multipleChoice",
53+
"question": "What is an appropriate way to say goodbye?",
54+
"options": [
55+
"See you later",
56+
"Go away",
57+
"Stop talking",
58+
"Leave now"
59+
],
60+
"correctOptionIndex": 0
61+
},
62+
{
63+
"id": "day1_fib3",
64+
"type": "fillInBlank",
65+
"question": "Fill in the blank: '____ to meet you!'",
66+
"correctAnswer": "Nice",
67+
"acceptableAlternatives": ["Pleased", "Happy", "Good"],
68+
"caseSensitive": false
69+
},
70+
{
71+
"id": "day1_mc4",
72+
"type": "multipleChoice",
73+
"question": "Which is a polite way to introduce yourself?",
74+
"options": [
75+
"I'm the best",
76+
"My name is Sarah",
77+
"You should know me",
78+
"I don't care"
79+
],
80+
"correctOptionIndex": 1
81+
}
82+
]
83+
}

assets/exercises/day2_en.json

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"exercises": [
3+
{
4+
"id": "day2_mc1",
5+
"type": "multipleChoice",
6+
"question": "What comes after 'nine'?",
7+
"options": [
8+
"eight",
9+
"ten",
10+
"eleven",
11+
"twelve"
12+
],
13+
"correctOptionIndex": 1
14+
},
15+
{
16+
"id": "day2_fib1",
17+
"type": "fillInBlank",
18+
"question": "Fill in the blank: 'One, two, three, ____, five'",
19+
"correctAnswer": "four",
20+
"caseSensitive": false
21+
},
22+
{
23+
"id": "day2_mc2",
24+
"type": "multipleChoice",
25+
"question": "How do you write the number 15?",
26+
"options": [
27+
"fiveteen",
28+
"fifty",
29+
"fifteen",
30+
"fivetin"
31+
],
32+
"correctOptionIndex": 2
33+
},
34+
{
35+
"id": "day2_fib2",
36+
"type": "fillInBlank",
37+
"question": "What number comes before 'twenty'?",
38+
"correctAnswer": "nineteen",
39+
"caseSensitive": false
40+
},
41+
{
42+
"id": "day2_mc3",
43+
"type": "multipleChoice",
44+
"question": "Which is the correct spelling of 30?",
45+
"options": [
46+
"thirthy",
47+
"thirty",
48+
"therty",
49+
"threety"
50+
],
51+
"correctOptionIndex": 1
52+
},
53+
{
54+
"id": "day2_trans1",
55+
"type": "translation",
56+
"question": "Write this number in words:",
57+
"targetText": "7",
58+
"correctTranslation": "seven",
59+
"acceptableAlternatives": ["Seven"]
60+
},
61+
{
62+
"id": "day2_fib3",
63+
"type": "fillInBlank",
64+
"question": "Fill in the blank: 'Ten, twenty, ____, forty'",
65+
"correctAnswer": "thirty",
66+
"caseSensitive": false
67+
}
68+
]
69+
}

assets/exercises/day3_en.json

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
{
2+
"exercises": [
3+
{
4+
"id": "day3_mc1",
5+
"type": "multipleChoice",
6+
"question": "Which day comes after Monday?",
7+
"options": [
8+
"Sunday",
9+
"Tuesday",
10+
"Wednesday",
11+
"Saturday"
12+
],
13+
"correctOptionIndex": 1
14+
},
15+
{
16+
"id": "day3_mc2",
17+
"type": "multipleChoice",
18+
"question": "What is the first month of the year?",
19+
"options": [
20+
"December",
21+
"February",
22+
"January",
23+
"March"
24+
],
25+
"correctOptionIndex": 2
26+
},
27+
{
28+
"id": "day3_fib1",
29+
"type": "fillInBlank",
30+
"question": "Fill in the blank: 'Monday, Tuesday, ____'",
31+
"correctAnswer": "Wednesday",
32+
"caseSensitive": false
33+
},
34+
{
35+
"id": "day3_fib2",
36+
"type": "fillInBlank",
37+
"question": "Fill in the blank: 'January, February, ____'",
38+
"correctAnswer": "March",
39+
"caseSensitive": false
40+
},
41+
{
42+
"id": "day3_mc3",
43+
"type": "multipleChoice",
44+
"question": "Which month has the shortest name?",
45+
"options": [
46+
"July",
47+
"June",
48+
"May",
49+
"April"
50+
],
51+
"correctOptionIndex": 2
52+
},
53+
{
54+
"id": "day3_trans1",
55+
"type": "translation",
56+
"question": "What day is the last day of the work week?",
57+
"targetText": "Last work day before weekend",
58+
"correctTranslation": "Friday",
59+
"acceptableAlternatives": ["friday"]
60+
},
61+
{
62+
"id": "day3_mc4",
63+
"type": "multipleChoice",
64+
"question": "What are the weekend days?",
65+
"options": [
66+
"Monday and Friday",
67+
"Saturday and Sunday",
68+
"Thursday and Friday",
69+
"Tuesday and Wednesday"
70+
],
71+
"correctOptionIndex": 1
72+
},
73+
{
74+
"id": "day3_fib3",
75+
"type": "fillInBlank",
76+
"question": "Fill in the blank: 'Thursday, Friday, ____'",
77+
"correctAnswer": "Saturday",
78+
"acceptableAlternatives": ["saturday"],
79+
"caseSensitive": false
80+
}
81+
]
82+
}

assets/vocabulary/day1_en.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
{
2+
"vocabulary": [
3+
{
4+
"word": "Hello",
5+
"translation": "A greeting used when meeting someone",
6+
"phonetic": "/həˈloʊ/",
7+
"example": "Hello, how are you today?",
8+
"exampleTranslation": "A friendly greeting to start a conversation"
9+
},
10+
{
11+
"word": "Goodbye",
12+
"translation": "A farewell expression",
13+
"phonetic": "/ɡʊdˈbaɪ/",
14+
"example": "Goodbye, see you tomorrow!",
15+
"exampleTranslation": "A polite way to end a conversation"
16+
},
17+
{
18+
"word": "Please",
19+
"translation": "A polite word used when making requests",
20+
"phonetic": "/pliːz/",
21+
"example": "Could you help me, please?",
22+
"exampleTranslation": "Shows politeness when asking for something"
23+
},
24+
{
25+
"word": "Thank you",
26+
"translation": "Expression of gratitude",
27+
"phonetic": "/θæŋk juː/",
28+
"example": "Thank you for your help!",
29+
"exampleTranslation": "Showing appreciation for someone's actions"
30+
},
31+
{
32+
"word": "My name is",
33+
"translation": "Phrase used to introduce yourself",
34+
"phonetic": "/maɪ neɪm ɪz/",
35+
"example": "Hi, my name is Sarah.",
36+
"exampleTranslation": "Introducing yourself to someone new"
37+
},
38+
{
39+
"word": "Nice to meet you",
40+
"translation": "Polite expression when meeting someone for the first time",
41+
"phonetic": "/naɪs tə miːt juː/",
42+
"example": "Nice to meet you, John!",
43+
"exampleTranslation": "A friendly greeting for first encounters"
44+
},
45+
{
46+
"word": "How are you?",
47+
"translation": "A common question to ask about someone's well-being",
48+
"phonetic": "/haʊ ɑːr juː/",
49+
"example": "Hello! How are you doing today?",
50+
"exampleTranslation": "Asking about someone's current state"
51+
},
52+
{
53+
"word": "I'm fine",
54+
"translation": "A common response indicating you are well",
55+
"phonetic": "/aɪm faɪn/",
56+
"example": "I'm fine, thank you. And you?",
57+
"exampleTranslation": "Positive response to 'How are you?'"
58+
}
59+
]
60+
}

assets/vocabulary/day2_en.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
{
2+
"vocabulary": [
3+
{
4+
"word": "Zero",
5+
"translation": "The number 0",
6+
"phonetic": "/ˈzɪroʊ/",
7+
"example": "I have zero apples.",
8+
"exampleTranslation": "Indicating the absence of quantity"
9+
},
10+
{
11+
"word": "One",
12+
"translation": "The number 1",
13+
"phonetic": "/wʌn/",
14+
"example": "I need one ticket.",
15+
"exampleTranslation": "A single item"
16+
},
17+
{
18+
"word": "Five",
19+
"translation": "The number 5",
20+
"phonetic": "/faɪv/",
21+
"example": "There are five books on the table.",
22+
"exampleTranslation": "Counting to five items"
23+
},
24+
{
25+
"word": "Ten",
26+
"translation": "The number 10",
27+
"phonetic": "/tɛn/",
28+
"example": "I wake up at ten o'clock.",
29+
"exampleTranslation": "The number after nine"
30+
},
31+
{
32+
"word": "Twenty",
33+
"translation": "The number 20",
34+
"phonetic": "/ˈtwɛnti/",
35+
"example": "The book costs twenty dollars.",
36+
"exampleTranslation": "Two tens"
37+
},
38+
{
39+
"word": "Hundred",
40+
"translation": "The number 100",
41+
"phonetic": "/ˈhʌndrəd/",
42+
"example": "One hundred people attended.",
43+
"exampleTranslation": "Ten times ten"
44+
},
45+
{
46+
"word": "First",
47+
"translation": "Position number 1 in a sequence",
48+
"phonetic": "/fɜːrst/",
49+
"example": "She finished first in the race.",
50+
"exampleTranslation": "Ordinal number for one"
51+
},
52+
{
53+
"word": "Second",
54+
"translation": "Position number 2 in a sequence",
55+
"phonetic": "/ˈsɛkənd/",
56+
"example": "He came in second place.",
57+
"exampleTranslation": "Ordinal number for two"
58+
}
59+
]
60+
}

0 commit comments

Comments
 (0)