Spec — Lecture production
2026-refresh › lecture-production · feature · created 2026-08-05 · spec · plan.html
The ~28 new and re-recorded lectures for the Advanced JavaScript refresh get made by the
simplest possible division of labour: Claude prepares everything sayable and runnable in advance; Asim sits down, rote-reads,
selects and presses F8; two local .mov files per take land in a folder. Editing those takes into finished
lectures is a separate task (lecture-editing) — this one ends at raw footage.
Problem
P1The new lectures exist only as titles — and Asim can't improvise what he hasn't written since 2018.
P2Recording historically meant improvising screen and voice at once — that cost is why the course went six years without an update.
P3New lectures must sit seamlessly beside the imported async course — which is 28 lectures of markdown-workshop VS Code format.
P4The course died by baking in unverified claims — Node-8 behaviour and a dead extension are literally why the flags exist.
lecture-editing's spec.Solution at a glance
J0Every lecture Asim records is fully prepared before he sits down, and recording one
never asks more of him than reading aloud, selecting, and pressing F8. Claude produces a verbatim script and a
pre-built workshop file per lecture (all outputs verified by running them); a pinned VS Code recording profile makes every
take look identical; a take produces two local .mov files that accumulate in a folder for the editing task.
Job stories
J1 · When I sit down to prepare a lecture
J1.1Its verbatim script already exists — say/do columns I can rote-read sentence by sentence P1Only titles existAsim can't improvise post-2018 JS P2Improvised recording is the costwhy updates never happened
curriculum/briefings/let-const-tdz.html) is the template: left column
exactly what to say (in Asim's course voice, interview-framed, British English), right column what the hands do, section
timings, a traps list of things NOT to say, and continuity references that survive the final lecture order.J1.2Reading the script leaves me able to teach the topic — preparation and re-skilling are the same activity P1Only titles existAsim can't improvise post-2018 JS
J1.3Every output in the script is real — each code block was executed on current Node before a word was scripted P4Unverified claims killed the courseNode-8 semantics, dead extension
J2 · When I record a take
J2.1The workshop file is pre-built and every block just runs — blocks numbered to match the script; select, F8, output renders P2Improvised recording is the costreduce it to reading + F8 P3Must match the async course formatmarkdown workshop style
.md per lecture (specimen: curriculum/examples/let-const/let-const.md) —
prose headings for scroll beats, fenced blocks ①–⑥, the odd deliberate live edit with a "try it" comment so the shipped
file matches what students download. Code Runner on F8 with the markdown-selection settings proven in the drive spike.J2.2The recording environment is identical every take — a pinned VS Code profile: layout, fonts, F8, no clutter P3Must match the async course formatfile left, output right
recording profile from the drive spike survives as the recording environment:
workshop file left, Output panel right, pinned theme/font, UI noise removed, warm-up run done off-camera so the Output
channel exists. Plain local Node — no containers.J2.3A flub costs one sentence — pause a beat, re-read the sentence, carry on; takes are never restarted P2Improvised recording is the costretakes must be cheap
J3 · When a take is done
J3.1One take = two files in the inbox, and I'm finished — face.mov + screen.mov into a known folder; nothing else is asked of me P2Improvised recording is the costrecording ends at raw footage
lecture-editing task consumes without
explanation. Sync of the two files, retake cuts, overlays, loudness — all downstream, none of it Asim's.Constraints
- Asim's real voice only — no synthetic audio anywhere.
- Markdown-workshop format for all code lectures (the async course's convention); exceptions are the on-camera intro and slide-led re-records.
- Every scripted claim verified by execution on current Node LTS before recording; feature status from TC39, not blogs.
- British English throughout; course voice: direct, first-person, interview-focused.
- No changes to the live Udemy course from this task; editing, design, captions and publishing are sibling tasks.
- No public workshop repo — the
.mdfiles ship as lecture resources viaudemy-publish.
Deferred to plan
The definitive recording list and order
The capture app and its settings for the two .mov files
.movs works; ScreenFlow explicitly
rejected). The plan's recording-setup phase owns the test, plus mic check through the loudness pipeline.The recording profile's final look
design-system (running
simultaneously); a ten-minute call, taken at the recording-setup phase with whatever design has landed by then.Decisions
Asim records himself — recording automation is rejected
Two-file capture: face.mov + screen.mov, local, no ScreenFlow
The specimen script format is approved
let-const-tdz (script + workshop file pair): Asim — "I can comfortably record that".
All scripts follow it.Plain local Node — no dev containers
Editing is a separate task
lecture-editing holds it).Estimated files / edits
Size: M (repo side) — plus Asim's recording sessions
curriculum/briefings/<slug>.html— one script per lecture (~28; specimen exists).curriculum/examples/<slug>/— one workshop file per code lecture (specimen exists).- Recording profile + setup checklist (VS Code
recordingprofile, Code Runner config, capture test). takes/(gitignored) — the raw-footage inbox convention.