Product Requirements
Section 03

User Journey Flows

These journey flows describe what users do and see across the app surfaces. They extend the stack specification’s user flows with alternate paths, failure recovery, edge cases, roadmap candidates, and traceability back to the feature catalogue.

UI traceability convention

Canonical UI IDs will be added after Phase 5 when the UI / Hybrid inventory exists. Until then, each journey references reserved placeholders in the UI-* column. Replace the placeholders rather than changing journey IDs when the UI inventory is created.

SurfaceReserved UI IDNotes
Animated welcomeUI-ONB-001First-run welcome surface.
Cultural themesUI-ONB-002Multi-select theme picker.
AudienceUI-ONB-003Self / child / both selector.
Accessibility quick-setUI-ONB-004Initial accessibility defaults.
Library homeUI-LIB-001Home, continue, featured, new, downloaded, and checklist surfaces.
Artwork detailUI-ART-001Metadata, preview, action, artist credit, report.
Download stateUI-DL-001Download progress, retry, cache status.
CanvasUI-CAN-001Artwork viewport, zoom, pan, fill state.
PaletteUI-PAL-001Swatches, progress, selected colour, highlight action.
PaywallUI-IAP-001Pack offer, sign-in prompt, restore.
Account upgradeUI-ID-001Email, Apple, Google, merge confirmation.
SettingsUI-SET-001Account, preferences, accessibility, child mode, restore, notifications.
Admin previewUI-ADM-001Internal-only preview and publish workflow.

Primary journeys

JRN-P01 — First-time anonymous user reaches the aha moment

StepUser doesUser seesFeature IDsReserved UI IDs
1Opens the app for the first time.Animated outcome-led welcome.FEAT-ID-001, FEAT-ONB-001UI-ONB-001
2Selects one or more cultural themes.Theme picker with culturally meaningful options.FEAT-ONB-002UI-ONB-002
3Chooses audience: self, child, or both.Audience selector and child-mode implication.FEAT-ONB-003UI-ONB-003
4Confirms accessibility defaults.Always-show-numbers on, reduce motion inherited, pattern fills optional.FEAT-ONB-004, FEAT-ACC-001, FEAT-ACC-003UI-ONB-004
5Lands in the personalised library.”Chosen for you” row and featured free starter artwork.FEAT-ONB-005, FEAT-LIB-001, FEAT-LIB-002UI-LIB-001
6Starts the featured artwork.Canvas opens with first-tap guidance.FEAT-ONB-006, FEAT-CAN-001, FEAT-PAL-001UI-CAN-001, UI-PAL-001
7Selects a colour and taps matching cells.Regions fill, palette progress updates, first satisfying fill is reached.FEAT-CAN-003, FEAT-CAN-004, FEAT-PROG-001UI-CAN-001, UI-PAL-001
8Completes the starter or reaches the large-artwork milestone.Founder’s note appears, then optional account prompt.FEAT-ONB-007, FEAT-ONB-008, FEAT-PROG-003UI-CAN-001, UI-ID-001
flowchart TD
    A["Open app"] --> B["Animated welcome"]
    B --> C["Choose cultural themes"]
    C --> D["Choose audience"]
    D --> E["Confirm accessibility defaults"]
    E --> F["Personalised library reveal"]
    F --> G["Open featured starter artwork"]
    G --> H["Guided first taps"]
    H --> I["First satisfying fill"]
    I --> J["Completion or 50% milestone"]
    J --> K["Founder's note"]
    K --> L["Soft account prompt"]

JRN-P02 — Returning user resumes downloaded artwork

StepUser doesUser seesFeature IDsReserved UI IDs
1Opens the app.Library home with continue row loaded from local progress.FEAT-LIB-001, FEAT-PROG-001UI-LIB-001
2Selects the in-progress artwork.Canvas opens from local cache.FEAT-CACHE-001, FEAT-CAN-001UI-CAN-001
3Colours more regions.Palette and progress update instantly.FEAT-CAN-003, FEAT-PAL-001, FEAT-PROG-001UI-CAN-001, UI-PAL-001
4Comes online if previously offline.Sync runs quietly in the background.FEAT-PROG-002, FEAT-NET-001UI-LIB-001
flowchart TD
    A["Open app"] --> B["Load local progress"]
    B --> C["Show Continue row"]
    C --> D["Open cached artwork"]
    D --> E["Colour offline or online"]
    E --> F["Queue local progress"]
    F --> G["Sync when online"]

JRN-P03 — Free artwork download and play

StepUser doesUser seesFeature IDsReserved UI IDs
1Browses the library and opens a free artwork.Artwork detail with free badge and download action.FEAT-LIB-001, FEAT-ART-001UI-LIB-001, UI-ART-001
2Taps download.Download progress state.FEAT-DL-001, FEAT-DL-002UI-DL-001
3Waits for verification.Download completes and action changes to play.FEAT-DL-002, FEAT-CACHE-001UI-DL-001, UI-ART-001
4Taps play.Canvas opens and remains playable offline afterwards.FEAT-CACHE-001, FEAT-CAN-001UI-CAN-001

JRN-P04 — Content pack purchase unlocks artwork

StepUser doesUser seesFeature IDsReserved UI IDs
1Opens a locked premium artwork.Artwork detail with premium badge and unlock action.FEAT-ART-001, FEAT-IAP-001UI-ART-001
2Taps unlock.Paywall sheet for content packs.FEAT-IAP-002, FEAT-OBS-002UI-IAP-001
3Signs in if anonymous.Account upgrade flow, then return to paywall.FEAT-ID-002, FEAT-ID-003UI-ID-001, UI-IAP-001
4Starts native purchase.Platform purchase sheet.FEAT-IAP-003UI-IAP-001
5Purchase validates.Entitlement applied; artwork download becomes available.FEAT-IAP-003, FEAT-DL-001UI-ART-001, UI-DL-001
flowchart TD
    A["Tap premium artwork"] --> B{"Active entitlement?"}
    B -->|Yes| C["Allow download"]
    B -->|No| D["Paywall sheet"]
    D --> E{"Anonymous?"}
    E -->|Yes| F["Account upgrade"]
    E -->|No| G["Native purchase"]
    F --> G
    G --> H["Validate receipt server-side"]
    H --> I["Persist entitlement"]
    I --> C

JRN-P05 — Content operator publishes an artwork

StepUser doesUser seesFeature IDsReserved UI IDs
1Creates or receives artwork assets.Authoring and segmentation files.FEAT-CONT-001, FEAT-CONT-002UI-ADM-001
2Runs bundle generator and validator.Errors, warnings, or valid bundle output.FEAT-CONT-003UI-ADM-001
3Requests cultural review.Review status and reviewer notes.FEAT-CULT-001, FEAT-ADMIN-001UI-ADM-001
4Uploads approved bundle and metadata.Internal preview.FEAT-CONT-002, FEAT-ADMIN-001UI-ADM-001
5Publishes.Artwork appears in the published catalogue.FEAT-LIB-001, FEAT-ART-001UI-LIB-001, UI-ART-001

Alternate journeys

IDVariationUser doesUser seesFeature IDsReserved UI IDs
JRN-A01User skips account promptDismisses the soft account prompt after founder note.Returns to library or canvas with local progress preserved.FEAT-ONB-008, FEAT-PROG-001UI-ID-001, UI-LIB-001
JRN-A02User changes themes laterOpens settings and edits cultural themes.Future library rows update to the new preferences.FEAT-ONB-002, FEAT-SET-001, FEAT-LIB-002UI-SET-001, UI-LIB-001
JRN-A03User enables pattern fillsTurns on pattern fills in onboarding or settings.Canvas fills include distinguishable hatching.FEAT-ONB-004, FEAT-SET-002, FEAT-ACC-003UI-ONB-004, UI-SET-001, UI-CAN-001
JRN-A04User declines notificationsDeclines the pre-permission screen.No OS prompt; notifications can be enabled later from settings.FEAT-ONB-009, FEAT-NOT-001, FEAT-SET-001UI-ONB-001, UI-SET-001
JRN-A05User restores instead of buyingTaps Restore Purchases from paywall or settings.Existing entitlement is restored or a no-purchases message appears.FEAT-IAP-004, FEAT-SET-001UI-IAP-001, UI-SET-001
JRN-A06User plays offlineOpens a downloaded artwork without connectivity.Cached canvas opens; sync waits until online.FEAT-CACHE-001, FEAT-NET-001, FEAT-PROG-002UI-LIB-001, UI-CAN-001
JRN-A07Reviewer requests changesReviewer rejects an artwork during cultural review.Artist/operator sees notes and draft remains unpublished.FEAT-CULT-001, FEAT-CONT-002UI-ADM-001
JRN-A08Existing account mergeUser with anonymous progress signs into an existing account.Progress is merged by bitset union.FEAT-ID-002, FEAT-PROG-002UI-ID-001

Failure journeys

IDFailureTriggerRecovery pathFeature IDsReserved UI IDs
JRN-F01Anonymous premium download blockedAnonymous user requests premium artwork without entitlement.Show sign-in-required state, then return to paywall after account upgrade.FEAT-DL-001, FEAT-IAP-002, FEAT-ID-002UI-ART-001, UI-IAP-001, UI-ID-001
JRN-F02Authenticated user lacks entitlementSigned-in user requests locked premium artwork.Show paywall; allow purchase or restore.FEAT-DL-001, FEAT-IAP-002, FEAT-IAP-004UI-IAP-001
JRN-F03Receipt validation failsStore purchase completes locally but backend rejects or cannot validate receipt.Keep artwork locked, show recoverable error, allow retry/restore, log purchase_failed.FEAT-IAP-003, FEAT-OBS-002UI-IAP-001
JRN-F04Download checksum mismatchBundle verification fails.Delete partial files, retry once, then show retry state and log failure.FEAT-DL-002, FEAT-CACHE-001, FEAT-NET-001UI-DL-001
JRN-F05Signed URL expires mid-downloadPremium download resumes after 15-minute URL expiry.Request a fresh download URL and continue.FEAT-DL-001, FEAT-DL-002UI-DL-001
JRN-F06Offline catalogue refresh failsUser opens app without connectivity.Show cached catalogue/downloaded artwork where available; explain refresh limitation.FEAT-LIB-001, FEAT-NET-001UI-LIB-001
JRN-F07Progress sync failsBackend or network rejects sync.Keep local progress, queue retry with backoff, emit sync_failed.FEAT-PROG-002, FEAT-NET-001, FEAT-OBS-001UI-CAN-001, UI-LIB-001
JRN-F08Artwork version cannot map progressNew bundle changes region mapping incompatibly.Prompt user to keep playing old version until next launch or restart on new version.FEAT-CACHE-002, FEAT-PROG-001UI-DL-001, UI-CAN-001
JRN-F09Validator blocks publicationArtwork has open paths, palette issues, tiny-region errors, or missing assets.Return actionable validator errors to content production.FEAT-CONT-003, FEAT-CONT-002UI-ADM-001
JRN-F10Child-mode restricted actionChild-mode user taps purchase or external link.Apply parental gate or redirect to safe explanation depending on platform policy.FEAT-SET-003, FEAT-IAP-002UI-IAP-001, UI-SET-001
flowchart TD
    A["Failure detected"] --> B{"Can recover locally?"}
    B -->|Yes| C["Preserve local progress/cache"]
    C --> D["Show retry or continue path"]
    B -->|No| E{"Requires account, entitlement, or review?"}
    E -->|Account| F["Route to account upgrade"]
    E -->|Entitlement| G["Route to paywall / restore"]
    E -->|Review| H["Return to content production"]
    D --> I["Log event or error"]
    F --> I
    G --> I
    H --> I

Edge cases

IDEdge caseExpected behaviourFeature IDsReserved UI IDs
EDGE-001User chooses only one cultural theme.Library still produces useful personalised rows.FEAT-ONB-002, FEAT-LIB-002UI-ONB-002, UI-LIB-001
EDGE-002User selects child audience but later disables child mode.Settings update profile and analytics policy immediately.FEAT-ONB-003, FEAT-SET-003, FEAT-OBS-003UI-SET-001
EDGE-003OS has reduce motion enabled before onboarding.Onboarding quick-set inherits reduce motion and canvas avoids non-essential animation.FEAT-ONB-004, FEAT-ACC-003UI-ONB-004, UI-CAN-001
EDGE-004OS removes cached artwork under storage pressure.Cache reconciliation removes dangling pointer and offers re-download.FEAT-CACHE-001, FEAT-DL-002UI-DL-001
EDGE-005User taps a very small region.Snap-to-nearest small region assists within the specified radius.FEAT-CAN-003, FEAT-ACC-003UI-CAN-001
EDGE-006User reinstalls before account upgrade.Anonymous progress may be lost; account prompt copy should make persistence value clear.FEAT-ID-001, FEAT-ONB-008UI-ID-001
EDGE-007Family-shared entitlement exists.Entitlement is honoured when returned by server validation.FEAT-IAP-003, FEAT-IAP-004UI-IAP-001
EDGE-008Reviewer/admin opens draft artwork.Draft is visible only to permitted roles and never to regular users.FEAT-CULT-001, FEAT-ADMIN-001UI-ADM-001
EDGE-009Palette colour fails colour-vision simulation.Validator blocks or warns before publication, depending on severity.FEAT-CONT-003, FEAT-ACC-003UI-ADM-001
EDGE-010User opens invalid deep link after future deep-link support.Route to library or artwork detail fallback without crashing.FEAT-DEEP-001, FEAT-LIB-001UI-LIB-001

Roadmap journey candidates

CandidateJourney summaryRequired featuresWhy it is not v1
Ad-supported accessUser chooses a free ad-supported path for selected premium content.FEAT-ADS-001OD-01 recommends omission until retention data exists; child-mode privacy risk is high.
Subscription accessUser subscribes for broader content access instead of buying packs.FEAT-SUB-001OD-02 resolved subscription out of MVP; pack conversion needs validation first.
User-generated artworkUser uploads or creates artwork and submits it for review.FEAT-UGC-001Moderation, rights, safety, and cultural review complexity exceed MVP scope.
AchievementsUser earns badges or streaks for completion behaviour.FEAT-ACH-001Product tone should stay calm; MVP uses only the first-steps checklist.
Social sharingUser shares a completed artwork or profile.FEAT-SOC-001Public profiles and child-mode sharing require additional privacy work.
Advanced child profilesParent creates multiple child profiles with age-specific libraries.FEAT-CHILD-001MVP uses a single child-mode flag and audience setting.
Audio narrationUser plays narrated cultural notes or guidance.FEAT-AUDIO-001Adds media pipeline and performance considerations outside the launch target.
AI artwork generationUser or operator generates artwork with AI support.FEAT-AI-001Cultural authenticity and rights risks need a separate policy.
MerchandiseUser buys physical merchandise from completed artwork.FEAT-MERCH-001Commerce and fulfilment are unrelated to the initial canvas validation risk.

Journey-to-feature traceability

Journey IDJourneyCore feature IDs
JRN-P01First-time anonymous user reaches the aha momentFEAT-ID-001, FEAT-ONB-001, FEAT-ONB-002, FEAT-ONB-003, FEAT-ONB-004, FEAT-ONB-005, FEAT-ONB-006, FEAT-ONB-007, FEAT-ONB-008, FEAT-CAN-001, FEAT-PAL-001, FEAT-PROG-001
JRN-P02Returning user resumes downloaded artworkFEAT-LIB-001, FEAT-CACHE-001, FEAT-CAN-001, FEAT-PROG-001, FEAT-PROG-002
JRN-P03Free artwork download and playFEAT-LIB-001, FEAT-ART-001, FEAT-DL-001, FEAT-DL-002, FEAT-CACHE-001, FEAT-CAN-001
JRN-P04Content pack purchase unlocks artworkFEAT-ART-001, FEAT-IAP-001, FEAT-IAP-002, FEAT-ID-002, FEAT-IAP-003, FEAT-DL-001
JRN-P05Content operator publishes an artworkFEAT-CONT-001, FEAT-CONT-002, FEAT-CONT-003, FEAT-CULT-001, FEAT-ADMIN-001
JRN-A01 to JRN-A08Valid alternate pathsFEAT-ONB-008, FEAT-SET-001, FEAT-ACC-003, FEAT-NOT-001, FEAT-IAP-004, FEAT-NET-001, FEAT-CULT-001, FEAT-ID-002
JRN-F01 to JRN-F10Failure and recovery pathsFEAT-DL-001, FEAT-IAP-002, FEAT-IAP-003, FEAT-DL-002, FEAT-NET-001, FEAT-PROG-002, FEAT-CACHE-002, FEAT-CONT-003, FEAT-SET-003