6.4 KiB
6.4 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 complementsconvertGuidedAdditionTutorial(): Converts to Tutorial objectgetTutorialForEditor(): Main export used in the app
Current Tutorial Steps:
- Basic Addition (0+1, 1+1, 2+1, 3+1)
- Heaven Bead Introduction (0+5, 5+1)
- Five Complements (3+4, 2+3 using 5-complement method)
- 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
- Progressive Disclosure: Users see one step at a time
- Immediate Feedback: Real-time validation and hints
- Visual Guidance: Bead highlighting shows exactly what to do
- Pedagogical Decomposition: Multi-step operations broken into atomic actions
- Auto-Advancement: Successful completion automatically moves to next step
- Error Recovery: Helpful hints when user makes mistakes
Notes
- The tutorial system uses the existing
AbacusReactcomponent - 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.)