Mock of B6 — Parent receives and views a photo (embeds Midday Heartbeat + B-Retention)

Sources: spec §3.6 B6 and §3.11 B-Retention, prd.md §5 Journey 6.

Invariants enforced in this screen: I-Retention (§5.1, §3.11) — 90-day visibility countdown, photo disappears at expiry; I-AccessWindow (§5.1) — access requires active or in-grace subscription; parents-are-busy (§5.2) — open-to-close in under 30 seconds (AC4); no-dark-patterns (§5.2, AC5) — no blurred previews, no manufactured urgency, no countdown timers on subscription; Midday Heartbeat at-most-once per child per day (§3.6 AC3).

Inference flags:

B6 — Parent receives and views a photo

Step 1 — Notification dispatch

Real-time push

Littlereach
New photo from [daycare]

[exact push-notification copy — not specified in spec]

Daily digest

Littlereach · 6:00pm local
Today at [daycare] — 5 photos

[exact copy — not specified; §3.6 step 1 sets digest_time_of_day = 6:00pm local to the parent]

Parent sets preference per-child or globally (§3.6 step 7). Default on subscribe = real_time (§3.7 postcondition).

Step 2 — Landing on notification tap (full-screen)

Tap → app → directly on photo, full-screen, zero intermediate steps (§3.6 step 2, AC2).

[photo full-screen]

Swipe ← → between recent photos (§3.6 step 3).

AC5: no blurred preview, no urgency, no countdown overlay — no dark patterns.

Retention badge (per-photo, embedding B-Retention)

37 days until this photo expires [inference: exact badge placement and wording not specified; §5.1 I-Retention and §3.11 require 90-day deletion but do not specify surfacing]

Step 4 — Exit to timeline (default)

Chronological, most recent first (§3.6 step 4). Parent's last selected view is remembered across sessions (§3.6 step 5).

DatePhotoVisibility
today
photo
89 days left
yesterday
photo
88 days left
last Monday
photo
83 days left

Timeline Gallery — simple toggle (§3.6 step 5).

Step 5 — Gallery view (same photos, grid layout)

photo
photo
photo
photo
photo
photo

Step 6 — Download

From either view, parent MAY download any photo. Download delivers original-resolution file, not a thumbnail (§3.6 step 6).

Download photo

Step 7 — Notification preferences

Midday Heartbeat (sub-behavior of B6)

A scheduled warm delivery: a photo chosen from the day's captures with a short Message written from the child's perspective. Delivered at midday_heartbeat_time, set to 2:00pm local to the parent (§3.6).

Littlereach · 2:00pm local

A message from [child]

heartbeat photo

["Mommy, today I tried finger painting for the first time" — NOT the mock's content. Placeholder; actual message source is Q6 open parameter — see §5.4. Mock must not invent the message body.]

AC3: at most one Midday Heartbeat per linked child per day, even if multiple photos qualify.

[photo selection algorithm absent a teacher flag — Appendix A item 3 unresolved; options: first of day / most-tagged / random / require teacher flag]

Error — subscription lapsed and grace window expired (I-AccessWindow)

Parent sees a soft, clean state. No blurred preview, no teaser, no countdown timer (§5.2 no-dark-patterns, AC5).

[exact copy — not specified. Spec requires "clean, clear state — not a teaser"]

Resubscribe

Retention job — parent-facing manifestation of B-Retention (§3.11)

Photos past 90 days are hard-deleted within 24 hours of their soft-mark. Once deleted:

Spec: "photos visible in the app are never expired in-session" (§3.6 error cases). Expiry is applied at the retention job's next run, not mid-view.