← 강의 목록

LMS-2242 Production log

AI concept lecture video v2 — interactive player with linked review (follow-up to LMS-2241)

Deliverables

ItemLocation
Web player linkhttps://claude.ai/artifact/QxEPQfBTKgB6ipBQptNZyX (shared within the W Labs organization)
Script (subtitles + TTS input + checkpoint problems)https://bitbucket.org/devmeoi06/aiv/src/main/docs/LMS-2242_script_ko.md
Lesson data (reusable template)lessons/schema.ts (format), lessons/linear-function-equation/lesson.ko.json (content)
Source codehttps://bitbucket.org/devmeoi06/aiv — src/lesson-v2/ (lesson engine), src/lesson/Senior.tsx (avatar), player/ (web player), scripts/ (voice, checking, script and publishing scripts)
Production loghttps://bitbucket.org/devmeoi06/aiv/src/main/docs/LMS-2242_production-log_en.md (this file), https://bitbucket.org/devmeoi06/aiv/src/main/docs/LMS-2242_production-log_ko.md (Korean)

Acceptance criteria check

CriterionResult
Working web player link, source code and script submitted✅ Link, source and script ready (attaching and sharing still to do)
At least 2 checkpoint problems that block playback until answered✅ 3 (1:44 multiple choice, 3:36 number input, 5:32 multiple choice)
Section timing 5% / 90% / 5%✅ Measured 4.8% / 90.4% / 4.8%
Speed control keeps audio and subtitles in sync✅ Tested at 0.75×, 1×, 1.25×, 1.5×, 2× (see below)
Zero math errors, confirmed by a Korean reviewer⏳ Automated check passes — Korean reviewer needed
Tools, prompts, time and cost documented, compared with LMS-2241✅ This document
No copied textbook content, no real person's likeness✅

Lesson structure

Section shares are computed from the measured narration. The 2 s intro counts toward the review and the 4 s outro toward the summary.

SectionContentLengthShare
Opening (linked review)Last lesson's y = ax + b; Grade 7 direct proportion y = 2x → y = 2x + 218.4 s4.8%
Main (concept + checkpoints)① slope and y-intercept ② slope and one point (parallel lines) ③ two points (x- and y-intercepts), 3 checkpoints, comparing the three methods and checking answers346.2 s90.4%
Closing (key summary)The three cases recapped, next lesson preview18.5 s4.8%

Interactive features and test results

Each was checked by running the player in a browser.

FeatureBehaviorTest result
Checkpoint stopStops exactly at the problem and shows the question card✅ Stopped exactly at 1:44 and 3:36, audio silent
Skip blockingSpace bar, progress-bar click and play button are all blocked✅ All three stayed at 1:44
Instant feedbackCorrect → explanation / wrong → hint / 2 wrong → answer and explanation revealed✅ All three cases confirmed
Number-input problemTyped number; the "−" sign used in the subtitles is also accepted✅ "2" → hint, "−2" → correct
ContinueResumes into the solution narration✅ (confirmed after fixing one bug)
Speed control0.75×–2× buttons✅ 2×: 9 s of video in 4.2 s; 0.75×: 6 s of video in 8 s
Audio/subtitle syncSubtitles and mouth follow the frame, so they match at any speed✅ At 2×, the subtitle matched the playing narration in 6 of 6 samples; pitch preserved
MobileNo sideways scrolling at 375 px✅ (subtitles inside the video look small on phones)

CEO feedback, round 2

FeedbackCauseFix
"No sound for the first 1–2 seconds"Each line's audio file was only loaded when that line started, so its first syllables were lost while it loadedEach voice's narration and chimes are mixed into one continuous track, loaded once (scripts/lesson-track.ts). First syllables play; checkpoint stop/resume stays in sync (stopped at 106.6 s → after resume audio 109.5 s / video 1:50)
"A bright, high-pitched female instructor voice"—Full narration added in ko-KR-SunHiNeural, rate +10%, pitch +15%. Its ~1 s stall after a mid-sentence "!" is fixed by reading it as a comma. Length 6:34, split 4.9% / 90.4% / 4.8%
(added) Avatar and theme selector—Presenter buttons above the player (male senior = Hyunsu / female teacher = SunHi with the teacher avatar) and theme buttons (classic, chalkboard, night, pastel). Changing voice restarts the lesson; changing theme keeps the position

Tools

StepToolNotes
Script, lesson data, avatar, player codeClaude Code (Claude Opus 5.5)All AI-written
VoiceMicrosoft Edge neural TTS, ko-KR-HyunsuMultilingualNeural, rate +10%, pitch +4%Picked from 3 samples
Lip syncffmpeg extracts voice loudness → avatar mouth shapes
Lesson engineRemotion 4.0.535 + @remotion/playerDraws the lesson straight from its JSON
Web playerReact 19, Vite 6.3.5Checkpoints, feedback, speed control
HostingClaude Artifact (private link)For the pilot
Math checkCustom checker scripts/lesson-check.mjsVerifies every example, point, slope and answer by calculation

Prompts

User → Claude Code prompts (verbatim, in order):

  1. Currently I have an in progress related to the continuation of this ticket, please retrieve that ticket and analyze it. → LMS-2242 analysis
  2. Go with your recommended defaults: topic = 일차함수의 식 구하기, review = 지난 시간 기울기·y절편 + 중1 정비례, host as a private Artifact link first, keep the illustrated avatar restyled as a friendly senior. Start with the lesson JSON template and script. → lesson template and script
  3. Yes, generate 2-3 short voice samples of the friendly-senior persona (different Edge voices or settings) so I can pick one. → 3 voice samples
  4. Use C (Hyunsu, young male senior) for the lesson. → voice chosen
  5. Yes, restyle the avatar as a young male senior student to match the Hyunsu voice, then generate the full narration. → avatar and full narration
  6. Yes, build the interactive web player: checkpoints that block playback, instant feedback, 0.75x-2.0x speed control with synced subtitles, using the new avatar and narration. → web player
  7. Yes, publish the player as a private Artifact link. → published
  8. CEO feedback relayed: no sound for the first 1–2 s, a bright high-pitched female instructor voice, plus I think let's add an avatar and theme selector? → continuous track, SunHi voice, presenter and theme selectors

Time

StepTime
Ticket analysis, choosing defaults~5 min
Lesson template and script, automated math check, section balancing~20 min
3 voice samples~3 min
Avatar + full narration (44 clips)~10 min
Lesson engine + web player~12 min
Browser testing, 2 bug fixes~5 min
Publishing~3 min
Total~1 h (excluding time waiting on user replies)

Cost

ItemCost
TTS (Edge neural TTS)₩0
Remotion · @remotion/player (free license for small teams*)₩0
React, Vite, ffmpeg, fonts₩0
Hosting (Claude Artifact)Within existing subscription
Claude Code usageWithin existing subscription (no extra charge)
Total₩0 extra

* Remotion is free for companies with 3 or fewer employees; larger companies need a company license. The same applies to the player (@remotion/player).

Comparison with LMS-2241

LMS-2241 (v1)LMS-2242 (v2)
DeliverableMP4 videoWeb player (link)
UnitLinear functions and graphs — slope and y-interceptFinding the equation of a linear function (next sub-unit)
Length4:276:24
StructureIntro, explanation, summary (no ratio target)Linked review 5% / main 90% / key summary 5% (measured 4.8 / 90.4 / 4.8)
Linked reviewNoneLast lesson + Grade 7 direct proportion
Learner participationNone (watch only)3 checkpoints that block playback; correct / hint / explanation feedback
Speed controlNone (depends on the video player)0.75×–2× with audio and subtitles in sync
VoiceSunHi (female), polite teacher, rate −4%Hyunsu (male), casual senior, rate +10%
AvatarFemale teacherMale senior student (hoodie)
Lesson content formatEach scene written as codeJSON template; a new lesson is a new JSON file
Math checkChecked by AI by eyeChecker script verifies every example, point and answer by calculation
TimeFirst Korean video ~30 min (~3 h 10 min with variants)~1 h (including the player)
Cost₩0 extra₩0 extra
Making the next lessonWrite new scene codeWrite JSON → lesson-check → lesson-tts → build (engine and player reused)

Math check (automated check passes — Korean reviewer needed)

Result of node scripts/lesson-check.mjs lessons/linear-function-equation/lesson.ko.json:

Open items