Coach schedule¶
The coach schedule is the 21-day program: it decides which Coach conversation plays on each day and time-slot, and carries the push-notification copy that nudges the user to open it.
Unlike most content, the schedule is not split into parent + translations —
each row is a single entry, and the language-specific push text lives inside the
push field.

Fields (per row)¶
| Field | What it means |
|---|---|
| Day | The program day, 1–21. |
| Slot | morning, afternoon, or night — the time-of-day slot. |
| Tree | The selection logic that picks which conversation plays for this day/slot (it can branch on user state). |
| Push | The notification copy for this day/slot, per language — push.en and push.de each have a body. German is required; the body must be non-empty. |
There should be an entry for every (day, slot) across days 1–21, each with a
tree and a non-empty push.en + push.de. (The dummy/test seed enforces full
coverage; production should match.)
How it reaches the user¶
- At each slot, the Coach evaluates the day/slot's tree to choose the conversation to play.
- The push body is what the notification dispatcher sends to invite the user in. (Push titles are the fixed brand "Naluma"; you author the body here.)
What blocks a save¶
- A missing or empty
push.en/push.debody. - A tree that selects a conversation slug that doesn't exist.
Where it shows up¶
Behind the scenes: it drives which conversation the Coach tab shows each day, and the push notifications that bring users back.