{
  "schema": "kbatch-school-concepts-v1",
  "generated": "2026-07-16T12:00:00.000Z",
  "note": "KBatch-authored micro-topics for keyboard · orthography · typing · language geometry. Inspired by graph/prereq curriculum design (see open-education-tools → Marble Skill Taxonomy) but original content. Not a dump of third-party taxonomy text.",
  "attribution": {
    "structureInspiredBy": {
      "name": "Marble Skill Taxonomy",
      "url": "https://github.com/withmarbleapp/os-taxonomy",
      "githubawesome": "https://githubawesome.com/marble-skill-taxonomy-1-590-school-micro-topics-connected-by-3-221-prerequisite-edges-as-a-graph/",
      "license": "ODbL 1.0 (database) · CC BY-SA 4.0 (content) — use upstream data only with attribution + share-alike"
    }
  },
  "subjects": [
    "Keyboard Geometry",
    "Orthography",
    "Typing Fluency",
    "Language Pathways",
    "Accessibility Encodings",
    "Registers & Dialects",
    "Collaboration"
  ],
  "topics": [
    {
      "id": "kb_home_row",
      "subject": "Keyboard Geometry",
      "domain": "Home row",
      "name": "Home-row anchors",
      "description": "Place fingers on ASDF / JKL; rest without looking at the board.",
      "ageRangeStart": 7,
      "ageRangeEnd": 12,
      "type": "PROCEDURAL",
      "evidence": [
        "Return to home row after each reach",
        "Name home-row keys without looking"
      ],
      "prerequisites": [],
      "kbatchHooks": ["letter-atom", "layout:qwerty", "typing-practice"]
    },
    {
      "id": "kb_path_travel",
      "subject": "Keyboard Geometry",
      "domain": "Path length",
      "name": "Key-path travel",
      "description": "Estimate finger travel for a word on one layout; compare mm/calories across boards.",
      "ageRangeStart": 10,
      "ageRangeEnd": 18,
      "type": "CONCEPTUAL",
      "evidence": [
        "Read travel mm on a KBatch word card",
        "Pick lower-travel layout for a phrase"
      ],
      "prerequisites": ["kb_home_row"],
      "kbatchHooks": ["shadow-live", "metrics.travelMM"]
    },
    {
      "id": "kb_layout_shadows",
      "subject": "Keyboard Geometry",
      "domain": "Multi-layout",
      "name": "Same path, fifteen shadows",
      "description": "One physical path maps to different glyph strings on QWERTY, Dvorak, Colemak, AZERTY…",
      "ageRangeStart": 12,
      "ageRangeEnd": 99,
      "type": "CONCEPTUAL",
      "evidence": [
        "Show layout shadows for one word",
        "Explain why RSI can differ by board"
      ],
      "prerequisites": ["kb_path_travel"],
      "kbatchHooks": ["shadow-live", "layouts"]
    },
    {
      "id": "ortho_letter",
      "subject": "Orthography",
      "domain": "Graphemes",
      "name": "Letter as atom",
      "description": "A spelling is a sequence of letter atoms; browse A–Z then aa/ab/ac prefix buckets.",
      "ageRangeStart": 5,
      "ageRangeEnd": 10,
      "type": "CONCEPTUAL",
      "evidence": [
        "Jump to letter S on the side rail",
        "Open prefix sa / se / st subsections"
      ],
      "prerequisites": [],
      "kbatchHooks": ["alpha-rail", "alpha-sub-rail", "slivers"]
    },
    {
      "id": "ortho_prefix_sliver",
      "subject": "Orthography",
      "domain": "Prefix browse",
      "name": "Two-letter prefix navigation",
      "description": "Large letter packs (100k+) are sorted into aa, ab, ac… slivers for snappy browse and typeahead.",
      "ageRangeStart": 10,
      "ageRangeEnd": 99,
      "type": "PROCEDURAL",
      "evidence": [
        "Select ab and page only ab* words",
        "Search with progressive sliver load"
      ],
      "prerequisites": ["ortho_letter"],
      "kbatchHooks": ["jumpToPrefix", "searchPrefixLazy"]
    },
    {
      "id": "type_wpm_accuracy",
      "subject": "Typing Fluency",
      "domain": "Speed",
      "name": "WPM and accuracy",
      "description": "Type corpus words under a timer; track words-per-minute and error rate.",
      "ageRangeStart": 8,
      "ageRangeEnd": 99,
      "type": "PROCEDURAL",
      "evidence": [
        "Complete a 30s drill from current prefix",
        "Improve accuracy before chasing speed"
      ],
      "prerequisites": ["kb_home_row"],
      "kbatchHooks": ["typing-practice", "labs/typing"]
    },
    {
      "id": "type_strain_rsi",
      "subject": "Typing Fluency",
      "domain": "Ergonomics",
      "name": "Strain and RSI signals",
      "description": "Watch live RSI / strain metrics while typing; rest when strain climbs.",
      "ageRangeStart": 12,
      "ageRangeEnd": 99,
      "type": "META",
      "evidence": [
        "Identify high-strain bigrams on Shadow Live",
        "Switch layout or slow down when RSI rises"
      ],
      "prerequisites": ["type_wpm_accuracy", "kb_path_travel"],
      "kbatchHooks": ["shadow-live", "metrics.rsi"]
    },
    {
      "id": "lang_stepping",
      "subject": "Language Pathways",
      "domain": "Historical path",
      "name": "Language stepping pathways",
      "description": "Trace mother tongue → historical steps (e.g. PIE → Germanic → English) while keeping keyboard geometry.",
      "ageRangeStart": 14,
      "ageRangeEnd": 99,
      "type": "CONCEPTUAL",
      "evidence": [
        "Select a stepping path and name three stages",
        "Compare same word description across UI languages"
      ],
      "prerequisites": ["ortho_letter"],
      "kbatchHooks": ["language-stepping", "rubik-map"]
    },
    {
      "id": "a11y_braille_morse",
      "subject": "Accessibility Encodings",
      "domain": "Alternate encodings",
      "name": "Braille and Morse encodings",
      "description": "Map orthography to Braille cells and Morse for multimodal literacy.",
      "ageRangeStart": 9,
      "ageRangeEnd": 99,
      "type": "REPRESENTATIONAL",
      "evidence": [
        "Read Braille line on a word card",
        "Tap Morse for a short word"
      ],
      "prerequisites": ["ortho_letter"],
      "kbatchHooks": ["encoder", "dojo"]
    },
    {
      "id": "reg_school_capsule",
      "subject": "Registers & Dialects",
      "domain": "School speech",
      "name": "School register capsule",
      "description": "Classroom / homework / exam orthographies and common school misspellings as a filterable capsule.",
      "ageRangeStart": 10,
      "ageRangeEnd": 18,
      "type": "LANGUAGE",
      "evidence": [
        "Filter dictionary by theme=school",
        "Spot a common misspelling and its standard form"
      ],
      "prerequisites": ["ortho_letter"],
      "kbatchHooks": ["capsules:theme:school", "registers"]
    },
    {
      "id": "collab_mesh_room",
      "subject": "Collaboration",
      "domain": "Live room",
      "name": "Collab lab mesh room",
      "description": "Share Shadow Live / prefix browse state with peers via mesh bus and Overview pipe.",
      "ageRangeStart": 13,
      "ageRangeEnd": 99,
      "type": "PROCEDURAL",
      "evidence": [
        "Open collab lab and join a room id",
        "Pipe a KBatch analysis into Overview workspace"
      ],
      "prerequisites": ["type_wpm_accuracy"],
      "kbatchHooks": ["collab-lab", "mesh-bus", "overview-pipe"]
    },
    {
      "id": "graph_prereq_think",
      "subject": "Language Pathways",
      "domain": "Curriculum graphs",
      "name": "Prerequisite graphs for learning",
      "description": "Understand micro-topics linked by hard/soft prerequisites (curriculum as DAG, not flat checklist).",
      "ageRangeStart": 14,
      "ageRangeEnd": 99,
      "type": "META",
      "evidence": [
        "Trace prereqs for a school concept in this pack",
        "Cite Marble Skill Taxonomy as an external open graph"
      ],
      "prerequisites": ["lang_stepping"],
      "kbatchHooks": ["school-concepts", "open-education-tools"]
    }
  ],
  "dependencies": [
    { "topicId": "kb_path_travel", "prerequisiteId": "kb_home_row", "strength": "hard", "reason": "Travel metrics need home-row baseline" },
    { "topicId": "kb_layout_shadows", "prerequisiteId": "kb_path_travel", "strength": "hard", "reason": "Shadows compare paths already measured" },
    { "topicId": "ortho_prefix_sliver", "prerequisiteId": "ortho_letter", "strength": "hard", "reason": "Prefix rail sits under a letter section" },
    { "topicId": "type_wpm_accuracy", "prerequisiteId": "kb_home_row", "strength": "soft", "reason": "Speed drills work better with home-row habit" },
    { "topicId": "type_strain_rsi", "prerequisiteId": "type_wpm_accuracy", "strength": "soft", "reason": "Strain is observed during timed typing" },
    { "topicId": "type_strain_rsi", "prerequisiteId": "kb_path_travel", "strength": "hard", "reason": "RSI ties to path/travel metrics" },
    { "topicId": "lang_stepping", "prerequisiteId": "ortho_letter", "strength": "soft", "reason": "Pathways build on letter/word units" },
    { "topicId": "a11y_braille_morse", "prerequisiteId": "ortho_letter", "strength": "hard", "reason": "Encodings map graphemes" },
    { "topicId": "reg_school_capsule", "prerequisiteId": "ortho_letter", "strength": "soft", "reason": "Capsule filters orthographic index" },
    { "topicId": "collab_mesh_room", "prerequisiteId": "type_wpm_accuracy", "strength": "soft", "reason": "Shared drills use typing surface" },
    { "topicId": "graph_prereq_think", "prerequisiteId": "lang_stepping", "strength": "soft", "reason": "Graphs generalize pathway thinking" }
  ]
}
