Scraped a 4h Spanish fundamentals YouTube video (transcript + OCR on 14810 frames), extracted structured content across 52 chapters, and generated fill-in-the-blank quizzes for every grammar topic. - 13 new GrammarNote entries (articles, possessives, demonstratives, greetings, poder, al/del, prepositional pronouns, irregular yo, stem-changing, stressed possessives, present/future perfect, present indicative conjugation) - 1010 generated exercises across all 36 grammar notes (new + existing) - Fix tense guide parser to handle unnumbered *Usages* blocks - Rewrite 6 broken tense guide bodies (imperative, subj pluperfect, subj future) with numbered usage format - Bump courseDataVersion 5→6 with TenseGuide refresh on upgrade - Add docs/spanish-fundamentals/ with raw transcripts, polished notes, structured JSON, and exercise data Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
703 lines
18 KiB
JSON
703 lines
18 KiB
JSON
{
|
|
"notes": [
|
|
{
|
|
"noteId": "ser-vs-estar",
|
|
"title": "Ser vs. Estar",
|
|
"category": "Core Concepts",
|
|
"swift_let": "serVsEstarExercises",
|
|
"prefix": "se",
|
|
"prompt": "Choose ser or estar:",
|
|
"status": "existing_populated",
|
|
"target_count": 37,
|
|
"seed_count": 22,
|
|
"needed": 15,
|
|
"source_chapters": [
|
|
{
|
|
"id": "05",
|
|
"title": "The Verb Ser"
|
|
},
|
|
{
|
|
"id": "07",
|
|
"title": "The Verb Estar"
|
|
},
|
|
{
|
|
"id": "38",
|
|
"title": "Past Participles As Adjectives"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "por-vs-para",
|
|
"title": "Por vs. Para",
|
|
"category": "Core Concepts",
|
|
"swift_let": "porVsParaExercises",
|
|
"prefix": "pp",
|
|
"prompt": "Choose por or para:",
|
|
"status": "existing_populated",
|
|
"target_count": 25,
|
|
"seed_count": 10,
|
|
"needed": 15,
|
|
"source_chapters": [
|
|
{
|
|
"id": "33",
|
|
"title": "Por & Para"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "preterite-vs-imperfect",
|
|
"title": "Preterite vs. Imperfect",
|
|
"category": "Past Tenses",
|
|
"swift_let": "preteriteVsImperfectExercises",
|
|
"prefix": "pi",
|
|
"prompt": "Choose the correct tense:",
|
|
"status": "existing_populated",
|
|
"target_count": 64,
|
|
"seed_count": 49,
|
|
"needed": 15,
|
|
"source_chapters": [
|
|
{
|
|
"id": "25",
|
|
"title": "Past Tense for Regular Verbs (Preterite)"
|
|
},
|
|
{
|
|
"id": "26",
|
|
"title": "Past Tense of Ser and Ir"
|
|
},
|
|
{
|
|
"id": "27",
|
|
"title": "Irregular Verbs in the Past - Part 1"
|
|
},
|
|
{
|
|
"id": "28",
|
|
"title": "Irregular Verbs in the Past - Part 2"
|
|
},
|
|
{
|
|
"id": "31",
|
|
"title": "Imperfect Tense"
|
|
},
|
|
{
|
|
"id": "40",
|
|
"title": "Past Perfect Tense"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "subjunctive-triggers",
|
|
"title": "Subjunctive Triggers",
|
|
"category": "Subjunctive",
|
|
"swift_let": "subjunctiveTriggerExercises",
|
|
"prefix": "st",
|
|
"prompt": "Subjunctive or indicative?",
|
|
"status": "existing_populated",
|
|
"target_count": 60,
|
|
"seed_count": 45,
|
|
"needed": 15,
|
|
"source_chapters": [
|
|
{
|
|
"id": "46",
|
|
"title": "Understanding the Subjunctive"
|
|
},
|
|
{
|
|
"id": "47",
|
|
"title": "Verbs in the Present Subjunctive"
|
|
},
|
|
{
|
|
"id": "48",
|
|
"title": "Examples in the Present Subjunctive"
|
|
},
|
|
{
|
|
"id": "49",
|
|
"title": "Past Subjunctive (Imperfect Subjunctive)"
|
|
},
|
|
{
|
|
"id": "50",
|
|
"title": "Present Perfect Subjunctive"
|
|
},
|
|
{
|
|
"id": "51",
|
|
"title": "Past Perfect Subjunctive"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "reflexive-verbs",
|
|
"title": "Reflexive Verbs",
|
|
"category": "Verb Types",
|
|
"swift_let": "reflexiveVerbsExercises",
|
|
"prefix": "rv",
|
|
"prompt": "Choose the correct reflexive form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 13,
|
|
"needed": 17,
|
|
"source_chapters": [
|
|
{
|
|
"id": "29",
|
|
"title": "Reflexive Verbs"
|
|
},
|
|
{
|
|
"id": "30",
|
|
"title": "Reciprocal Reflexive Verbs"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "object-pronouns",
|
|
"title": "Direct & Indirect Object Pronouns",
|
|
"category": "Pronouns",
|
|
"swift_let": "objectPronounsExercises",
|
|
"prefix": "op",
|
|
"prompt": "Choose the correct pronoun:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 24,
|
|
"needed": 6,
|
|
"source_chapters": [
|
|
{
|
|
"id": "17",
|
|
"title": "Direct Object Pronouns"
|
|
},
|
|
{
|
|
"id": "18",
|
|
"title": "Indirect Object Pronouns"
|
|
},
|
|
{
|
|
"id": "19",
|
|
"title": "Combining DOPs & IOPs"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "gustar-like-verbs",
|
|
"title": "Gustar-Like Verbs",
|
|
"category": "Verb Types",
|
|
"swift_let": "gustarLikeVerbsExercises",
|
|
"prefix": "gv",
|
|
"prompt": "Choose the correct form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 8,
|
|
"needed": 22,
|
|
"source_chapters": [
|
|
{
|
|
"id": "20",
|
|
"title": "The Verb Gustar"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "comparatives-superlatives",
|
|
"title": "Comparatives & Superlatives",
|
|
"category": "Adjectives",
|
|
"swift_let": "comparativesSuperlativesExercises",
|
|
"prefix": "cs",
|
|
"prompt": "Choose the correct comparison:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 8,
|
|
"needed": 22,
|
|
"source_chapters": [
|
|
{
|
|
"id": "34",
|
|
"title": "Comparatives & Superlatives"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "conditional-if-clauses",
|
|
"title": "Conditional & If-Clauses",
|
|
"category": "Verb Tenses",
|
|
"swift_let": "conditionalIfClausesExercises",
|
|
"prefix": "ci",
|
|
"prompt": "Choose the correct form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 14,
|
|
"needed": 16,
|
|
"source_chapters": [
|
|
{
|
|
"id": "43",
|
|
"title": "Conditional Tense"
|
|
},
|
|
{
|
|
"id": "44",
|
|
"title": "Conditional Perfect Tense"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "commands-imperative",
|
|
"title": "Commands (Imperative)",
|
|
"category": "Verb Tenses",
|
|
"swift_let": "commandsImperativeExercises",
|
|
"prefix": "ct",
|
|
"prompt": "Choose the correct command:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 17,
|
|
"needed": 13,
|
|
"source_chapters": [
|
|
{
|
|
"id": "36",
|
|
"title": "Familiar Tú Commands"
|
|
},
|
|
{
|
|
"id": "37",
|
|
"title": "Nosotros Commands"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "saber-vs-conocer",
|
|
"title": "Saber vs. Conocer",
|
|
"category": "Core Concepts",
|
|
"swift_let": "saberVsConocerExercises",
|
|
"prefix": "sc",
|
|
"prompt": "Choose saber or conocer:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 12,
|
|
"needed": 18,
|
|
"source_chapters": [
|
|
{
|
|
"id": "23",
|
|
"title": "The Verb Saber"
|
|
},
|
|
{
|
|
"id": "24",
|
|
"title": "The Verb Conocer"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "double-negatives",
|
|
"title": "Double Negatives",
|
|
"category": "Sentence Structure",
|
|
"swift_let": "doubleNegativesExercises",
|
|
"prefix": "dn",
|
|
"prompt": "Choose the correct negative:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 8,
|
|
"needed": 22,
|
|
"source_chapters": [
|
|
{
|
|
"id": "35",
|
|
"title": "How Negatives Work"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "adjective-placement",
|
|
"title": "Adjective Placement",
|
|
"category": "Sentence Structure",
|
|
"swift_let": "adjectivePlacementExercises",
|
|
"prefix": "ap",
|
|
"prompt": "Choose the correct placement:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 7,
|
|
"needed": 23,
|
|
"source_chapters": [
|
|
{
|
|
"id": "08",
|
|
"title": "Descriptive Adjectives"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "tener-expressions",
|
|
"title": "Tener Expressions",
|
|
"category": "Core Concepts",
|
|
"swift_let": "tenerExpressionsExercises",
|
|
"prefix": "te",
|
|
"prompt": "Choose the correct expression:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 8,
|
|
"needed": 22,
|
|
"source_chapters": [
|
|
{
|
|
"id": "14",
|
|
"title": "The Verb \"Tener\""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "personal-a",
|
|
"title": "The Personal 'a'",
|
|
"category": "Sentence Structure",
|
|
"swift_let": "personalAExercises",
|
|
"prefix": "pa",
|
|
"prompt": "Is the personal 'a' needed?",
|
|
"status": "existing_populated",
|
|
"target_count": 15,
|
|
"seed_count": 0,
|
|
"needed": 15,
|
|
"source_chapters": []
|
|
},
|
|
{
|
|
"noteId": "relative-pronouns",
|
|
"title": "Relative Pronouns (que / lo que)",
|
|
"category": "Sentence Structure",
|
|
"swift_let": "relativePronounsExercises",
|
|
"prefix": "rp",
|
|
"prompt": "Choose the correct relative pronoun:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 8,
|
|
"needed": 22,
|
|
"source_chapters": [
|
|
{
|
|
"id": "45",
|
|
"title": "Que & Lo que"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "future-vs-ir-a",
|
|
"title": "Future vs. Ir + a + Infinitive",
|
|
"category": "Verb Tenses",
|
|
"swift_let": "futureVsIrAExercises",
|
|
"prefix": "fi",
|
|
"prompt": "Choose the correct future form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 15,
|
|
"needed": 15,
|
|
"source_chapters": [
|
|
{
|
|
"id": "13",
|
|
"title": "The Verb \"Ir\""
|
|
},
|
|
{
|
|
"id": "41",
|
|
"title": "Future Tense"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "accent-marks-stress",
|
|
"title": "Accent Marks & Stress",
|
|
"category": "Pronunciation",
|
|
"swift_let": "accentMarksStressExercises",
|
|
"prefix": "am",
|
|
"prompt": "Does this word need an accent?",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "02",
|
|
"title": "Spanish Fundamentals"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "se-constructions",
|
|
"title": "Se Constructions",
|
|
"category": "Advanced",
|
|
"swift_let": "seConstructionsExercises",
|
|
"prefix": "sx",
|
|
"prompt": "Choose the correct se-construction:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 0,
|
|
"needed": 30,
|
|
"source_chapters": []
|
|
},
|
|
{
|
|
"noteId": "estar-gerund-progressive",
|
|
"title": "Estar + Gerund (Progressive)",
|
|
"category": "Verb Tenses",
|
|
"swift_let": "estarGerundProgressiveExercises",
|
|
"prefix": "eg",
|
|
"prompt": "Choose the correct form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "06",
|
|
"title": "The Present Progressive"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "spanish-suffixes",
|
|
"title": "Spanish Suffixes",
|
|
"category": "Word Building",
|
|
"swift_let": "spanishSuffixesExercises",
|
|
"prefix": "ss",
|
|
"prompt": "Choose the correct suffix:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 0,
|
|
"needed": 30,
|
|
"source_chapters": []
|
|
},
|
|
{
|
|
"noteId": "common-irregular-verbs",
|
|
"title": "Common Irregular Verbs",
|
|
"category": "Irregular Verbs",
|
|
"swift_let": "commonIrregularVerbsExercises",
|
|
"prefix": "ir",
|
|
"prompt": "Choose the correct form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 0,
|
|
"needed": 30,
|
|
"source_chapters": []
|
|
},
|
|
{
|
|
"noteId": "types-of-irregular-verbs",
|
|
"title": "Types of Irregular Verbs",
|
|
"category": "Irregular Verbs",
|
|
"swift_let": "typesOfIrregularVerbsExercises",
|
|
"prefix": "ti",
|
|
"prompt": "Choose the correct form:",
|
|
"status": "existing_empty",
|
|
"target_count": 30,
|
|
"seed_count": 0,
|
|
"needed": 30,
|
|
"source_chapters": []
|
|
},
|
|
{
|
|
"noteId": "present-indicative-conjugation",
|
|
"title": "Present Indicative Conjugation",
|
|
"category": "Core Concepts",
|
|
"swift_let": "presentIndicativeConjugationExercises",
|
|
"prefix": "pic",
|
|
"prompt": "Choose the correct present form:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "03",
|
|
"title": "Conjugating Verbs (Present)"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "articles-and-gender",
|
|
"title": "Articles & Gender",
|
|
"category": "Core Concepts",
|
|
"swift_let": "articlesAndGenderExercises",
|
|
"prefix": "ag",
|
|
"prompt": "Choose the correct article:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 7,
|
|
"needed": 23,
|
|
"source_chapters": [
|
|
{
|
|
"id": "04",
|
|
"title": "Articles"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "possessive-adjectives",
|
|
"title": "Possessive Adjectives",
|
|
"category": "Adjectives",
|
|
"swift_let": "possessiveAdjectivesExercises",
|
|
"prefix": "poa",
|
|
"prompt": "Choose the correct possessive:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "09",
|
|
"title": "Possessive Adjectives"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "demonstrative-adjectives",
|
|
"title": "Demonstrative Adjectives",
|
|
"category": "Adjectives",
|
|
"swift_let": "demonstrativeAdjectivesExercises",
|
|
"prefix": "da",
|
|
"prompt": "Choose the correct demonstrative:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "10",
|
|
"title": "Demonstrative Adjectives"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "greetings-farewells",
|
|
"title": "Greetings & Farewells",
|
|
"category": "Core Concepts",
|
|
"swift_let": "greetingsFarewellsExercises",
|
|
"prefix": "gt",
|
|
"prompt": "Choose the correct greeting:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "11",
|
|
"title": "Useful Greetings & Farewells"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "poder-infinitive",
|
|
"title": "Poder + Infinitive",
|
|
"category": "Irregular Verbs",
|
|
"swift_let": "poderInfinitiveExercises",
|
|
"prefix": "pdi",
|
|
"prompt": "Choose the correct form of poder:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "12",
|
|
"title": "The Verb \"Poder\""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "al-del-contractions",
|
|
"title": "al & del Contractions",
|
|
"category": "Core Concepts",
|
|
"swift_let": "alDelContractionsExercises",
|
|
"prefix": "adc",
|
|
"prompt": "Choose the correct contraction:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 7,
|
|
"needed": 23,
|
|
"source_chapters": [
|
|
{
|
|
"id": "15",
|
|
"title": "al & del"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "prepositional-pronouns",
|
|
"title": "Prepositional Pronouns",
|
|
"category": "Pronouns",
|
|
"swift_let": "prepositionalPronounsExercises",
|
|
"prefix": "prp",
|
|
"prompt": "Choose the correct pronoun:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 7,
|
|
"needed": 23,
|
|
"source_chapters": [
|
|
{
|
|
"id": "16",
|
|
"title": "Prepositional Pronouns"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "irregular-yo-verbs",
|
|
"title": "Irregular Yo Verbs",
|
|
"category": "Irregular Verbs",
|
|
"swift_let": "irregularYoVerbsExercises",
|
|
"prefix": "iy",
|
|
"prompt": "Choose the correct yo form:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 10,
|
|
"needed": 20,
|
|
"source_chapters": [
|
|
{
|
|
"id": "21",
|
|
"title": "Irregular Yo Verbs"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "stem-changing-verbs",
|
|
"title": "Stem-Changing Verbs",
|
|
"category": "Irregular Verbs",
|
|
"swift_let": "stemChangingVerbsExercises",
|
|
"prefix": "scv",
|
|
"prompt": "Choose the correct form:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "22",
|
|
"title": "Stem-Changing Verbs"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "stressed-possessives",
|
|
"title": "Stressed Possessive Adjectives",
|
|
"category": "Adjectives",
|
|
"swift_let": "stressedPossessivesExercises",
|
|
"prefix": "spo",
|
|
"prompt": "Choose the correct stressed possessive:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 6,
|
|
"needed": 24,
|
|
"source_chapters": [
|
|
{
|
|
"id": "32",
|
|
"title": "Stressed Possessive Adjectives"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "present-perfect-tense",
|
|
"title": "Present Perfect",
|
|
"category": "Verb Tenses",
|
|
"swift_let": "presentPerfectTenseExercises",
|
|
"prefix": "pft",
|
|
"prompt": "Choose the correct present-perfect form:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 8,
|
|
"needed": 22,
|
|
"source_chapters": [
|
|
{
|
|
"id": "39",
|
|
"title": "Present Perfect Tense"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"noteId": "future-perfect-tense",
|
|
"title": "Future Perfect",
|
|
"category": "Verb Tenses",
|
|
"swift_let": "futurePerfectTenseExercises",
|
|
"prefix": "fpt",
|
|
"prompt": "Choose the correct future-perfect form:",
|
|
"status": "new",
|
|
"target_count": 30,
|
|
"seed_count": 7,
|
|
"needed": 23,
|
|
"source_chapters": [
|
|
{
|
|
"id": "42",
|
|
"title": "Future Perfect Tense"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
} |