Privacy-Period-Tracker/docs/design/dist/README.md

92 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Onboarding illustrations — the decided direction
```
Status: Current
Owner: _null
Last reviewed: 2026-08-18
Governs: docs/design/dist/** — the onboarding illustration set and what it is for
Review trigger: Any illustration added or replaced here; the onboarding artwork
in issue #29 landing in the app
```
> **References, not shipping assets.** Nothing in this folder goes in the APK.
> These are the decided direction for onboarding, drawn from
> [`../BRAND_GUIDE.md`](../BRAND_GUIDE.md) §22's master prompt. The vectors that
> eventually ship are drawn *from* these.
Seven illustrations in a matched light/dark pair, named for the composables they
replace in
[`../../../core/designsystem/src/main/kotlin/dev/privacyllc/period/designsystem/art/Illustrations.kt`](../../../core/designsystem/src/main/kotlin/dev/privacyllc/period/designsystem/art/Illustrations.kt):
| File stem | Onboarding step | Composable |
| --- | --- | --- |
| `01_WelcomeIllustration` | 1 Welcome | `WelcomeIllustration` |
| `02_LastPeriodIllustration` | 2 Last period start | *new* |
| `03_PeriodEndIllustration` | 3 Period end | *new* |
| `04_LearningIllustration` | 4 Previous history | `LearningIllustration` |
| `05_PrivacyIllustration` | 5 Privacy promise | `PrivacyIllustration` |
| `06_NotificationPrivacyIllustration` | 6 Reminder privacy | *new* |
| `07_ForecastIllustration` | 7 First forecast | *new* |
| `EmptyStateIllustration` | — not onboarding | `EmptyStateIllustration` |
Each stem exists as `Light/<stem>_light.webp` and `Dark/<stem>_dark.webp`, at
**identical dimensions per card**, so a theme switch swaps the image without
moving the layout.
`EmptyStateIllustration` is the odd one and deliberately unnumbered: it is
Today's "nothing logged yet" state, not an onboarding step, and it is also drawn
in the onboarding previews. Its ring is empty because nothing has been logged —
the same ring the other illustrations fill with cycle-day markers, which is what
makes the empty state read as *waiting* rather than *broken*.
## What these got right, and why it is worth not undoing
Each of these was a correction during review, and every one of them would be easy
to reintroduce by regenerating carelessly:
- **No text of any kind is painted into the pixels.** The app renders all seven
titles and subtitles itself through `Heading(...)` in `OnboardingScreen.kt`.
Art carrying its own title prints every heading twice, cannot be translated,
cannot scale with the user's font size, and is invisible to TalkBack.
- **No step-number badge.** `LearningIllustration` is not only onboarding step 4
— it is also the Insights empty state, where a "4" means nothing. Baked numbers
also freeze the running order, and this flow has already changed shape once. A
step indicator, if wanted, belongs in live UI where TalkBack can read it.
- **`07_Forecast` shows a calendar and a cycle arc, and names no fields.** An
earlier draft drew a forecast panel listing *Fertile window* and *Ovulation*,
which the real first-forecast screen deliberately does not show — on a fresh
install it reports confidence Low and Today reads "Not enough history to
estimate". A later draft named the correct fields but painted *Confidence —
Low* permanently, which is wrong for anyone with a settled cycle. Naming
nothing is the only version that cannot contradict the live forecast.
- **The dark set is a real dark composition**, not the light one dimmed — the
midnight-plum ground `BRAND_GUIDE.md` §22 specifies.
## Still to do before anything ships
Tracked as **#29**, which stays open until the app renders these:
1. Redraw as Compose vector paths behind the existing replaceable names, taking
colour from theme tokens rather than shipping two raster sets.
2. Add the light/dark preview pair per step, per [`../README.md`](../README.md).
3. Reconcile step copy — `PRODUCT_PLAN.md` owns the screen wording.
**One inconsistency to settle when these are redrawn:** the fourteen onboarding
illustrations are contained cards with a rounded frame, and the two
`EmptyStateIllustration` files are full-bleed with no frame. Both scale
acceptably at the 110160 dp these are actually drawn at — checked by rendering
them at size rather than assumed — but the frame should be consistent across the
set, or deliberately absent from all of it.
A second, smaller one: `TodayScreen.kt` currently calls
`EmptyStateIllustration(color = ..., size = ...)` with a single colour. These are
full-colour drawings, so the vector version will not take a colour parameter and
that call site changes with it.
## Format
WebP at the delivered resolution — 312 KB for all sixteen, against 6.8 MB as
PNG, and the same format [`../../data/img/`](../../data/img/) uses for the marks
privacyllc.dev renders. The delivery `.zip` archives are deliberately not
tracked; see [`.gitignore`](.gitignore).