Repository navigation
feat(app): Settings puts the most-opened groups first; plan card A/B (settings-plan-card) - #21763
Open
YinkaAdepoju wants to merge 3 commits into
Open
YinkaAdepoju wants to merge 3 commits into
YinkaAdepoju wants to merge 3 commits into
Conversation
…(settings-plan-card) Settings sheet: - Device, Recording & Transcription, Notifications & Display and Data & Privacy (most Settings visits) sit right under Account and Plan; Voice, Integrations and Connect an Agent follow; Referral moves next to Help and loses its NEW tag. - The Device row shows the battery, or Connected / Disconnected. - Account is the name (large) and email, without a placeholder picture. - No handle band: the header with the close X is the top of the sheet, which still swipes down (noted in the UX contract). Plan & Usage for Free and Plus, A/B tested with PostHog flag settings-plan-card (experiment 486057, draft): control is the row with the minutes meter and a full-width Upgrade; card is the plan name large, the meter and a full-width Upgrade. Upgrade opens the paywall in place (openUpgradePaywall, source usage_page; same files as BasedHardware#21711). No identity, an unread flag or an unknown variant is control and not counted. Pre-registration in product/experiments/settings-plan-card.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
|
Thanks @YinkaAdepoju — this is a genuinely well-put-together change. I reviewed the full diff statically (no build CI ran on this PR beyond the AI reviewer, so nothing was executed) and verified the API surface it relies on against current main. File-by-file notes:
Nothing blocking found technically. Because this reorders the Settings information architecture and adds a new monetization surface (the plan card A/B), it needs a product-direction decision from a maintainer before merge — leaving for human maintainer review with a positive signal. This review is AI-generated feedback on behalf of the maintainers. by AI on behalf of David — if you need David’s attention urgently, please @Git-on-my-level and escalate with |
# Conflicts: # config/feature-flags.yaml
Review nit on BasedHardware#21763: the Settings Upgrade button passed the plan but the helper never used it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Settings puts what people open most at the top and makes upgrading one tap from the sheet.
app/docs/ux-contract.mdnotes the exception.openUpgradePaywall(sourceusage_page), sopaywall-variantstill picks the design. Paid plans keep the plain row.Nothing moved deeper: every row is still on the sheet or one tap below it (
settings_structure_test).upgrade_paywall.dartandstandalone_plans_sheet.dartare byte-identical to the copies in #21711, so whichever lands second merges cleanly.Screenshots
cardarm)Before: widget-test render of main's
SettingsDrawer(Free plan). After: iOS simulator, local test account on Free, no device connected.A/B test:
settings-plan-cardsettings-plan-card(963589) with draft experiment 486057, 50/50 by distinct id. Not launched: launch once this build is in the stores.control: the Plan & Usage row with the minutes meter and a full-width Upgrade under it.card: a plan card with the plan name large, the meter and a full-width Upgrade; tapping the card outside Upgrade opens Plan & Usage.$feature_flag_called(viarecordFeatureFlagExposure, which also sets$feature/settings-plan-card) when the section is drawn for a Free or Plus reader with a PostHog-assigned arm. No identity, an unread flag or an unknown variant shows control and is not counted.Upgrade Succeededwithin 7 days of exposure. Secondary:Upgrade Plan Selected. Guardrail:Product Errorper user.product/experiments/settings-plan-card.md; flag added toconfig/feature-flags.yaml.--dart-define=OMI_SETTINGS_PLAN_CARD=control|card.Testing
flutter test test/widgets/settings test/spine/b1_settings_surface_test.dart test/widgets/semantics_baseline_test.dart: 55 pass, including both arms, the fallback-is-not-counted rule, the exposure key, the new order, the Device battery value and the Account header.scripts/check_feature_flag_registry.py: OK.Product invariants affected
none
🤖 Generated with Claude Code