""" Comprehensive Speech Therapy Exercises Database Categories: Fundamentals, Speech Practice, Visual Learning, Sound Imitation Languages: English (en), French (fr) """ from typing import List, Dict, Optional from pydantic import BaseModel from enum import Enum class ExerciseType(str, Enum): # Fundamentals BREATHING = "breathing" ARTICULATION = "articulation" PHONEME = "phoneme" # Speech Practice WORD_REPETITION = "word_repetition" SENTENCE_READING = "sentence_reading" TONGUE_TWISTER = "tongue_twister" # Visual Learning COLOR = "color" OBJECT = "object" ANIMAL = "animal" ACTION = "action" # Sound Imitation ANIMAL_SOUND = "animal_sound" ENVIRONMENTAL_SOUND = "environmental_sound" class Difficulty(str, Enum): EASY = "easy" MEDIUM = "medium" HARD = "hard" class Category(BaseModel): id: str name: Dict[str, str] # {"en": "...", "fr": "..."} description: Dict[str, str] icon: str subcategories: List[str] class Exercise(BaseModel): id: str type: ExerciseType category: str subcategory: str difficulty: Difficulty title: Dict[str, str] target_text: Dict[str, str] instructions: Dict[str, str] image_url: Optional[str] = None audio_url: Optional[str] = None phoneme_focus: Optional[List[str]] = None # ============================================================================= # CATEGORIES # ============================================================================= CATEGORIES: List[Dict] = [ { "id": "fundamentals", "name": {"en": "Fundamentals", "fr": "Fondamentaux"}, "description": { "en": "Build your foundation with breathing and articulation exercises", "fr": "Construisez votre base avec des exercices de respiration et d'articulation" }, "icon": "🎯", "subcategories": ["breathing", "articulation", "phoneme"] }, { "id": "speech_practice", "name": {"en": "Speech Practice", "fr": "Pratique de la Parole"}, "description": { "en": "Practice words, sentences, and tongue twisters", "fr": "Pratiquez des mots, des phrases et des virelangues" }, "icon": "📖", "subcategories": ["word_repetition", "sentence_reading", "tongue_twister"] }, { "id": "visual_learning", "name": {"en": "Visual Learning", "fr": "Apprentissage Visuel"}, "description": { "en": "Learn by identifying colors, objects, animals, and actions", "fr": "Apprenez en identifiant les couleurs, objets, animaux et actions" }, "icon": "🖼️", "subcategories": ["color", "object", "animal", "action"] }, { "id": "sound_imitation", "name": {"en": "Sound Imitation", "fr": "Imitation de Sons"}, "description": { "en": "Imitate animal and environmental sounds", "fr": "Imitez les sons d'animaux et de l'environnement" }, "icon": "🔊", "subcategories": ["animal_sound", "environmental_sound"] } ] SUBCATEGORIES: Dict[str, Dict] = { "breathing": { "name": {"en": "Breathing Exercises", "fr": "Exercices de Respiration"}, "description": {"en": "Control your breath for better speech", "fr": "Contrôlez votre respiration pour mieux parler"} }, "articulation": { "name": {"en": "Articulation Drills", "fr": "Exercices d'Articulation"}, "description": {"en": "Improve mouth and tongue movements", "fr": "Améliorez les mouvements de la bouche et de la langue"} }, "phoneme": { "name": {"en": "Phoneme Practice", "fr": "Pratique des Phonèmes"}, "description": {"en": "Master specific sounds like R, S, TH", "fr": "Maîtrisez des sons spécifiques comme R, S, CH"} }, "word_repetition": { "name": {"en": "Word Repetition", "fr": "Répétition de Mots"}, "description": {"en": "Repeat words clearly", "fr": "Répétez les mots clairement"} }, "sentence_reading": { "name": {"en": "Sentence Reading", "fr": "Lecture de Phrases"}, "description": {"en": "Read complete sentences", "fr": "Lisez des phrases complètes"} }, "tongue_twister": { "name": {"en": "Tongue Twisters", "fr": "Virelangues"}, "description": {"en": "Challenge yourself with tricky phrases", "fr": "Défiez-vous avec des phrases difficiles"} }, "color": { "name": {"en": "Colors", "fr": "Couleurs"}, "description": {"en": "Identify and say color names", "fr": "Identifiez et dites les noms des couleurs"} }, "object": { "name": {"en": "Objects", "fr": "Objets"}, "description": {"en": "Name everyday objects", "fr": "Nommez des objets du quotidien"} }, "animal": { "name": {"en": "Animals", "fr": "Animaux"}, "description": {"en": "Identify animals by sight", "fr": "Identifiez les animaux à vue"} }, "action": { "name": {"en": "Actions", "fr": "Actions"}, "description": {"en": "Describe what people are doing", "fr": "Décrivez ce que font les gens"} }, "animal_sound": { "name": {"en": "Animal Sounds", "fr": "Sons d'Animaux"}, "description": {"en": "Imitate animal sounds", "fr": "Imitez les sons des animaux"} }, "environmental_sound": { "name": {"en": "Environmental Sounds", "fr": "Sons de l'Environnement"}, "description": {"en": "Imitate sounds around us", "fr": "Imitez les sons autour de nous"} } } # ============================================================================= # EXERCISES DATABASE # ============================================================================= EXERCISES: List[Dict] = [ # ========================================================================= # FUNDAMENTALS - Breathing # ========================================================================= { "id": "breath-001", "type": "breathing", "category": "fundamentals", "subcategory": "breathing", "difficulty": "easy", "title": {"en": "Deep Belly Breathing", "fr": "Respiration Abdominale"}, "target_text": {"en": "Breathe in slowly through your nose, hold, breathe out through your mouth", "fr": "Inspirez lentement par le nez, retenez, expirez par la bouche"}, "instructions": {"en": "Place your hand on your belly. Breathe in for 4 seconds, hold for 2, breathe out for 4. Repeat 3 times.", "fr": "Placez votre main sur le ventre. Inspirez 4 secondes, retenez 2, expirez 4. Répétez 3 fois."}, }, { "id": "breath-002", "type": "breathing", "category": "fundamentals", "subcategory": "breathing", "difficulty": "easy", "title": {"en": "Candle Blow", "fr": "Souffler la Bougie"}, "target_text": {"en": "Take a deep breath and blow out slowly like blowing a candle", "fr": "Prenez une grande inspiration et soufflez doucement comme une bougie"}, "instructions": {"en": "Imagine a candle in front of you. Take a deep breath and blow slowly to make the flame flicker but not go out.", "fr": "Imaginez une bougie devant vous. Inspirez et soufflez doucement pour faire vaciller la flamme sans l'éteindre."}, }, { "id": "breath-003", "type": "breathing", "category": "fundamentals", "subcategory": "breathing", "difficulty": "medium", "title": {"en": "Sustained Breath", "fr": "Souffle Prolongé"}, "target_text": {"en": "Aaaaaaaaahhhhhh", "fr": "Aaaaaaaaahhhhhh"}, "instructions": {"en": "Take a deep breath and say 'Ahhh' for as long as you can. Try to reach 10 seconds!", "fr": "Inspirez profondément et dites 'Ahhh' aussi longtemps que possible. Essayez d'atteindre 10 secondes!"}, }, # ========================================================================= # FUNDAMENTALS - Articulation # ========================================================================= { "id": "artic-001", "type": "articulation", "category": "fundamentals", "subcategory": "articulation", "difficulty": "easy", "title": {"en": "Lip Warm-up", "fr": "Échauffement des Lèvres"}, "target_text": {"en": "Ma ma ma, Pa pa pa, Ba ba ba", "fr": "Ma ma ma, Pa pa pa, Ba ba ba"}, "instructions": {"en": "Say each syllable clearly, focusing on your lip movements. Repeat 3 times.", "fr": "Prononcez chaque syllabe clairement en vous concentrant sur vos lèvres. Répétez 3 fois."}, }, { "id": "artic-002", "type": "articulation", "category": "fundamentals", "subcategory": "articulation", "difficulty": "easy", "title": {"en": "Tongue Stretch", "fr": "Étirement de la Langue"}, "target_text": {"en": "La la la, Ta ta ta, Da da da", "fr": "La la la, Ta ta ta, Da da da"}, "instructions": {"en": "Touch the roof of your mouth with your tongue for each syllable. Feel the movement!", "fr": "Touchez le palais avec votre langue pour chaque syllabe. Sentez le mouvement!"}, }, { "id": "artic-003", "type": "articulation", "category": "fundamentals", "subcategory": "articulation", "difficulty": "medium", "title": {"en": "Jaw Exercise", "fr": "Exercice de Mâchoire"}, "target_text": {"en": "Wa wa wa, Ya ya ya, Oo ee oo ee", "fr": "Oua oua oua, Ya ya ya, Ou i ou i"}, "instructions": {"en": "Open your mouth wide for each sound. Feel your jaw moving up and down.", "fr": "Ouvrez grand la bouche pour chaque son. Sentez votre mâchoire bouger."}, }, # ========================================================================= # FUNDAMENTALS - Phoneme Practice # ========================================================================= { "id": "phon-r-001", "type": "phoneme", "category": "fundamentals", "subcategory": "phoneme", "difficulty": "medium", "title": {"en": "R Sound Practice", "fr": "Pratique du Son R"}, "target_text": {"en": "Run, red, rain, rabbit, river", "fr": "Rue, rouge, rire, rat, rivière"}, "instructions": {"en": "Focus on the 'R' sound at the beginning of each word. Let your tongue vibrate slightly.", "fr": "Concentrez-vous sur le son 'R' au début de chaque mot. Laissez votre langue vibrer légèrement."}, "phoneme_focus": ["R"] }, { "id": "phon-s-001", "type": "phoneme", "category": "fundamentals", "subcategory": "phoneme", "difficulty": "easy", "title": {"en": "S Sound Practice", "fr": "Pratique du Son S"}, "target_text": {"en": "Sun, see, song, seven, smile", "fr": "Sol, sac, sept, soir, sourire"}, "instructions": {"en": "Make a hissing sound like a snake. Keep your tongue behind your teeth.", "fr": "Faites un son sifflant comme un serpent. Gardez la langue derrière les dents."}, "phoneme_focus": ["S"] }, { "id": "phon-th-001", "type": "phoneme", "category": "fundamentals", "subcategory": "phoneme", "difficulty": "hard", "title": {"en": "TH Sound Practice", "fr": "Pratique du Son TH"}, "target_text": {"en": "Think, this, that, three, thank", "fr": "Think, this, that, three, thank"}, "instructions": {"en": "Put your tongue between your teeth and blow air. This sound doesn't exist in French!", "fr": "Mettez la langue entre les dents et soufflez. Ce son n'existe pas en français!"}, "phoneme_focus": ["TH"] }, { "id": "phon-l-001", "type": "phoneme", "category": "fundamentals", "subcategory": "phoneme", "difficulty": "easy", "title": {"en": "L Sound Practice", "fr": "Pratique du Son L"}, "target_text": {"en": "Love, light, look, lion, lake", "fr": "Lune, livre, lac, lion, lait"}, "instructions": {"en": "Touch the roof of your mouth with the tip of your tongue.", "fr": "Touchez le palais avec le bout de la langue."}, "phoneme_focus": ["L"] }, { "id": "phon-ch-001", "type": "phoneme", "category": "fundamentals", "subcategory": "phoneme", "difficulty": "medium", "title": {"en": "CH Sound Practice", "fr": "Pratique du Son CH"}, "target_text": {"en": "Chair, cheese, chicken, chocolate, church", "fr": "Chat, chien, chose, chou, chaud"}, "instructions": {"en": "Push air through your teeth with rounded lips.", "fr": "Poussez l'air entre vos dents avec les lèvres arrondies."}, "phoneme_focus": ["CH", "SH"] }, # ========================================================================= # SPEECH PRACTICE - Word Repetition # ========================================================================= { "id": "word-001", "type": "word_repetition", "category": "speech_practice", "subcategory": "word_repetition", "difficulty": "easy", "title": {"en": "Greetings", "fr": "Salutations"}, "target_text": {"en": "Hello, Goodbye, Please, Thank you", "fr": "Bonjour, Au revoir, S'il vous plaît, Merci"}, "instructions": {"en": "Say each word clearly with a pause between them.", "fr": "Dites chaque mot clairement avec une pause entre eux."}, }, { "id": "word-002", "type": "word_repetition", "category": "speech_practice", "subcategory": "word_repetition", "difficulty": "easy", "title": {"en": "Numbers 1-10", "fr": "Chiffres 1-10"}, "target_text": {"en": "One, two, three, four, five, six, seven, eight, nine, ten", "fr": "Un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix"}, "instructions": {"en": "Count clearly and steadily. Don't rush!", "fr": "Comptez clairement et régulièrement. Ne vous précipitez pas!"}, }, { "id": "word-003", "type": "word_repetition", "category": "speech_practice", "subcategory": "word_repetition", "difficulty": "medium", "title": {"en": "Days of the Week", "fr": "Jours de la Semaine"}, "target_text": {"en": "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", "fr": "Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche"}, "instructions": {"en": "Say each day with emphasis on the first syllable.", "fr": "Dites chaque jour en accentuant la première syllabe."}, }, # ========================================================================= # SPEECH PRACTICE - Sentence Reading # ========================================================================= { "id": "sent-001", "type": "sentence_reading", "category": "speech_practice", "subcategory": "sentence_reading", "difficulty": "easy", "title": {"en": "Simple Introduction", "fr": "Introduction Simple"}, "target_text": {"en": "Hello, my name is... Nice to meet you!", "fr": "Bonjour, je m'appelle... Enchanté!"}, "instructions": {"en": "Replace '...' with your name. Speak clearly and smile!", "fr": "Remplacez '...' par votre nom. Parlez clairement et souriez!"}, }, { "id": "sent-002", "type": "sentence_reading", "category": "speech_practice", "subcategory": "sentence_reading", "difficulty": "easy", "title": {"en": "How Are You?", "fr": "Comment Allez-Vous?"}, "target_text": {"en": "How are you today? I am fine, thank you.", "fr": "Comment allez-vous aujourd'hui? Je vais bien, merci."}, "instructions": {"en": "Practice this common conversation with natural intonation.", "fr": "Pratiquez cette conversation courante avec une intonation naturelle."}, }, { "id": "sent-003", "type": "sentence_reading", "category": "speech_practice", "subcategory": "sentence_reading", "difficulty": "medium", "title": {"en": "Weather Talk", "fr": "Parler de la Météo"}, "target_text": {"en": "The weather is beautiful today. The sun is shining brightly.", "fr": "Il fait beau aujourd'hui. Le soleil brille."}, "instructions": {"en": "Read the sentences with expression. Sound happy about the weather!", "fr": "Lisez avec expression. Montrez que vous êtes content du temps!"}, }, { "id": "sent-004", "type": "sentence_reading", "category": "speech_practice", "subcategory": "sentence_reading", "difficulty": "hard", "title": {"en": "At the Restaurant", "fr": "Au Restaurant"}, "target_text": {"en": "I would like to order the fish, please. Could I also have some water?", "fr": "Je voudrais commander le poisson, s'il vous plaît. Puis-je aussi avoir de l'eau?"}, "instructions": {"en": "Practice polite restaurant phrases. Speak clearly to be understood.", "fr": "Pratiquez les phrases polies au restaurant. Parlez clairement pour être compris."}, }, # ========================================================================= # SPEECH PRACTICE - Tongue Twisters # ========================================================================= { "id": "twist-001", "type": "tongue_twister", "category": "speech_practice", "subcategory": "tongue_twister", "difficulty": "medium", "title": {"en": "She Sells Seashells", "fr": "Les Chaussettes de l'Archiduchesse"}, "target_text": {"en": "She sells seashells by the seashore", "fr": "Les chaussettes de l'archiduchesse sont-elles sèches ou archi-sèches"}, "instructions": {"en": "Start slowly, then try to speed up while staying clear.", "fr": "Commencez lentement, puis essayez d'accélérer tout en restant clair."}, "phoneme_focus": ["S", "SH"] }, { "id": "twist-002", "type": "tongue_twister", "category": "speech_practice", "subcategory": "tongue_twister", "difficulty": "hard", "title": {"en": "Peter Piper", "fr": "Un Chasseur"}, "target_text": {"en": "Peter Piper picked a peck of pickled peppers", "fr": "Un chasseur sachant chasser sait chasser sans son chien"}, "instructions": {"en": "Focus on the 'P' sounds. Keep your lips tight.", "fr": "Concentrez-vous sur les sons 'CH'. Gardez la langue stable."}, "phoneme_focus": ["P"] }, { "id": "twist-003", "type": "tongue_twister", "category": "speech_practice", "subcategory": "tongue_twister", "difficulty": "hard", "title": {"en": "Red Lorry Yellow Lorry", "fr": "Trois Tortues"}, "target_text": {"en": "Red lorry, yellow lorry, red lorry, yellow lorry", "fr": "Trois tortues trottaient sur trois toits très étroits"}, "instructions": {"en": "Practice the R and L sounds alternating. This is challenging!", "fr": "Pratiquez les sons T et R en alternance. C'est un défi!"}, "phoneme_focus": ["R", "L"] }, { "id": "twist-004", "type": "tongue_twister", "category": "speech_practice", "subcategory": "tongue_twister", "difficulty": "medium", "title": {"en": "Unique New York", "fr": "Panier Piano"}, "target_text": {"en": "Unique New York, you know you need unique New York", "fr": "Piano panier, panier piano"}, "instructions": {"en": "Focus on the 'N' and 'Y' sounds.", "fr": "Concentrez-vous sur les sons 'P' et 'N'."}, "phoneme_focus": ["N", "Y"] }, # ========================================================================= # VISUAL LEARNING - Colors # ========================================================================= { "id": "color-001", "type": "color", "category": "visual_learning", "subcategory": "color", "difficulty": "easy", "title": {"en": "Red", "fr": "Rouge"}, "target_text": {"en": "Red", "fr": "Rouge"}, "instructions": {"en": "Look at the color and say its name.", "fr": "Regardez la couleur et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1562157873-818bc0726f68?w=400&h=400&fit=crop" }, { "id": "color-002", "type": "color", "category": "visual_learning", "subcategory": "color", "difficulty": "easy", "title": {"en": "Blue", "fr": "Bleu"}, "target_text": {"en": "Blue", "fr": "Bleu"}, "instructions": {"en": "Look at the color and say its name.", "fr": "Regardez la couleur et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1579546929518-9e396f3cc809?w=400&h=400&fit=crop" }, { "id": "color-003", "type": "color", "category": "visual_learning", "subcategory": "color", "difficulty": "easy", "title": {"en": "Yellow", "fr": "Jaune"}, "target_text": {"en": "Yellow", "fr": "Jaune"}, "instructions": {"en": "Look at the color and say its name.", "fr": "Regardez la couleur et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1495001258031-d1b407bc1776?w=400&h=400&fit=crop" }, { "id": "color-004", "type": "color", "category": "visual_learning", "subcategory": "color", "difficulty": "easy", "title": {"en": "Green", "fr": "Vert"}, "target_text": {"en": "Green", "fr": "Vert"}, "instructions": {"en": "Look at the color and say its name.", "fr": "Regardez la couleur et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1464820453369-31d2c0b651af?w=400&h=400&fit=crop" }, { "id": "color-005", "type": "color", "category": "visual_learning", "subcategory": "color", "difficulty": "easy", "title": {"en": "Orange", "fr": "Orange"}, "target_text": {"en": "Orange", "fr": "Orange"}, "instructions": {"en": "Look at the color and say its name.", "fr": "Regardez la couleur et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1557800636-894a64c1696f?w=400&h=400&fit=crop" }, { "id": "color-006", "type": "color", "category": "visual_learning", "subcategory": "color", "difficulty": "easy", "title": {"en": "Purple", "fr": "Violet"}, "target_text": {"en": "Purple", "fr": "Violet"}, "instructions": {"en": "Look at the color and say its name.", "fr": "Regardez la couleur et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1528459801416-a9e53bbf4e17?w=400&h=400&fit=crop" }, # ========================================================================= # VISUAL LEARNING - Objects # ========================================================================= { "id": "obj-001", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "easy", "title": {"en": "Apple", "fr": "Pomme"}, "target_text": {"en": "Apple", "fr": "Pomme"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1584306670957-acf935f5033c?w=400&h=400&fit=crop" }, { "id": "obj-002", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "easy", "title": {"en": "Book", "fr": "Livre"}, "target_text": {"en": "Book", "fr": "Livre"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1544947950-fa07a98d237f?w=400&h=400&fit=crop" }, { "id": "obj-003", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "easy", "title": {"en": "Car", "fr": "Voiture"}, "target_text": {"en": "Car", "fr": "Voiture"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1502877338535-766e1452684a?w=400&h=400&fit=crop" }, { "id": "obj-004", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "easy", "title": {"en": "Chair", "fr": "Chaise"}, "target_text": {"en": "Chair", "fr": "Chaise"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1503602642458-232111445657?w=400&h=400&fit=crop" }, { "id": "obj-005", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "easy", "title": {"en": "House", "fr": "Maison"}, "target_text": {"en": "House", "fr": "Maison"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1518780664697-55e3ad937233?w=400&h=400&fit=crop" }, { "id": "obj-006", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "medium", "title": {"en": "Telephone", "fr": "Téléphone"}, "target_text": {"en": "Telephone", "fr": "Téléphone"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1511707171634-5f897ff02aa9?w=400&h=400&fit=crop" }, { "id": "obj-007", "type": "object", "category": "visual_learning", "subcategory": "object", "difficulty": "medium", "title": {"en": "Umbrella", "fr": "Parapluie"}, "target_text": {"en": "Umbrella", "fr": "Parapluie"}, "instructions": {"en": "Look at the picture and say what you see.", "fr": "Regardez l'image et dites ce que vous voyez."}, "image_url": "https://images.unsplash.com/photo-1534309466160-70b22cc6252c?w=400&h=400&fit=crop" }, # ========================================================================= # VISUAL LEARNING - Animals # ========================================================================= { "id": "animal-001", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "easy", "title": {"en": "Dog", "fr": "Chien"}, "target_text": {"en": "Dog", "fr": "Chien"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1587300003388-59208cc962cb?w=400&h=400&fit=crop" }, { "id": "animal-002", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "easy", "title": {"en": "Cat", "fr": "Chat"}, "target_text": {"en": "Cat", "fr": "Chat"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=400&h=400&fit=crop" }, { "id": "animal-003", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "easy", "title": {"en": "Bird", "fr": "Oiseau"}, "target_text": {"en": "Bird", "fr": "Oiseau"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1522926193341-e9ffd686c60f?w=400&h=400&fit=crop" }, { "id": "animal-004", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "easy", "title": {"en": "Fish", "fr": "Poisson"}, "target_text": {"en": "Fish", "fr": "Poisson"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1524704654690-b56c05c78a00?w=400&h=400&fit=crop" }, { "id": "animal-005", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "medium", "title": {"en": "Elephant", "fr": "Éléphant"}, "target_text": {"en": "Elephant", "fr": "Éléphant"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1557050543-4d5f4e07ef46?w=400&h=400&fit=crop" }, { "id": "animal-006", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "medium", "title": {"en": "Lion", "fr": "Lion"}, "target_text": {"en": "Lion", "fr": "Lion"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1546182990-dffeafbe841d?w=400&h=400&fit=crop" }, { "id": "animal-007", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "medium", "title": {"en": "Butterfly", "fr": "Papillon"}, "target_text": {"en": "Butterfly", "fr": "Papillon"}, "instructions": {"en": "Look at the animal and say its name.", "fr": "Regardez l'animal et dites son nom."}, "image_url": "https://images.unsplash.com/photo-1452570053594-1b985d6ea890?w=400&h=400&fit=crop" }, { "id": "animal-008", "type": "animal", "category": "visual_learning", "subcategory": "animal", "difficulty": "hard", "title": {"en": "Hippopotamus", "fr": "Hippopotame"}, "target_text": {"en": "Hippopotamus", "fr": "Hippopotame"}, "instructions": {"en": "Look at the animal and say its name. This is a long word!", "fr": "Regardez l'animal et dites son nom. C'est un mot long!"}, "image_url": "https://images.unsplash.com/photo-1517840933437-c41356892b35?w=400&h=400&fit=crop" }, # ========================================================================= # VISUAL LEARNING - Actions # ========================================================================= { "id": "action-001", "type": "action", "category": "visual_learning", "subcategory": "action", "difficulty": "easy", "title": {"en": "Running", "fr": "Courir"}, "target_text": {"en": "Running", "fr": "Courir"}, "instructions": {"en": "Look at the action and say what the person is doing.", "fr": "Regardez l'action et dites ce que fait la personne."}, "image_url": "https://images.unsplash.com/photo-1552674605-db6ffd4facb5?w=400&h=400&fit=crop" }, { "id": "action-002", "type": "action", "category": "visual_learning", "subcategory": "action", "difficulty": "easy", "title": {"en": "Eating", "fr": "Manger"}, "target_text": {"en": "Eating", "fr": "Manger"}, "instructions": {"en": "Look at the action and say what the person is doing.", "fr": "Regardez l'action et dites ce que fait la personne."}, "image_url": "https://images.unsplash.com/photo-1504674900247-0877df9cc836?w=400&h=400&fit=crop" }, { "id": "action-003", "type": "action", "category": "visual_learning", "subcategory": "action", "difficulty": "easy", "title": {"en": "Sleeping", "fr": "Dormir"}, "target_text": {"en": "Sleeping", "fr": "Dormir"}, "instructions": {"en": "Look at the action and say what the person is doing.", "fr": "Regardez l'action et dites ce que fait la personne."}, "image_url": "https://images.unsplash.com/photo-1541781774459-bb2af2f05b55?w=400&h=400&fit=crop" }, { "id": "action-004", "type": "action", "category": "visual_learning", "subcategory": "action", "difficulty": "easy", "title": {"en": "Reading", "fr": "Lire"}, "target_text": {"en": "Reading", "fr": "Lire"}, "instructions": {"en": "Look at the action and say what the person is doing.", "fr": "Regardez l'action et dites ce que fait la personne."}, "image_url": "https://images.unsplash.com/photo-1506880018603-83d5b814b5a6?w=400&h=400&fit=crop" }, { "id": "action-005", "type": "action", "category": "visual_learning", "subcategory": "action", "difficulty": "medium", "title": {"en": "Swimming", "fr": "Nager"}, "target_text": {"en": "Swimming", "fr": "Nager"}, "instructions": {"en": "Look at the action and say what the person is doing.", "fr": "Regardez l'action et dites ce que fait la personne."}, "image_url": "https://images.unsplash.com/photo-1530549387789-4c1017266635?w=400&h=400&fit=crop" }, # ========================================================================= # SOUND IMITATION - Animal Sounds # ========================================================================= { "id": "asound-001", "type": "animal_sound", "category": "sound_imitation", "subcategory": "animal_sound", "difficulty": "easy", "title": {"en": "Dog Sound", "fr": "Son du Chien"}, "target_text": {"en": "Woof woof", "fr": "Ouaf ouaf"}, "instructions": {"en": "Imitate the sound a dog makes!", "fr": "Imitez le son que fait un chien!"}, "image_url": "https://images.unsplash.com/photo-1587300003388-59208cc962cb?w=400&h=400&fit=crop" }, { "id": "asound-002", "type": "animal_sound", "category": "sound_imitation", "subcategory": "animal_sound", "difficulty": "easy", "title": {"en": "Cat Sound", "fr": "Son du Chat"}, "target_text": {"en": "Meow meow", "fr": "Miaou miaou"}, "instructions": {"en": "Imitate the sound a cat makes!", "fr": "Imitez le son que fait un chat!"}, "image_url": "https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=400&h=400&fit=crop" }, { "id": "asound-003", "type": "animal_sound", "category": "sound_imitation", "subcategory": "animal_sound", "difficulty": "easy", "title": {"en": "Cow Sound", "fr": "Son de la Vache"}, "target_text": {"en": "Moo moo", "fr": "Meuh meuh"}, "instructions": {"en": "Imitate the sound a cow makes!", "fr": "Imitez le son que fait une vache!"}, "image_url": "https://images.unsplash.com/photo-1570042225831-d98fa7577f1e?w=400&h=400&fit=crop" }, { "id": "asound-004", "type": "animal_sound", "category": "sound_imitation", "subcategory": "animal_sound", "difficulty": "easy", "title": {"en": "Duck Sound", "fr": "Son du Canard"}, "target_text": {"en": "Quack quack", "fr": "Coin coin"}, "instructions": {"en": "Imitate the sound a duck makes!", "fr": "Imitez le son que fait un canard!"}, "image_url": "https://images.unsplash.com/photo-1459682687441-7761439a709d?w=400&h=400&fit=crop" }, { "id": "asound-005", "type": "animal_sound", "category": "sound_imitation", "subcategory": "animal_sound", "difficulty": "medium", "title": {"en": "Lion Sound", "fr": "Son du Lion"}, "target_text": {"en": "Roar!", "fr": "Grrrr!"}, "instructions": {"en": "Imitate the sound a lion makes! Be loud!", "fr": "Imitez le son que fait un lion! Soyez fort!"}, "image_url": "https://images.unsplash.com/photo-1546182990-dffeafbe841d?w=400&h=400&fit=crop" }, { "id": "asound-006", "type": "animal_sound", "category": "sound_imitation", "subcategory": "animal_sound", "difficulty": "medium", "title": {"en": "Snake Sound", "fr": "Son du Serpent"}, "target_text": {"en": "Sssssss", "fr": "Sssssss"}, "instructions": {"en": "Imitate the hissing sound a snake makes!", "fr": "Imitez le sifflement que fait un serpent!"}, "image_url": "https://images.unsplash.com/photo-1531386151447-fd76ad50012f?w=400&h=400&fit=crop" }, # ========================================================================= # SOUND IMITATION - Environmental Sounds # ========================================================================= { "id": "esound-001", "type": "environmental_sound", "category": "sound_imitation", "subcategory": "environmental_sound", "difficulty": "easy", "title": {"en": "Car Horn", "fr": "Klaxon"}, "target_text": {"en": "Beep beep", "fr": "Pouet pouet"}, "instructions": {"en": "Imitate the sound of a car horn!", "fr": "Imitez le son d'un klaxon!"}, "image_url": "https://images.unsplash.com/photo-1502877338535-766e1452684a?w=400&h=400&fit=crop" }, { "id": "esound-002", "type": "environmental_sound", "category": "sound_imitation", "subcategory": "environmental_sound", "difficulty": "easy", "title": {"en": "Train Sound", "fr": "Son du Train"}, "target_text": {"en": "Choo choo", "fr": "Tchou tchou"}, "instructions": {"en": "Imitate the sound of a train!", "fr": "Imitez le son d'un train!"}, "image_url": "https://images.unsplash.com/photo-1474487548417-781cb71495f3?w=400&h=400&fit=crop" }, { "id": "esound-003", "type": "environmental_sound", "category": "sound_imitation", "subcategory": "environmental_sound", "difficulty": "easy", "title": {"en": "Clock Sound", "fr": "Son de l'Horloge"}, "target_text": {"en": "Tick tock tick tock", "fr": "Tic tac tic tac"}, "instructions": {"en": "Imitate the sound of a clock!", "fr": "Imitez le son d'une horloge!"}, "image_url": "https://images.unsplash.com/photo-1563861826100-9cb868fdbe1c?w=400&h=400&fit=crop" }, { "id": "esound-004", "type": "environmental_sound", "category": "sound_imitation", "subcategory": "environmental_sound", "difficulty": "medium", "title": {"en": "Rain Sound", "fr": "Son de la Pluie"}, "target_text": {"en": "Pitter patter pitter patter", "fr": "Plic ploc plic ploc"}, "instructions": {"en": "Imitate the sound of rain falling!", "fr": "Imitez le son de la pluie qui tombe!"}, "image_url": "https://images.unsplash.com/photo-1519692933481-e162a57d6721?w=400&h=400&fit=crop" }, { "id": "esound-005", "type": "environmental_sound", "category": "sound_imitation", "subcategory": "environmental_sound", "difficulty": "medium", "title": {"en": "Wind Sound", "fr": "Son du Vent"}, "target_text": {"en": "Whoooosh", "fr": "Woooosh"}, "instructions": {"en": "Imitate the sound of strong wind!", "fr": "Imitez le son du vent fort!"}, "image_url": "https://images.unsplash.com/photo-1534088568595-a066f410bcda?w=400&h=400&fit=crop" }, ] def get_all_categories() -> List[Dict]: """Return all exercise categories.""" return CATEGORIES def get_subcategory_info(subcategory_id: str) -> Optional[Dict]: """Return information about a specific subcategory.""" return SUBCATEGORIES.get(subcategory_id) def get_all_exercises(language: str = "en") -> List[Dict]: """Return all exercises in the specified language.""" exercises = [] for ex in EXERCISES: exercises.append({ "id": ex["id"], "type": ex["type"], "category": ex["category"], "subcategory": ex["subcategory"], "difficulty": ex["difficulty"], "title": ex["title"].get(language, ex["title"]["en"]), "target_text": ex["target_text"].get(language, ex["target_text"]["en"]), "instructions": ex["instructions"].get(language, ex["instructions"]["en"]), "image_url": ex.get("image_url"), "audio_url": ex.get("audio_url"), "phoneme_focus": ex.get("phoneme_focus", []) }) return exercises def get_exercises_by_category(category: str, language: str = "en") -> List[Dict]: """Return exercises filtered by category.""" all_exercises = get_all_exercises(language) return [ex for ex in all_exercises if ex["category"] == category] def get_exercises_by_subcategory(subcategory: str, language: str = "en") -> List[Dict]: """Return exercises filtered by subcategory.""" all_exercises = get_all_exercises(language) return [ex for ex in all_exercises if ex["subcategory"] == subcategory] def get_exercises_by_difficulty(difficulty: str, language: str = "en") -> List[Dict]: """Return exercises filtered by difficulty.""" all_exercises = get_all_exercises(language) return [ex for ex in all_exercises if ex["difficulty"] == difficulty] def get_exercise_by_id(exercise_id: str, language: str = "en") -> Optional[Dict]: """Return a specific exercise by ID.""" all_exercises = get_all_exercises(language) for ex in all_exercises: if ex["id"] == exercise_id: return ex return None