Skip to content

feat(app): Settings reorder + plan card A/B (settings-plan-card) (stacked on #21711) - #21744

Closed
YinkaAdepoju wants to merge 14 commits into
BasedHardware:mainfrom
YinkaAdepoju:yinka/settings-rework
Closed

YinkaAdepoju wants to merge 14 commits into
BasedHardware:mainfrom
YinkaAdepoju:yinka/settings-rework

Conversation

@YinkaAdepoju

@YinkaAdepoju YinkaAdepoju commented Oct 15, 2026 •

Copy link
Copy Markdown

Stacked on #21711. This branch starts from #21711's head, so until that merges the diff below includes it. The Settings commits are 16342d0 through 1c40413.

Summary

Settings now puts the places people open most at the top.

  • Device, Recording & Transcription, Notifications & Display and Data & Privacy (most visits to Settings) now sit right under Account and Plan & Usage.
  • Voice, Integrations and Connect an Agent come next. Memories and Goals keep their own group.
  • Referral Program moves next to Help & About and Feedback, and drops the green NEW tag.
  • The Device row shows the device's battery, or Connected / Disconnected, so you can check it without opening the page.
  • Plan card for Free and Plus, behind an A/B test (see below): a card with a small Plan & Usage label, the plan name large, the minutes meter and a full-width Upgrade. Tapping the card outside Upgrade opens Plan & Usage; paid plans keep the plain row.
  • No handle band at the top of the Settings sheet: the header (with the close X) is the top, and the sheet still swipes down to close. app/docs/ux-contract.md notes the exception.
  • The Account row shows the person's initial instead of a generic person icon.

Nothing moved deeper: every row is still on the sheet or one tap below it (settings_structure_test).

Screenshots

Before After
Before After

Before: widget-test render of #21711's head (Free plan). After: iOS simulator, card arm, local test account on Free, no device connected.

A/B test: settings-plan-card

  • PostHog flag settings-plan-card, draft experiment 486057 (not launched; launch once this build is in the stores). 50/50 control / 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.
  • Exposure: $feature_flag_called 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.
  • Primary metric: Upgrade Succeeded within 7 days of exposure. Secondary: Upgrade Plan Selected; guardrail: Product Error per user.
  • Pre-registration: product/experiments/settings-plan-card.md; flag added to config/feature-flags.yaml.
  • Debug builds: --dart-define=OMI_SETTINGS_PLAN_CARD=control|card.
  • The reorder, Device status and Account initial ship to everyone (findability, not conversion).

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.
  • settings_structure_test checks the new order and that the Device row shows the battery; settings_plan_section_test checks the card replaces the row on Free and Plus and that tapping it opens Plan & Usage.
  • Checked on the iOS simulator (iPhone 17 Pro, iOS 26.5).

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

Yinka and others added 11 commits October 15, 2026 10:49
…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>
@YinkaAdepoju YinkaAdepoju changed the title feat(app): Settings puts the most-opened groups first; Device row shows battery (stacked on #21711) feat(app): Settings puts the most-opened groups first, lighter plan card (stacked on #21711) Oct 15, 2026
Yinka and others added 3 commits October 15, 2026 14:37
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>
@YinkaAdepoju YinkaAdepoju changed the title feat(app): Settings puts the most-opened groups first, lighter plan card (stacked on #21711) feat(app): Settings reorder + plan card A/B (settings-plan-card) (stacked on #21711) Oct 15, 2026
@YinkaAdepoju

Copy link
Copy Markdown
Author

Closing in favour of #21763, which has the same Settings changes rebuilt directly on main (no longer stacked on #21711), plus the plan card A/B test.

@github-actions

Copy link
Copy Markdown
Contributor

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:

  • Project standards — Ensuring consistency across the codebase
  • User needs — Making sure changes align with what our users need
  • Code best practices — Maintaining code quality and maintainability
  • Project direction — Keeping aligned with our product principles and locked invariants

Before your next PR, please skim:

  • PRODUCT.md — product north star
  • Product invariants — locked rules (shared chat, memory tiers, agent control plane, integrations, brand)

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant