Prerequisites
Make sure you’ve installed Handhold before continuing.Launch Handhold
Browse the course library
View available courses
The library shows all installed courses. Each card displays the course title, description, and progress.
Handhold ships with a few sample courses. You can download more from the community or create your own using the authoring guide.
Watch your first lesson
After selecting a course, you’ll see a list of lessons and labs.Start playback
The lesson opens with a play button. Click it or press Space to start.The narration begins, and visualizations animate in sync with the spoken text.
Control playback
- Space — Play / Pause
- Left/Right arrows — Jump between narration blocks
- Escape — Return to course view
Complete your first lab
After finishing a lesson, the next item in the course is usually a lab.Read the instructions
The lab opens with a description of what you need to build. Instructions appear in the sidebar.
Write code in the editor
The main panel is a Monaco editor (the same engine as VS Code). You can use keyboard shortcuts you’re familiar with.Vim keybindings are available via the settings menu if you prefer.
Run tests
Click the “Run Tests” button or press Cmd/Ctrl+Enter.Tests run in a real environment. If the lab requires services like Postgres or Redis, Handhold spins them up in containers automatically.
Fix failures and iterate
Test output appears in the terminal panel below the editor. Red means failures, green means passing.Edit your code and re-run tests until everything passes.
Understanding lesson structure
Lessons in Handhold follow a consistent pattern:Problem introduction
The lesson starts by establishing a problem or question. Why does this concept matter?
Step-by-step explanation
Each step builds on the previous one. Narration is synchronized with visual changes — when the speaker mentions a variable, that line highlights.
Lab structure
Labs are small, focused exercises:- 5-20 minutes — Short enough to complete in one session
- Real code — You write actual TypeScript/JavaScript/Python/etc, not pseudocode
- Real tests — Tests verify your implementation against edge cases
- Real services — If the lab needs a database, Handhold spins up Postgres in a container
Keyboard shortcuts
During lessons
| Key | Action |
|---|---|
| Space | Play / Pause |
| Left Arrow | Previous narration block |
| Right Arrow | Next narration block |
| Escape | Return to course view |
In the lab editor
| Key | Action |
|---|---|
| Cmd/Ctrl + Enter | Run tests |
| Cmd/Ctrl + S | Save (auto-saves on test run) |
| Cmd/Ctrl + / | Toggle comment |
Course progression
Courses alternate between lessons and labs:Troubleshooting
Lesson won't play
Lesson won't play
Check the console for errors (Cmd/Ctrl+Shift+I opens DevTools). If TTS fails to initialize, the lesson will show an error message.Make sure the app has audio permissions on macOS (System Settings → Privacy & Security → Microphone).
Lab tests fail to run
Lab tests fail to run
If the lab requires containers and tests fail immediately, verify that Docker or Podman is running:Check that the container runtime is on your PATH. On macOS with Docker Desktop, make sure the app is launched.
Code editor doesn't respond
Code editor doesn't respond
The Monaco editor can freeze if the window loses focus during initialization. Close the lab and reopen it.If the issue persists, restart Handhold.
Next steps
Now that you’ve completed your first lesson and lab:Explore more courses
Browse the course library and try lessons on different topics
Create your own course
Learn how to write lessons with the authoring DSL and build custom courses