diff --git a/docs/DOC_TRUST_MAP.md b/docs/DOC_TRUST_MAP.md index e42d37f..fc2af11 100644 --- a/docs/DOC_TRUST_MAP.md +++ b/docs/DOC_TRUST_MAP.md @@ -81,7 +81,7 @@ Where the two disagree, `PRODUCT_PLAN.md` is the specification and | `docs/planning/` | `PRODUCT_PLAN` — the V1 specification. `PROJECT_PLAN` — the vision. Neither is the schedule; that is the tracker. | | `docs/qa/` | `ClaudeQAPlan` (playbook, passes A–H), `ClaudeQACoverage` (what each pass reached), `ClaudeReport` (the verdict) | | `docs/architecture/` | modules, boundaries, data shapes, the migration table; `GUARDS.md`; `githooks/README.md` | -| `docs/design/` | `README.md` — tone, the four rules that settle arguments, and which specification sections own each surface. `BRAND_GUIDE.md` — the owner-supplied visual identity, which outranks `PRODUCT_PLAN.md` §39 on colour. `brand/` — the owner's source art, including the emblem the launcher icon is cut from. `dist/` — the onboarding illustration sources, and `splash.webp`, the lockup `docs/data/img/logo.webp` and `banner.webp` are generated from. `screenshots/` — captured app screenshots, for the product page on privacyllc.dev and the Play listing | +| `docs/design/` | `README.md` — tone, the four rules that settle arguments, and which specification sections own each surface. `BRAND_GUIDE.md` — the owner-supplied visual identity, which outranks `PRODUCT_PLAN.md` §39 on colour. `brand/` — the owner's source art, including the emblem the launcher icon is cut from and the Play listing exports. `dist/` — the onboarding illustration sources, and `splash.webp`, the lockup `docs/data/img/logo.webp` and `banner.webp` are generated from. `screenshots/` — captured app screenshots, for the product page on privacyllc.dev and the Play listing | | `docs/security/` | `SECURITY` — threat model, the advertising boundary, logging rules. `SECURITY_CHECKLIST` — the pre-release list | | `docs/history/` | `DEVELOPMENT_LOG` (dated, append-only), `HISTORY` (decisions and their reasons), `BATCH_LEDGER` (archived) | | `docs/data/` | `README.md` — the rule, and why this folder cannot be exempted. `img/README.md` — the three required names, their dimensions and the 512 KB ceiling. `img/icon.webp`, `img/logo.webp`, `img/banner.webp` — the marks privacyllc.dev renders | diff --git a/docs/design/BRAND_GUIDE.md b/docs/design/BRAND_GUIDE.md index beb0595..50b1b38 100644 --- a/docs/design/BRAND_GUIDE.md +++ b/docs/design/BRAND_GUIDE.md @@ -3,7 +3,7 @@ ``` Status: Current Owner: _null -Last reviewed: 2026-08-18 +Last reviewed: 2026-08-20 Governs: the visual identity — palette, logo, iconography, typography, tone of artwork Review trigger: A rebrand; any new artwork; any change to the palette or to the logo, and in particular any change to the colours the calendar @@ -782,4 +782,18 @@ Visually: + **rose/plum botanical accent** + **soft lavender/pink gradients** -That combination is the core visual identity of **Privacy: Period Tracker**. \ No newline at end of file +That combination is the core visual identity of **Privacy: Period Tracker**. + +--- + +# 25. Google Play Listing Assets + +The Play listing exports live in [`brand/play-store/`](brand/play-store/). They +derive from this guide rather than adding a new campaign direction: the feature +graphic uses the existing lockup composition, the Play icon uses the existing +app-card mark, and the screenshots come from seeded demo data. + +The same claim discipline applies here as inside the app. Listing artwork may +say the app predicts a period window and protects privacy; it must not imply a +medical diagnosis, contraception, certainty about fertility, or real user +history. diff --git a/docs/design/README.md b/docs/design/README.md index 7639dd8..01ea8f4 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -3,7 +3,7 @@ ``` Status: Current Owner: _null -Last reviewed: 2026-08-18 +Last reviewed: 2026-08-20 Governs: docs/design/**, core/designsystem/**, app/src/main/kotlin/**, app/src/main/res/values/** — the design tokens, every user-facing screen, and the product's tone and interface copy @@ -262,7 +262,7 @@ shipping in the app. [`dist/`](dist/) holds the sources and the reasoning — no text painted into the pixels, no step numbers, and a forecast illustration that names no fields so it cannot contradict the live one beside it. -The art still outstanding is tracked as issues #31, #32 and #44, not listed here. +Remaining artwork is tracked in the issue tracker, not listed here. **Screenshots of the running app live in [`screenshots/`](screenshots/)** — eleven frames from a seeded demo history, for the product page on privacyllc.dev @@ -270,6 +270,11 @@ and for the Play listing. Its README carries the seeded dates, the capture recipe, and the rules every frame has to satisfy; the first of those is that a screenshot of a period tracker is a screenshot of health data. +**The Play listing exports live in [`brand/play-store/`](brand/play-store/)** — +the required feature graphic, Play icon and phone screenshots. They are PNG +exports from the existing brand lockup and seeded screenshots, with Google's +current dimensions checked on 2026-08-20 and recorded beside the files. + The visual language is deliberately narrow — **overlapping circular forms** and nothing else. §42's forbidden list (blood drops, tampons, pads, uterus imagery, gender symbols, anatomy) is a product decision rather than squeamishness: this diff --git a/docs/design/brand/play-store/README.md b/docs/design/brand/play-store/README.md new file mode 100644 index 0000000..c0d46cc --- /dev/null +++ b/docs/design/brand/play-store/README.md @@ -0,0 +1,100 @@ +# Google Play listing assets + +``` +Status: Current +Owner: _null +Last reviewed: 2026-08-20 +Governs: docs/design/brand/play-store/** +Review trigger: Any Google Play preview asset requirement changing; any change + to the source screenshots, brand lockup or declared form factors +``` + +These are the upload-ready Google Play preview assets for issue #32. The source +of truth for requirements is +[Google's Play Console Help](https://support.google.com/googleplay/android-developer/answer/9866151?hl=en), +checked on 2026-08-20: + +- Feature graphic: `1024 x 500`, JPEG or 24-bit PNG, no alpha. +- App icon: `512 x 512`, 32-bit PNG with alpha, max 1024 KB. +- Screenshots: at least two, up to eight per device type, JPEG or 24-bit PNG, + no alpha, each side `320..3840` px, and the long side no more than twice the + short side. +- Apps are more eligible for recommendation surfaces with at least four phone + screenshots at `1080 x 1920` or larger in `9:16`. + +This app declares no Wear OS, TV, Automotive or XR surface in its manifest, so +the committed upload set is the phone listing set plus the required feature +graphic and icon. Tablet and Chromebook screenshots can be added here if the +Play Console asks for them at submission. + +## Files + +| File | Purpose | Dimensions | Format | +| --- | --- | --- | --- | +| `feature-graphic.png` | Required feature graphic | `1024 x 500` | 24-bit PNG | +| `icon-512.png` | Play listing icon | `512 x 512` | 32-bit PNG | +| `phone-screenshots/*.png` | Phone screenshots | `1080 x 1920` | 24-bit PNG | + +## Upload alt text + +| Asset | Alt text | +| --- | --- | +| Feature graphic | Privacy: Period Tracker lockup with calendar, shield and cycle ring | +| `05-privacy-promise.png` | Privacy promise explaining that cycle data is not sold | +| `06-reminder-privacy.png` | Reminder privacy choices with discreet, maximum privacy and direct modes | +| `08-today-forecast.png` | Today screen showing a period window and confidence label | +| `09-calendar.png` | Calendar showing logged, predicted, fertile and ovulation markers | +| `10-insights.png` | Insights screen showing learned cycle averages from seeded history | +| `11-settings-privacy.png` | Settings screen with notification, privacy and data controls | +| `01-onboarding-welcome.png` | Welcome screen with cycle rings and the app's opening promise | + +The screenshots are top crops from the seeded demo captures in +[`../../screenshots/`](../../screenshots/). The source captures remain there +because their README records the demo history, the status-bar setup and the +privacy checks. Cropping from the top keeps the real app UI, removes only the +extra tall-device tail, and brings the assets under Play's aspect-ratio rule. + +## Regenerate + +From the repository root: + +```bash +convert docs/data/img/banner.webp -resize 1024x500^ -gravity center \ + -extent 1024x500 -strip PNG24:docs/design/brand/play-store/feature-graphic.png + +convert docs/data/img/icon.webp -resize 512x512 -alpha set -strip \ + -define png:color-type=6 docs/design/brand/play-store/icon-512.png + +for f in \ + docs/design/screenshots/05-privacy-promise.webp \ + docs/design/screenshots/06-reminder-privacy.webp \ + docs/design/screenshots/08-today-forecast.webp \ + docs/design/screenshots/09-calendar.webp \ + docs/design/screenshots/10-insights.webp \ + docs/design/screenshots/11-settings-privacy.webp \ + docs/design/screenshots/01-onboarding-welcome.webp +do + b=$(basename "$f" .webp) + convert "$f" -crop 1080x1920+0+0 +repage -strip \ + PNG24:"docs/design/brand/play-store/phone-screenshots/$b.png" +done +``` + +Run this check before upload or commit: + +```bash +identify -format '%f %wx%h %[channels] %b\n' \ + docs/design/brand/play-store/feature-graphic.png \ + docs/design/brand/play-store/icon-512.png \ + docs/design/brand/play-store/phone-screenshots/*.png +``` + +## Review rules + +- The screenshots must stay seeded demo data, never real period history. +- The status bar must show only demo furniture: time, wifi and battery, with no + notification visible. +- No asset may state or imply a medical, diagnostic or contraceptive claim. +- PRODUCT_PLAN.md §42's forbidden imagery list applies here too: no blood drops, + tampons, pads, uterus imagery, gender symbols or anatomical reproductive + graphics. diff --git a/docs/design/brand/play-store/feature-graphic.png b/docs/design/brand/play-store/feature-graphic.png new file mode 100644 index 0000000..678a89e Binary files /dev/null and b/docs/design/brand/play-store/feature-graphic.png differ diff --git a/docs/design/brand/play-store/icon-512.png b/docs/design/brand/play-store/icon-512.png new file mode 100644 index 0000000..4c5d4ed Binary files /dev/null and b/docs/design/brand/play-store/icon-512.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/01-onboarding-welcome.png b/docs/design/brand/play-store/phone-screenshots/01-onboarding-welcome.png new file mode 100644 index 0000000..1aa3673 Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/01-onboarding-welcome.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/05-privacy-promise.png b/docs/design/brand/play-store/phone-screenshots/05-privacy-promise.png new file mode 100644 index 0000000..a895f3a Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/05-privacy-promise.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/06-reminder-privacy.png b/docs/design/brand/play-store/phone-screenshots/06-reminder-privacy.png new file mode 100644 index 0000000..44fb7d8 Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/06-reminder-privacy.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/08-today-forecast.png b/docs/design/brand/play-store/phone-screenshots/08-today-forecast.png new file mode 100644 index 0000000..7852e02 Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/08-today-forecast.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/09-calendar.png b/docs/design/brand/play-store/phone-screenshots/09-calendar.png new file mode 100644 index 0000000..9a08f98 Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/09-calendar.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/10-insights.png b/docs/design/brand/play-store/phone-screenshots/10-insights.png new file mode 100644 index 0000000..b31f1e1 Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/10-insights.png differ diff --git a/docs/design/brand/play-store/phone-screenshots/11-settings-privacy.png b/docs/design/brand/play-store/phone-screenshots/11-settings-privacy.png new file mode 100644 index 0000000..8d50edc Binary files /dev/null and b/docs/design/brand/play-store/phone-screenshots/11-settings-privacy.png differ diff --git a/docs/design/screenshots/README.md b/docs/design/screenshots/README.md index 6500137..c1c0922 100644 --- a/docs/design/screenshots/README.md +++ b/docs/design/screenshots/README.md @@ -3,7 +3,7 @@ ``` Status: Current Owner: _null -Last reviewed: 2026-08-19 +Last reviewed: 2026-08-20 Governs: docs/design/screenshots/** — the captured app screenshots and the state they were taken from Review trigger: Any screen in the set changing enough that its shot is no longer @@ -53,8 +53,9 @@ countdown instead, which is the screen the app is built around. ## Reproducing them -Light mode throughout: it matches the site's light aesthetic, and it avoids #44, -where dark mode's Welcome illustration is still a forecast scene. +Light mode throughout: it matches the site's light aesthetic and keeps the set +visually consistent. #44 is fixed now, so dark mode is no longer avoided because +of a known wrong Welcome illustration. The status bar is SysUI demo mode, so all eleven are identical — 9:30, wifi, full battery, nothing else: @@ -88,10 +89,13 @@ Each is a rule #32 states, and each was checked on this set rather than assumed: ## Format -WebP quality 86 at native 1080 × 2400, 520 KB for the set. Play's own required -sizes and counts are **confirmed in the Play Console at submission time**, not -from this file — the same rule the security checklist applies to the target-API -deadline. +WebP quality 86 at native 1080 × 2400, 520 KB for the set. The Play-ready phone +exports are top-cropped PNGs in +[`../brand/play-store/phone-screenshots/`](../brand/play-store/phone-screenshots/) +so they keep the real app UI while meeting Play's aspect-ratio rule. Play's own +required sizes and counts are **confirmed in the Play Console at submission +time**, not from this file — the same rule the security checklist applies to the +target-API deadline. These are not the three marks privacyllc.dev renders for the project card. Those live in [`../../data/img/`](../../data/img/) under fixed names, and that folder diff --git a/docs/history/DEVELOPMENT_LOG.md b/docs/history/DEVELOPMENT_LOG.md index 4b7ae50..b258a08 100644 --- a/docs/history/DEVELOPMENT_LOG.md +++ b/docs/history/DEVELOPMENT_LOG.md @@ -32,6 +32,38 @@ written and stay true. It is exempt from review for the same reason a receipt is ## Entries +### 2026-08-20 (later) — Play listing assets created + +Issue #32 is ready: the Play listing artwork now exists under +`docs/design/brand/play-store/`. The set includes the required feature graphic, +the 512 px Play icon and seven phone screenshots exported from the seeded demo +captures. The screenshots are top crops rather than resized screenshots, so they +keep the real app UI and land at Play's recommended `1080 x 1920` portrait +shape. + +Google's Play Console Help was checked on 2026-08-20 before choosing the export +formats: feature graphic `1024 x 500`, screenshots as JPEG or 24-bit PNG with no +alpha and a long side no more than twice the short side, and at least four app +screenshots at `1080px+` for recommendation eligibility. The app manifest +declares no Wear OS, TV, Automotive or XR surface, so no extra form-factor asset +set was created. + +The folder README records the upload alt text, regeneration commands and the +rules that matter for a period tracker: seeded demo data only, no notification +in the status bar, no medical or contraceptive claim, and none of §42's forbidden +imagery. + +**What this proved:** `identify` reported `1024x500 srgb` for the feature +graphic, `512x512 srgba` for the Play icon, and seven `1080x1920 srgb` phone +screenshots. A failing validation script checked exact dimensions, channel +rules, Play screenshot aspect ratio and file size ceilings. `doc-triggers.py` +and `doc-claims.sh` were run after the docs updates; doc-claims passed with only +the repository's expected menu notices. + +**Next action:** finish #31, the neutral incognito launcher label and icon. + +**Blockers:** none. + ### 2026-08-20 — Dark welcome artwork corrected Issue #44 is fixed in the artwork set and in the shipping drawables. The dark