Repository navigation
feat(app): Settings reorder + plan card A/B (settings-plan-card) (stacked on #21711) - #21744
YinkaAdepoju wants to merge 14 commits into
Conversation
…1445, rebased on main) Home: recording lives in the bottom bar (Ask Omi beside "+ New Recording", live pill while capturing), the processing row reads as the conversation it is becoming, text-only empty states, Omi pull-to-refresh, Home fades in after onboarding, a closable "Teach Omi your voice" card. Chat opens with Omi's welcome and starters. Tasks: ticking or reopening a task shows its new state, then folds the row away; a more menu. Sign-in and data & privacy: the Omi pendant on the plain surface; signed-out readers open on sign-in (the old Get started page is removed). Upgrade: a plan card with Upgrade in Settings; locked conversations and memories, transcription settings, chat apps, chat quota and the plus meter open the paywall in place (PaywallRouter, then the plans sheet). Paywall re-ask on app open for free readers behind `paywall-reask` (prereg in paywall_reask.md). Control is exposed at the end-of-onboarding placement when its payload turns it on. No Superwall. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o-dos when onboarding found none; UI evidence Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… opens the paywall in place Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the pendant) The launch film is the sign-in look for everyone now, not a debug-only comparison; the pendant hero and its image are removed. UI evidence swapped to the film captures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tom pill, not a Home card The pill reads Reconnecting… (no live pulse) and Home shows no separate card; the card stays for what needs the person (paused, the microphone taken by a call, transcription that failed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at the tap opens Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ows; no top card
Every state the Home card had now reads in the bottom pill: Listening, Reconnecting…, Paused
(its control is Resume), Transcribe Later ("Recording · Audio saved…"), the mic taken by a call,
transcription failed, storage full, and a pendant that dropped mid-capture ("Disconnected ·
Reconnecting…"). The dot says how it is going: red and breathing while capturing fine, grey when
paused or waiting, orange when something needs a look. Tapping a healthy pill opens the live
transcript; otherwise it opens a sheet with why, the capture card's own controls (Pause/Resume,
New recording, retry), the live transcript and Stop.
One summary (live_capture_summary.dart) feeds both the pill and the card, so they never disagree.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ws battery Device, Recording & Transcription, Notifications & Display and Data & Privacy are most Settings visits, so they now 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) so people can check it without opening the page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Plan card's full-width black Upgrade became a compact button beside this month's minutes, with the meter under them, all aligned with the row title. The Account row shows the person's initial instead of a generic person icon. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Free and Plus see a plan card instead of the Plan & Usage row with extras: a small Plan & Usage label, the plan name large with a compact Upgrade beside it, then a 6 pt minutes meter and the minutes line. Tapping the card outside Upgrade opens the Plan & Usage page; other plans keep the plain row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h Upgrade; tighter header Free and Plus readers get one of two plan sections from the PostHog flag settings-plan-card: control keeps the Plan & Usage row with the minutes meter and a full-width Upgrade; card shows the plan name large, the meter and a full-width Upgrade. No identity, an unread flag or an unknown variant is control and is not counted; exposure is recorded when the section is drawn for a Free or Plus reader. Pre-registration in product/experiments/settings-plan-card.md; flag added to the registry. The Settings header also rises into the drag handle's empty band, so the title sits closer under the handle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The empty 48 pt band above the Settings header is gone: the header, with its close X, is the top of the sheet, which still swipes down to close. The UX contract notes the exception. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Hey @YinkaAdepoju 👋 Thank you so much for taking the time to contribute to Omi! We truly appreciate you putting in the effort to submit this pull request. After careful review, we've decided not to merge this particular PR. Please don't take this personally — we genuinely try to merge as many contributions as possible, but sometimes we have to make tough calls based on:
Before your next PR, please skim:
If this was declined for direction or taste, maintainers should cite an invariant ID or open a proposed one — ask if that citation is missing. Your contribution is still valuable to us, and we'd love to see you contribute again in the future! If you'd like feedback on how to improve this PR or want to discuss alternative approaches, please don't hesitate to reach out. Thank you for being part of the Omi community! |
Summary
Settings now puts the places people open most at the top.
app/docs/ux-contract.mdnotes the exception.Nothing moved deeper: every row is still on the sheet or one tap below it (settings_structure_test).
Screenshots
Before: widget-test render of #21711's head (Free plan). After: iOS simulator,
cardarm, local test account on Free, no device connected.A/B test:
settings-plan-cardsettings-plan-card, draft experiment 486057 (not launched; launch once this build is in the stores). 50/50control/card, split by user.control: the Plan & Usage row with the minutes meter and a full-width Upgrade under it (feat(app): redesigned Home behind the home-redesign A/B flag (recording pill, upgrade in place) #21711's layout).card: the plan card above.$feature_flag_calledwhen 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 test/unit/appearance_test.dart: 55 pass (settings, B1 surface spine, semantics baseline), including both experiment arms, the fallback-is-not-counted rule and the exposure key.Line-count exceptions
Line-Count-Exception: app/lib/backend/preferences.dart | 1538 -> 1543 | one setting: the closed "Teach Omi your voice" card
Line-Count-Exception: app/lib/pages/settings/transcription_settings_page.dart | 1572 -> 1575 | upgrade opens the paywall in place instead of the Usage page
Line-Count-Exception: app/lib/providers/device_provider.dart | 1598 -> 1614 | a firmware prompt found during onboarding waits until Home is up
Line-Count-Exception: app/lib/utils/analytics/analytics_manager.dart | 3113 -> 3120 | paywall re-ask events
(These four come from #21711, which this branch includes until it merges.)
Product invariants affected
🤖 Generated with Claude Code