The Today screen and its six dynamic states #17

Closed
opened 2026-08-18 03:33:28 -05:00 by null · 0 comments
Owner

TodayScreen is a working surface built in Batch 01 that says so on itself. It renders the right data and none of the design in PRODUCT_PLAN.md §21–§22.

The forecast number is the visual hero (§38) — large, dominating, read before anything else. Nothing competes with it, including anything of ours.

Six states, §22, each a different screen rather than a variant of one:

  1. During period — DAY n, started date, typical duration, Still Going / Period Ended
  2. Between period and fertile window — cycle day, days to next period, days to fertile window
  3. During estimated fertile window — estimated ovulation, days to next period
  4. Period approaching — the big countdown, most likely, expected window, Started Early?
  5. Predicted day — "Your period may start today", Started / Not Yet
  6. Beyond the prediction — never "Your period is late!". §22 gives the wording: "Not yet?", original forecast, updated forecast, and the two actions.

That last one is the one to get right. The app must not imply anything is wrong with the user, and the forecast has already been re-conditioned by the engine — the screen only has to say so calmly.

Banner ad space is reserved but empty in this batch (§33, §48): reserving it now is what stops a layout jump when Batch 07 fills it, and ads must never appear over controls or between health workflow steps.

Verify: each of the six states is reachable in a Compose preview and by driving the app; the countdown is the largest element on screen; no state uses the word "late"; and the banner slot holds its height with no ad present.

`TodayScreen` is a working surface built in Batch 01 that says so on itself. It renders the right data and none of the design in PRODUCT_PLAN.md §21–§22. **The forecast number is the visual hero** (§38) — large, dominating, read before anything else. Nothing competes with it, including anything of ours. Six states, §22, each a different screen rather than a variant of one: 1. During period — DAY n, started date, typical duration, `Still Going` / `Period Ended` 2. Between period and fertile window — cycle day, days to next period, days to fertile window 3. During estimated fertile window — estimated ovulation, days to next period 4. Period approaching — the big countdown, most likely, expected window, `Started Early?` 5. Predicted day — "Your period may start today", `Started` / `Not Yet` 6. Beyond the prediction — **never "Your period is late!"**. §22 gives the wording: "Not yet?", original forecast, updated forecast, and the two actions. That last one is the one to get right. The app must not imply anything is wrong with the user, and the forecast has already been re-conditioned by the engine — the screen only has to say so calmly. Banner ad space is **reserved but empty** in this batch (§33, §48): reserving it now is what stops a layout jump when Batch 07 fills it, and ads must never appear over controls or between health workflow steps. Verify: each of the six states is reachable in a Compose preview and by driving the app; the countdown is the largest element on screen; no state uses the word "late"; and the banner slot holds its height with no ad present.
null added this to the Batch 03 — Core UX milestone 2026-08-18 03:33:28 -05:00
null closed this issue 2026-08-18 03:50:32 -05:00
Sign in to join this conversation.
No Label
P0
P1
P2
release-blocker
No project
No Assignees
1 Participants
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: null/Privacy-Period-Tracker#17
No description provided.