Show the cycle-length history as a chart, not a column of numbers #59

Closed
opened 2026-08-20 16:38:06 -05:00 by null · 0 comments
Owner

What is true now. RecentCyclesCard in InsightsScreen.kt prints CycleInsights.recentCycleLengths as a text column. The Insights screen's whole job is to show what the app has learned, and a list of numbers is the least legible form of the one pattern the user actually wants to see.

What to do. A horizontal bar per cycle, drawn in Compose with no chart library, with the typical range shaded behind them so 'this one was unusual for me' is visible at a glance. The bars annotate the numbers rather than replacing them.

Traps. §43 applies: a value label on every bar, nothing conveyed by colour alone, and each bar exposing its own content description — a chart that reads to a screen reader as an unlabelled row of shapes carries none of its information. Render nothing below CycleInsights.MINIMUM_FOR_AVERAGE; a chart of one bar overstates what is known, which is the same mistake the accuracy card already refuses to make.

Verify: a UI test asserting each bar exposes an 'N days' content description and that the card renders nothing below the minimum cycle count, plus previews in both themes per docs/design/README.md.

**What is true now.** `RecentCyclesCard` in `InsightsScreen.kt` prints `CycleInsights.recentCycleLengths` as a text column. The Insights screen's whole job is to show what the app has learned, and a list of numbers is the least legible form of the one pattern the user actually wants to see. **What to do.** A horizontal bar per cycle, drawn in Compose with no chart library, with the typical range shaded behind them so 'this one was unusual for me' is visible at a glance. The bars annotate the numbers rather than replacing them. **Traps.** §43 applies: a value label on every bar, nothing conveyed by colour alone, and each bar exposing its own content description — a chart that reads to a screen reader as an unlabelled row of shapes carries none of its information. Render nothing below `CycleInsights.MINIMUM_FOR_AVERAGE`; a chart of one bar overstates what is known, which is the same mistake the accuracy card already refuses to make. Verify: a UI test asserting each bar exposes an 'N days' content description and that the card renders nothing below the minimum cycle count, plus previews in both themes per docs/design/README.md.
null added this to the Batch 10 — Show what you already know milestone 2026-08-20 16:38:06 -05:00
null added the
P2
label 2026-08-20 16:38:06 -05:00
null closed this issue 2026-08-21 01:55:48 -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#59
No description provided.