soroban-abacus-flashcards/apps/web/.claude/TUTORIAL_SYSTEM.md

6.5 KiB

Tutorial System Documentation

Overview

The tutorial system is a sophisticated interactive learning platform for teaching soroban abacus concepts. It features step-by-step guidance, bead highlighting, pedagogical decomposition, and progress tracking.

Key Components

1. TutorialPlayer (/src/components/tutorial/TutorialPlayer.tsx)

The main tutorial playback component that:

  • Displays tutorial steps progressively
  • Highlights specific beads users should interact with
  • Provides real-time feedback and tooltips
  • Shows step-by-step instructions for multi-step operations
  • Tracks user progress through the tutorial
  • Auto-advances to next step on correct completion

Key Features:

  • Bead Highlighting: Visual indicators showing which beads to manipulate
  • Step Progress: Shows current step out of total steps
  • Error Feedback: Provides hints when user makes mistakes
  • Multi-Step Support: Breaks complex operations into sequential sub-steps
  • Pedagogical Decomposition: Explains the "why" behind each operation

2. TutorialEditor (/src/components/tutorial/TutorialEditor.tsx)

A full-featured editor for creating and editing tutorials:

  • Visual step editor
  • Bead highlight configuration
  • Multi-step instruction editor
  • Live preview
  • Import/export functionality
  • Access control

Editor URL: /tutorial-editor

3. Tutorial Data Structure (/src/types/tutorial.ts)

interface Tutorial {
  id: string
  title: string
  description: string
  category: string
  difficulty: 'beginner' | 'intermediate' | 'advanced'
  estimatedDuration: number // minutes
  steps: TutorialStep[]
  tags: string[]
  author: string
  version: string
  createdAt: Date
  updatedAt: Date
  isPublished: boolean
}

interface TutorialStep {
  id: string
  title: string
  problem: string                    // e.g. "2 + 3"
  description: string                // User-facing explanation
  startValue: number                 // Initial abacus value
  targetValue: number                // Goal value
  expectedAction: 'add' | 'remove' | 'multi-step'
  actionDescription: string

  // Bead highlighting
  highlightBeads?: Array<{
    placeValue: number               // 0=ones, 1=tens, etc.
    beadType: 'heaven' | 'earth'
    position?: number                // For earth beads: 0-3
  }>

  // Progressive step highlighting
  stepBeadHighlights?: Array<{
    placeValue: number
    beadType: 'heaven' | 'earth'
    position?: number
    stepIndex: number                // Which instruction step
    direction: 'up' | 'down' | 'activate' | 'deactivate'
    order?: number                   // Order within step
  }>

  totalSteps?: number                // For multi-step operations
  multiStepInstructions?: string[]   // Sequential instructions

  // Tooltips and guidance
  tooltip: {
    content: string                  // Short title
    explanation: string              // Detailed explanation
  }
}

4. Tutorial Converter (/src/utils/tutorialConverter.ts)

Utility that converts the original GuidedAdditionTutorial data into the new tutorial format:

  • guidedAdditionSteps: Array of tutorial steps from basic addition to complements
  • convertGuidedAdditionTutorial(): Converts to Tutorial object
  • getTutorialForEditor(): Main export used in the app

Current Tutorial Steps:

  1. Basic Addition (0+1, 1+1, 2+1, 3+1)
  2. Heaven Bead Introduction (0+5, 5+1)
  3. Five Complements (3+4, 2+3 using 5-complement method)
  4. Complex Operations (6+2, 7+4 with carrying)

5. Supporting Utilities

/src/utils/abacusInstructionGenerator.ts

  • Automatically generates step-by-step instructions from start/target values
  • Creates bead highlight data
  • Determines movement directions

/src/utils/beadDiff.ts

  • Calculates differences between abacus states
  • Generates visual feedback tooltips
  • Explains what changed and why

Usage Examples

Basic Usage in a Page

import { TutorialPlayer } from '@/components/tutorial/TutorialPlayer'
import { getTutorialForEditor } from '@/utils/tutorialConverter'

export function MyPage() {
  return (
    <TutorialPlayer
      tutorial={getTutorialForEditor()}
      isDebugMode={false}
      showDebugPanel={false}
    />
  )
}

Using a Subset of Steps

import { getTutorialForEditor } from '@/utils/tutorialConverter'

const fullTutorial = getTutorialForEditor()

// Extract specific steps (e.g., just "Friends of 5")
const friendsOf5Tutorial = {
  ...fullTutorial,
  id: 'friends-of-5-demo',
  title: 'Friends of 5',
  steps: fullTutorial.steps.filter(step =>
    step.id === 'complement-2' // The 2+3=5 step
  )
}

return <TutorialPlayer tutorial={friendsOf5Tutorial} />

Creating a Custom Tutorial

const customTutorial: Tutorial = {
  id: 'my-tutorial',
  title: 'My Custom Tutorial',
  description: 'Learning something new',
  category: 'Custom',
  difficulty: 'beginner',
  estimatedDuration: 5,
  steps: [
    {
      id: 'step-1',
      title: 'Add 2',
      problem: '0 + 2',
      description: 'Move two earth beads up',
      startValue: 0,
      targetValue: 2,
      expectedAction: 'add',
      actionDescription: 'Add two earth beads',
      highlightBeads: [
        { placeValue: 0, beadType: 'earth', position: 0 },
        { placeValue: 0, beadType: 'earth', position: 1 }
      ],
      tooltip: {
        content: 'Adding 2',
        explanation: 'Push two earth beads up to represent 2'
      }
    }
  ],
  tags: ['custom'],
  author: 'Me',
  version: '1.0.0',
  createdAt: new Date(),
  updatedAt: new Date(),
  isPublished: true
}

Current Implementation Locations

Live Tutorials:

  • /guide - Second tab "Arithmetic Operations" contains the full guided addition tutorial

Editor:

  • /tutorial-editor - Full tutorial editing interface

Storybook:

  • Multiple tutorial stories in /src/components/tutorial/*.stories.tsx

Key Design Principles

  1. Progressive Disclosure: Users see one step at a time
  2. Immediate Feedback: Real-time validation and hints
  3. Visual Guidance: Bead highlighting shows exactly what to do
  4. Pedagogical Decomposition: Multi-step operations broken into atomic actions
  5. Auto-Advancement: Successful completion automatically moves to next step
  6. Error Recovery: Helpful hints when user makes mistakes

Notes

  • The tutorial system uses the existing AbacusReact component
  • Tutorials can be created/edited through the TutorialEditor
  • Tutorial data can be exported/imported as JSON
  • The system supports both single-step and multi-step operations
  • Bead highlighting uses place value indexing (0=ones, 1=tens, etc.)