feat(learning): teach juniors to write, check and fix commit messages
After this lesson, a junior developer can generate a commit message with Git Commit Message Generator, check it against the Conventional Commits format, and correct it when the tool gets it wrong.
Merrill's First Principles, applied at micro scale.
Following Merrill's First Principles, the lesson opens with a failure the learner has caused themselves rather than with a definition, so the standard arrives as a solution to a problem they have just felt. Practice occupies 2 minutes 20 seconds of the 4 minutes, and the longest screen is the hardest one, not the demo. Support is withdrawn progressively, with a fresh example on every screen so no answer appears before it is asked for: recognise a good message, then choose between generated options, then correct a flawed one unaided. Narration explains while the screen carries only keywords and code, avoiding the redundancy of reading on-screen text aloud. Product promotion is deliberately limited to two touches — the demo and the closing install prompt — because a lesson that sells throughout loses the credibility that makes the recommendation worth anything.
Before
Which commit broke the payment button?
Reveal
Now find it.
2d47a19.feat, fix, docs, refactor, test, chore, style.




checkout.js, errors.js. The message types out character by character in Beat 3, so it reads as generated.The tool offered three messages for this change. Which one would you commit?
fix(cart): update maxItemsFeedback"Two problems. This isn't a fix — nothing was broken, a limit was raised, so it's a feat. And 'update maxItems' names the variable, not what changed."
feat(cart): allow up to 20 items per orderCorrect"Right type, clear scope, and the description says what customers can now do."
feat: change the maxItems constant in cart.js from 10 to 20 as agreed with productFeedback"Right type, but it describes the line you edited rather than what changed, it's missing the scope, and it carries context that belongs in the pull request, not the commit title."
The tool got one part wrong. Click it.
feat · refactor · chorefeatCorrect"New capability, so feat. Final message: feat(auth): let users stay signed in for 30 days."
refactorFeedback"A refactor changes how code is organised without changing behaviour. Behaviour changed here — users can now stay signed in."
choreFeedback"chore covers maintenance that users never notice. This one they'll notice."
type(scope): what changed
featnew capability
fixsomething broken
refactorsame behaviour, different code
docsdocumentation
testtests
styleformatting only
choremaintenance
Before you commit: check the type the tool chose.
Colour is never the only carrier of meaning: the segments in screens 2 and 5 are distinguished by label as well as colour, and the warning on the limit card pairs its icon with text. All interactive elements are reachable and operable by keyboard, with a focus order that follows reading order. Narration is captioned, and the lesson is fully usable with sound off, since every narrated point also appears on screen as a keyword or code sample. Code samples are real text rather than images, so they are available to screen readers and can be enlarged without loss.
Estimated build: 6–8 hours in Rise or Storyline, with an animated mockup for screen 3. The VS Code sequence is the only asset needing custom animation; everything else is built from text, code blocks and states. Screen 3 frames made in Figma; mockup palette follows VS Code Dark+.
Storyboard by Mariia Mukhina · Product and scenario per the assignment brief · Drafted with AI assistance; learning design decisions, review and Figma frames by the author.