The clips were silent screen captures - the user's actual ask was for someone talking
through what's happening. Each clip step now carries a narration line synthesized
offline via espeak-ng; the recording paces itself to each line's real spoken duration,
and the final audio track is built from the real measured per-line start times (adelay +
amix) so narration and on-screen action stay in sync over a 30+ second clip instead of
drifting against an idealized schedule.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CDP screencast -> ffmpeg -> MKV, driven against the same isolated server/browser pattern
the test suite already uses. Recorded three short clips demonstrating this session's tab
and schedule features; output goes to the gitignored video-guides/ folder rather than the
repo since these are sizeable binaries.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Settings now shows when a newer version is available, with the real
version number read from the remote's package.json (via the git
binary already required for this deployment model, so it works
against any remote, not just GitHub), and an "Uppdatera nu" button
that stops the server, pulls, reinstalls dependencies and restarts
automatically - warning explicitly if a race is currently active.
The existing app-version poller already reloads the page once a
restart is detected, so no new client-side polling was needed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>