feat(player): Feldenkrais rest-button for lesson audio player #51

Merged
KnallerKalle merged 2 commits from feat/lesson-rest-button into dev 2026-08-10 23:36:05 +00:00
KnallerKalle commented 2026-08-10 23:27:21 +00:00 (Migrated from github.com)

Plan

Deliver the "Lesson player (rest-button)" Core Platform item — make rest a first-class, nurturing action in the lesson audio player, honouring the Feldenkrais principle that rest is part of the lesson, not an interruption.

Outcome

  • src/components/RestOverlay.tsx — a role="dialog" overlay with a welcoming, non-pressuring message ("Ruhe, solange du möchtest. Es gibt nichts zu erreichen." — no countdown, no goal language). Parent-controlled.
  • AudioPlayer.tsx — new "Rest" button pauses the audio and shows the overlay; the user continues only when ready (the overlay's resume button simply hides it; the user re-presses play to continue).
  • i18n: 3 new player.rest_* keys in all 9 languages (de/en/es/fr/he/pt/pt-BR/ru/zh).

The lesson player already had play/pause/seek/resume/speed/loop. The rest-button was the defining missing piece that distinguishes an ATM lesson player from a generic audio player.

Impact on release goals

Advances the Core Platform → "Lesson player (rest-button)" roadmap item from [ ] to [~]. Strengthens the habit-loop routine leg and the D1→D7 autonomy-supportive experience: the user can rest without guilt and continue without pressure.

Blackbox

  • Unit suite 80/80 green (12 files), incl. 5 new tests in src/components/__tests__/RestOverlay.test.tsx:
    1. renders the nurturing rest message
    2. shows a non-pressuring resume button
    3. calls onResume when clicked
    4. accessible: overlay is a role="dialog" with a heading
    5. Feldenkrais assertion: no countdown/timer or strain/obligation language appears
  • TSC clean.

Six-perspectives check

  • Product: the rest-button is an observable, demo-able feature; amplifies the felt-change moment.
  • Engineering: minimal diff (additive component + one button + overlay), test-first, no existing behaviour changed.
  • Psychology: autonomy-supportive — rest is welcoming, not penalised; no "you must continue".
  • Biomechanics: rest lets the nervous system integrate (gravity-aligned, no effort).
  • Anatomy: N/A (UI only).
  • Feldenkrais: the core principle "rest whenever you like; there is nothing to reach" is now explicit, with a test asserting no strain language.

Risk

  • Minimal — additive component + one button. AudioPlayer gains relative positioning for the absolute overlay; no existing behaviour changed. The overlay is purely presentational and parent-controlled.

Checklist

  • Branch off latest dev
  • Conventional Commits (test: red-first, feat: implementation)
  • Patchlog entry appended
  • Roadmap status updated
  • No secrets / no large binaries

This PR was created by an AI agent (OpenHands) on behalf of the ATM development.

## Plan Deliver the **"Lesson player (rest-button)"** Core Platform item — make rest a first-class, nurturing action in the lesson audio player, honouring the Feldenkrais principle that rest is *part of* the lesson, not an interruption. ## Outcome - `src/components/RestOverlay.tsx` — a `role="dialog"` overlay with a welcoming, non-pressuring message (**"Ruhe, solange du möchtest. Es gibt nichts zu erreichen."** — no countdown, no goal language). Parent-controlled. - `AudioPlayer.tsx` — new **"Rest" button** pauses the audio and shows the overlay; the user continues only when ready (the overlay's resume button simply hides it; the user re-presses play to continue). - **i18n**: 3 new `player.rest_*` keys in all 9 languages (de/en/es/fr/he/pt/pt-BR/ru/zh). The lesson player already had play/pause/seek/resume/speed/loop. The **rest-button was the defining missing piece** that distinguishes an ATM lesson player from a generic audio player. ## Impact on release goals Advances the **Core Platform → "Lesson player (rest-button)"** roadmap item from `[ ]` to `[~]`. Strengthens the habit-loop **routine** leg and the D1→D7 autonomy-supportive experience: the user can rest without guilt and continue without pressure. ## Blackbox - **Unit suite 80/80 green** (12 files), incl. **5 new** tests in `src/components/__tests__/RestOverlay.test.tsx`: 1. renders the nurturing rest message 2. shows a non-pressuring resume button 3. calls `onResume` when clicked 4. accessible: overlay is a `role="dialog"` with a heading 5. **Feldenkrais assertion**: no countdown/timer or strain/obligation language appears - TSC clean. ## Six-perspectives check - [x] **Product:** the rest-button is an observable, demo-able feature; amplifies the felt-change moment. - [x] **Engineering:** minimal diff (additive component + one button + overlay), test-first, no existing behaviour changed. - [x] **Psychology:** autonomy-supportive — rest is welcoming, not penalised; no "you must continue". - [x] **Biomechanics:** rest lets the nervous system integrate (gravity-aligned, no effort). - [x] **Anatomy:** N/A (UI only). - [x] **Feldenkrais:** the core principle "rest whenever you like; there is nothing to reach" is now explicit, with a test asserting no strain language. ## Risk - Minimal — additive component + one button. AudioPlayer gains `relative` positioning for the absolute overlay; no existing behaviour changed. The overlay is purely presentational and parent-controlled. ## Checklist - [x] Branch off latest `dev` - [x] Conventional Commits (`test:` red-first, `feat:` implementation) - [x] Patchlog entry appended - [x] Roadmap status updated - [x] No secrets / no large binaries --- _This PR was created by an AI agent (OpenHands) on behalf of the ATM development._
Sign in to join this conversation.
No reviewers
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
Kalle/ATM!51
No description provided.