docs: eleven app screenshots, from a seeded demo history
Privacy: Period Tracker is the only Privacy LLC product without a page on privacyllc.dev — /work/bill-tracker, /work/closer-couples and /work/fruit-fall exist, /work/privacy-period-tracker returns 404 — and until now no screenshot of this app existed anywhere in the repository. Eleven frames covering all seven onboarding steps plus Today, Calendar, Insights and Settings, in the house style those pages use: portrait, captioned, no device frames, no decorative background. SEEDED, NOT REAL Six invented starts — 8 Mar, 5 Apr, 3 May, 31 May, 28 Jun, 26 Jul 2026 — giving gaps of 28/29/28/28/29 days. On a 19 August clock that is cycle day 25, and the engine earns "period likely in 4 days, most likely 23 August, expected 22-24 August, confidence High". Nothing shown is real data, which #32 states is not a nicety: a screenshot of a period tracker is a screenshot of health data. Today was reshot once. The first seeding landed the capture day on the estimated ovulation date, so the hero read "estimated ovulation in 0 days" — true, and a poor lead. Shifting the history ten days gives the period countdown, which is the screen the app is built around. CHECKED, NOT ASSUMED The status bar is SysUI demo mode so all eleven are identical, and the top strip of every frame was cropped and compared in one image to confirm what #32 warns about: no notification appears in any of them. The not-contraception line is visible in the Today and Calendar frames. Light mode throughout, which also avoids #44's wrong dark Welcome illustration. 520 KB for the set, 1080x2400 WebP, each far under the 512 KB ceiling. The README carries the seeded dates, the demo-mode and text-input-picker recipe, and the rules every frame must satisfy — so the next capture reproduces this one rather than re-deriving it. Also corrects a stale `splash.png` in the trust map, which became splash.webp when it was converted. These are not the three marks privacyllc.dev renders for the project card; that folder says plainly that screenshots do not belong in it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
@ -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/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/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/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.png`, the lockup `docs/data/img/logo.webp` and `banner.webp` are generated from |
|
| `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/security/` | `SECURITY` — threat model, the advertising boundary, logging rules. `SECURITY_CHECKLIST` — the pre-release list |
|
| `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/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 |
|
| `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 |
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,13 @@ 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
|
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.
|
names no fields so it cannot contradict the live one beside it.
|
||||||
|
|
||||||
The art still outstanding is tracked as issues #30 to #32, not listed here.
|
The art still outstanding is tracked as issues #31, #32 and #44, 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
|
||||||
|
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 visual language is deliberately narrow — **overlapping circular forms** and
|
The visual language is deliberately narrow — **overlapping circular forms** and
|
||||||
nothing else. §42's forbidden list (blood drops, tampons, pads, uterus imagery,
|
nothing else. §42's forbidden list (blood drops, tampons, pads, uterus imagery,
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
|
@ -0,0 +1,98 @@
|
||||||
|
# App screenshots
|
||||||
|
|
||||||
|
```
|
||||||
|
Status: Current
|
||||||
|
Owner: _null
|
||||||
|
Last reviewed: 2026-08-19
|
||||||
|
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
|
||||||
|
what the app looks like; any new screen worth showing
|
||||||
|
```
|
||||||
|
|
||||||
|
> Eleven frames of the real app, captured from a **seeded demo history**. They
|
||||||
|
> exist for the product page on privacyllc.dev, where every other Privacy LLC
|
||||||
|
> product already has a captioned portrait gallery and this one has no page at
|
||||||
|
> all. The same frames are the phone screenshots [issue #32](https://dream.scheller.ltd/null/Privacy-Period-Tracker/issues/32)
|
||||||
|
> needs for the Play listing.
|
||||||
|
|
||||||
|
## The set, in gallery order
|
||||||
|
|
||||||
|
| File | Screen | Suggested caption |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `01-onboarding-welcome.webp` | Onboarding, step 1 | Full-bleed artwork and a plain promise |
|
||||||
|
| `02-onboarding-last-period.webp` | Onboarding, step 2 | One date to begin with |
|
||||||
|
| `03-onboarding-period-end.webp` | Onboarding, step 3 | "Still going" and "I'm not sure" are real answers |
|
||||||
|
| `04-onboarding-history.webp` | Onboarding, step 4 | Earlier dates make the first forecast better |
|
||||||
|
| `05-privacy-promise.webp` | Onboarding, step 5 | Your cycle belongs to you |
|
||||||
|
| `06-reminder-privacy.webp` | Onboarding, step 6 | You choose what a reminder says |
|
||||||
|
| `07-first-forecast.webp` | Onboarding, step 7 | A window and a confidence, never a bare date |
|
||||||
|
| `08-today-forecast.webp` | Today | The forecast, and what it will not claim |
|
||||||
|
| `09-calendar.webp` | Calendar | States that differ in shape, not colour |
|
||||||
|
| `10-insights.webp` | Insights | Learned from your history, and says how much |
|
||||||
|
| `11-settings-privacy.webp` | Settings | Delete my data, and it means it |
|
||||||
|
|
||||||
|
The site's other product pages run six or seven images. If the gallery takes
|
||||||
|
seven, **05, 06, 08, 09, 10, 11 and 01** are the set — those carry the argument.
|
||||||
|
02, 03 and 04 are the data-entry steps and are the first to drop.
|
||||||
|
|
||||||
|
## The state they were captured from
|
||||||
|
|
||||||
|
Six invented period starts — **8 March, 5 April, 3 May, 31 May, 28 June and
|
||||||
|
26 July 2026** — giving cycle gaps of 28, 29, 28, 28 and 29 days. On a device
|
||||||
|
clock of 19 August 2026 that is cycle day 25, and the engine earns *period likely
|
||||||
|
in 4 days, most likely 23 August, expected 22–24 August, confidence High*.
|
||||||
|
|
||||||
|
**Nothing here is real data.** That is not a nicety: a screenshot of a period
|
||||||
|
tracker is a screenshot of health data, and #32 says so in as many words.
|
||||||
|
|
||||||
|
Today was reshot once. The first seeding put the capture day *on* the estimated
|
||||||
|
ovulation date, so the hero read "estimated ovulation in 0 days" — true, and a
|
||||||
|
poor lead for a gallery. Shifting the history ten days earlier gives the period
|
||||||
|
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.
|
||||||
|
|
||||||
|
The status bar is SysUI demo mode, so all eleven are identical — 9:30, wifi, full
|
||||||
|
battery, nothing else:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adb shell settings put global sysui_demo_allowed 1
|
||||||
|
adb shell am broadcast -a com.android.systemui.demo -e command enter
|
||||||
|
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 0930
|
||||||
|
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4 -e fully true
|
||||||
|
adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile hide
|
||||||
|
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false
|
||||||
|
# … capture …
|
||||||
|
adb shell am broadcast -a com.android.systemui.demo -e command exit
|
||||||
|
```
|
||||||
|
|
||||||
|
Seeding is faster through the date picker's **text input mode** than by tapping
|
||||||
|
across months: its toggle is `content-desc="Switch to text input mode"`, and the
|
||||||
|
field then accepts `MM/DD/YYYY` typed straight in.
|
||||||
|
|
||||||
|
## What must be true of every frame
|
||||||
|
|
||||||
|
Each is a rule #32 states, and each was checked on this set rather than assumed:
|
||||||
|
|
||||||
|
- **No real history.** Seed deliberately, every time.
|
||||||
|
- **Nothing in the status bar but the demo furniture.** A reminder visible in a
|
||||||
|
published screenshot is a privacy failure at scale — the top strip of all
|
||||||
|
eleven was cropped and compared in one image to confirm it.
|
||||||
|
- **No medical, diagnostic or contraceptive claim.** The not-contraception line
|
||||||
|
is visible in `08` and `09`, which is the honest direction to err in.
|
||||||
|
- **PRODUCT_PLAN.md §42's forbidden list applies**, as it does to all artwork.
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
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
|
||||||
|
says plainly that screenshots do not belong in it.
|
||||||