storytellurx/docs/design/onboarding-parcours.md
Elias Rhouzlane 7d4017039b fix: design
2026-09-09 13:18:14 +02:00

23 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Onboarding parcours
Implemented against the tracker’s `spec-2026-08-31-v2-requirements.md`, section “Onboarding and control”, and the July 8 brief email in the same project’s `emails` directory.
`/start` now presents language, introduction, warnings with two independent age/reading checkboxes, a separate participation confirmation, and an unselected intensity choice before rendering the existing world and model screens. All eight selectable persona tiles, their providers, image references and existing transitions remain unchanged. French and English are available through the app’s shared locale context and message dictionaries. The user explicitly requested English support after the initial French-only implementation.
Next and Back preserve choices within the flow. Warning content scrolls inside the screen while the navigation remains reachable on a narrow phone. Each new heading receives focus. No provider request starts during the flow. Confirmation is specific to participation, not blanket consent to every future proposal.
`src/standard-schemas/onboarding.schema.ts` stores only the version, language, intensity and three explicit true confirmations in `sessionStorage` under `stx:onboarding:v2`. It does not store a transcript, age, identity or timestamp. Missing, invalid and older-version records repeat the flow. If storage is blocked, an in-memory record supports navigation in the current page; a refresh requires repeating the flow. `/start?review=true` clears the record and starts again.
The client `/chat` gate waits for hydration and a validated preference record before mounting `NarrativeChat`. A deep link without that record returns to `/start`, preserving persona, model and session identifiers. Selecting the same model resumes that session after confirmation; choosing another starts a new session. The confirmed intensity is passed to `NarrativeChat` through `initialIntensity`.
Model descriptions use the existing `modelCatalog` labels and provider identities. Links lead to Google and OpenRouter privacy policies; no retention duration or privacy guarantee is invented.
## Explicit remaining gaps
- The July 8 email links a Google Doc but does not include its full opening description. The local About HTML describes the engine rather than that opening. The implemented introduction uses the exact short phrase supplied by the consolidated spec and an abridged factual description. It must be compared with the full approved opening when available.
- This browser confirmation record is a UX gate, not server-enforced age verification or a moderation authorization token. Contextual input/output moderation and any server consent enforcement remain separate work.
- The warning links to the existing parent project site for contact. A dedicated report submission funnel and explicit transcript attachment controls remain separate work; the flow does not claim to submit a report.
- The review route exists. Its About/settings entry point belongs to the global navigation work.
- English is enabled using the same locale context and bilingual dictionaries as the app. Session-language enforcement in model output belongs to the chat contract.
Validation: three schema tests verify all explicit confirmations, version/intensity rejection, and absence of transcript fields. Three public browser tests cover the full flow, back/return/review behavior, a guarded deep link with no AI requests, and warning navigation at 320×568.