feat(blog): audiobook read-along + video version embed #14

Merged
Phil merged 1 commit from feat/blog-audiobook into main 2026-06-23 16:50:40 +00:00
Owner

Adds an audiobook to the freelancer-math article with word-level read-along: the actual article-body words highlight in sync with the narration (no second transcript), click any word to seek. Word timings come from forced alignment (mfa-align-de, ~15ms precision) of the clean audio against a corrected transcript; the player aligns narration to the rendered body at runtime, so it survives later body edits. A sticky mini-bar keeps playback controls reachable while reading.

Also adds a privacy-first lite-YouTube facade (click-to-load, youtube-nocookie, no request before play) as a "video version" at the article end.

All media is per-site and German-only → renders on the DE article only; EN stays empty.

New fields: articleAudio, articleReadalong (JSON), articleYoutubeId. Read-along data build provenance in tools/readalong/.

Verified headless: in-body highlighting tracks playback word-by-word, click-to-seek, speed/±15s/seek controls, zero JS errors, EN clean.

Note: the YouTube video is not public yet (oEmbed 403 / thumbnail 404) — the articleYoutubeId value is left empty on prod until the video goes live, so the video section won't render until then.

🤖 Generated with Claude Code

Adds an **audiobook** to the freelancer-math article with word-level **read-along**: the actual article-body words highlight in sync with the narration (no second transcript), click any word to seek. Word timings come from forced alignment (`mfa-align-de`, ~15ms precision) of the clean audio against a corrected transcript; the player aligns narration to the rendered body at runtime, so it survives later body edits. A sticky mini-bar keeps playback controls reachable while reading. Also adds a privacy-first **lite-YouTube facade** (click-to-load, `youtube-nocookie`, no request before play) as a "video version" at the article end. All media is per-site and German-only → renders on the DE article only; EN stays empty. **New fields:** `articleAudio`, `articleReadalong` (JSON), `articleYoutubeId`. Read-along data build provenance in `tools/readalong/`. Verified headless: in-body highlighting tracks playback word-by-word, click-to-seek, speed/±15s/seek controls, zero JS errors, EN clean. Note: the YouTube video is not public yet (oEmbed 403 / thumbnail 404) — the `articleYoutubeId` value is left empty on prod until the video goes live, so the video section won't render until then. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds an audiobook to the freelancer-math article with word-level
read-along: the actual article-body words highlight in sync with the
narration (no second transcript), click any word to seek. Word timings
come from forced alignment (mfa-align-de, ~15ms precision) of the clean
audio against a corrected transcript; the player aligns narration to the
rendered body at runtime, so it survives later body edits.

Also adds a privacy-first lite-YouTube facade (click-to-load,
youtube-nocookie, no request before play) as a "video version" at the
article end. All media is per-site and German-only, so it renders on the
DE article only; EN stays empty.

New fields: articleAudio, articleReadalong (JSON), articleYoutubeId.
Build provenance for the read-along data lives in tools/readalong/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Phil merged commit 4d611951db into main 2026-06-23 16:50:40 +00:00
Phil deleted branch feat/blog-audiobook 2026-06-23 16:50:40 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Phil/philflow.io!14
No description provided.