Skip to main content

WritingPractice

Writing practice β€” number/hangul/english/hanja + print/online mode + learning flow (Layer 3 Domain).

Status​

KeyValue
Layerdomain
TierL1
Statusdeprecated
Version0.9.0
PriceFree (free)
CategoryLearning

Overview​

Overview​

WritingPractice is a Layer 3 Domain Plugin of multi-saas-kit. The final goal of this plugin extraction effort β€” provides content model, print layout, learning flow, and scoring logic for number/hangul/english/hanja writing practice.

Layered atop HandwritingInput Composite (DigitalInk + BrushConfiguration + RecognitionBridge) and DocumentProcessor.

Content Model​

Writing Practice (Program)
β”œβ”€β”€ Number (1~9, 0, two-digit)
β”œβ”€β”€ Hangul (consonants, vowels, jongseong)
β”œβ”€β”€ English (uppercase, lowercase, words)
└── Hanja (basic strokes, number characters, basic chars)

MVP: Number 1~9 writing

Core Components​

Enums (2)​

EnumCases
WritingProgramNUMBER / HANGUL / ENGLISH / HANJA
WritingTemplateMODEL_THEN_TRACE / BLANK_ONLY / STROKE_ORDER / QUIZ

WritingItem (DTO)​

Single-character practice target: character, program, romanization, strokeCount, audioUrl.

PrintLayoutCalculator (Pure)​

Decides A4 print layout. mm coordinates + cells_per_row / rows_per_page / total_pages.

AttemptScorer (Pure)​

Naive student-vs-model stroke comparison. Average distance of 3 samples (start/mid/end) per stroke β†’ 100-point scale. Stroke count diff penalty: -10 points/stroke.

Configuration​

return [
'enabled' => env('PLG_WRITING_PRACTICE_ENABLED', true),
'print' => [
'page_width_mm' => 210.0, 'page_height_mm' => 297.0,
'margin_mm' => 15.0,
'cell_size_mm' => 24.0, 'cell_spacing_mm' => 4.0,
'header_reserve_mm' => 30.0,
],
'scoring' => [
'min_score' => 60,
'distance_scale' => 200,
],
];

Usage​

$layout = PrintLayoutCalculator::fromConfig(config('writing-practice'))->calculate(45);
$score = AttemptScorer::fromConfig(config('writing-practice'))->score($modelStrokes, $studentStrokes);
if ($score['passed']) { /* next character */ }

Dependencies​

  • HandwritingInput β€” student stroke input
  • DocumentProcessor β€” model content HTML rendering

Roadmap (Phase 3+)​

  • Standard WritingProgram/Unit/Lesson/Item/Template Models + Migrations (opt-in)
  • Filament Resource
  • Livewire canvas component
  • DTW-based advanced scoring
  • Hanja stroke order animation
  • writing_attempts log

Origin​

New plugin β€” Phase 2 MVP outcome of the writing-practice plugin discussion (2026-04-30).

License​

MIT

Dependencies​

Demos​


πŸ›’ View on Plugin Store: store.codebase.how/plugins/writing-practice