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>
This commit is contained in:
null 2026-08-19 01:47:52 -05:00
parent ba5ff3d0ed
commit e7d38bccbd
14 changed files with 106 additions and 2 deletions

View File

@ -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 AH), `ClaudeQACoverage` (what each pass reached), `ClaudeReport` (the verdict) | | `docs/qa/` | `ClaudeQAPlan` (playbook, passes AH), `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 |

View File

@ -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,

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -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 2224 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.