feat(auth): add under-16 family guidance flow#3531
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Hey Liz, I had a question about the reporting process. Do we have an idea of what the reporting process will look like? Would it be coming through relay admin as a user report for "Child" or something similar? Thanks |
This is a great support team UX question. How do you want it to work? You get to design it since you're the user of that part of the flow. |
And, to be super upfront, currently this PR only covers the mobile behavior after a moderator manually opens a minor-account review case. It does not define the intake/moderator-tool side yet. That's part of what I flagged for @mbradley above. My current assumption is that a user report would land in our moderation queue as something like “possible minor” / “appears under 16,” and then a moderator would decide whether to open the case. Once that happens, the backend would restrict the account, send the moderation DM, and the app would route the user into this review flow. So the report intake UX/tooling is still open design, but the mobile-side behavior after moderator action is what this PR implements. There are a lot of moving parts with this and the divine-mobile repo is only one place that this will need to live. |
We can already report user accounts to relay admin so adding a new field wouldn't be too difficult I imagine. But, we will be messaging them using the moderation DM system. I could see either 1) user report to relay admin comes in and there is a link from the report to the moderation DMs or 2) a new header on moderation for age review where the entire process lives within one space. Having it all live within moderation probably makes the most sense and keeps things tidy. But I am open to other thoughts and ideas. |
I agree that a one-stop-shop probably makes the most sense here. What's your ideal flow? cc @mbradley (would also welcome UX design thoughts on this from @Chardot) |
89e9cce to
bd445dd
Compare
This comment has been minimized.
This comment has been minimized.
bd445dd to
684791d
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
ef50c16 to
3b63aab
Compare
This comment has been minimized.
This comment has been minimized.
3b63aab to
695ecd0
Compare
This comment has been minimized.
This comment has been minimized.
695ecd0 to
1968297
Compare
This comment has been minimized.
This comment has been minimized.
1968297 to
c3b0aeb
Compare
This comment has been minimized.
This comment has been minimized.
c3b0aeb to
86c3b4d
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Welcome-screen redesign preview is live: https://9450a1e0.openvine-app.pages.dev What changed on this page:
Caveat: this is the PR preview build, which forces Branch is also rebased on |
Use support@divine.video as the support contact, and host family, kids, and age-review resources as paths on divine.video instead of separate subdomains. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds minorAccountReviewErrorBody, minorAccountReviewCopySupportEmail, and minorAccountReviewCopyCaseId to the 16 non-English locale ARBs as English placeholders, matching the established placeholder pattern for the rest of the minorAccountReview namespace. Unblocks arb_consistency_test; real translations land in a separate l10n pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reframes the welcome screen so the age expectation is visible above the
sign-in/create-account buttons and the under-16 family-guidance flow is
reachable as an inline link in the same paragraph instead of a separate
text button at the bottom. The terms-of-service notice now references
the buttons "below" since it sits above them.
- adds `authMinAgeNotice` ("Divine accounts are for ages 16 and up.")
- splits the under-16 entry into `authUnder16Prefix` + the tappable
`authUnder16ChoicesCta`, rendered as a RichText with the CTA in
`VineTheme.vineGreen` and an inline `TapGestureRecognizer`
- flips `authTermsPrefix` from "above" to "below" to match the new
layout order
- updates `welcome_screen_test` for the new vertical order and the
RichText-based CTA tap
- adds the three new keys to the ARB consistency debt list pending the
next translation pass
…NostrReadyProvider Rebasing onto origin/main pulled in the Nostr readiness refactor that deleted isNostrReadyProvider (a bool provider in app_providers.dart) in favour of nostrSessionProvider / NostrSessionReadiness in nostr_client_provider.dart. The router gating test still overrode the removed provider and failed to compile. Replace the seven `isNostrReadyProvider.overrideWith((ref) => false)` overrides with a _NotReadyNostrSession notifier yielding NostrSessionReadiness.identityKnown — the faithful equivalent of the old "authenticated but Nostr signer not yet ready" window the router must fail-closed through. Behavior and assertions unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3bcb5cd to
90d0ad1
Compare
This comment has been minimized.
This comment has been minimized.
Design feedback pass on the public under-13 screen and the 13-15 parent-consent screen. Under-13 screen: - Headline reworded to "We can't give you an account yet". - "Why" paragraph moved into its own titled box (white text, no longer lost as loose body copy). - Condensed the original four callout cards to three: "Here's why", "What your family can do instead", "When you turn 13". - Removed the Close button entirely — exit is the app-bar back arrow or the OS, since iOS has no sanctioned programmatic-quit API and a dead-end button is poor UX / App Store risk. 13-15 parent-consent screen: - "Why we ask a parent or guardian to be involved" balloon moved directly under the headline; the two "A parent or guardian should…" sentences now sit inside it after a paragraph gap. - Balloon paragraph and title rewritten to brand voice. l10n: removed the now-dead under-13 ComeBack/Honesty/Legal keys from all 18 ARBs and the stale Honesty/Legal entries from the arb_consistency_test fallback allowlist; re-added ComeBack for the new third box; updated remaining values across all 18 locales (English placeholders, key parity preserved so arb_consistency_test stays green). Screen test now resolves copy from AppLocalizations instead of hardcoded English. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mobile PR PreviewPreview refreshed for Last refresh:
|
Closes #3532
Summary
This PR adds the client-side under-16 family guidance flow and the restricted-account review surfaces that route affected users into it.
What Changed
/account-reviewroute family for welcome and moderation entry pointssupport@divine.videodivine.video(e.g.divine.video/family) instead of separate subdomainsProduct Boundaries In This PR
Main Files
mobile/lib/router/app_router.dartmobile/lib/screens/minor_account_review_screen.dartmobile/lib/screens/minor_account_review_parent_consent_screen.dartmobile/lib/screens/minor_account_review_parent_contact_screen.dartmobile/lib/screens/minor_account_review_under13_support_screen.dartmobile/lib/services/support_email_composer.dartmobile/lib/providers/app_providers.dartmobile/lib/l10n/app_en.arbVerification
From
mobile/:flutter test --no-pub test/services/support_email_composer_test.dart test/services/api_service_test.dartflutter test --no-pub test/screens/minor_account_review_screen_test.dartflutter test --no-pub test/screens/minor_account_review_parent_contact_screen_test.dartflutter test --no-pub test/screens/minor_account_review_parent_consent_screen_test.dartflutter test --no-pub test/screens/minor_account_review_under13_support_screen_test.dartflutter test --no-pub test/router/minor_account_review_router_test.dartflutter analyze lib/services/support_email_composer.dart lib/screens/minor_account_review_parent_consent_screen.dart lib/screens/minor_account_review_under13_support_screen.dart lib/screens/minor_account_review_parent_contact_screen.dart lib/screens/minor_account_review_screen.dart test/services/support_email_composer_test.dart test/services/api_service_test.dart test/screens/minor_account_review_parent_consent_screen_test.dart test/screens/minor_account_review_under13_support_screen_test.dart test/screens/minor_account_review_parent_contact_screen_test.dart test/screens/minor_account_review_screen_test.dart test/router/minor_account_review_router_test.dart