Skip to content

feat(app): Yinka's first-conversation onboarding as the yinka arm of a three-way onboarding experiment - #21650

Merged
kodjima33 merged 2 commits into
mainfrom
kodjima33/onboarding-yinka-arm
Oct 14, 2026
Merged

kodjima33 merged 2 commits into
mainfrom
kodjima33/onboarding-yinka-arm

Conversation

@kodjima33

@kodjima33 kodjima33 commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Adds Yinka's onboarding (PR #21445: Name → Permissions → Language → Connect Omi → a first real conversation, its summary and to-dos, the paywall, the rating ask) as the yinka arm of a three-way first-run onboarding experiment, next to today's native steps (control) and Reid's web page (reid). Nothing changes for anyone not in the experiment: the flag targets the test account only, and an unread flag, an unknown variant or a bad payload is control.

  • OnboardingVariantGate replaces OnboardingWebviewGate: one multivariate PostHog flag onboarding-variant (control / reid with {"url"} payload / yinka), same identity wait, warm-up, account-switch fence and verified reload. Debug: --dart-define=OMI_ONBOARDING_VARIANT=reid|yinka.
  • Yinka's screens live under app/lib/pages/onboarding/variants/yinka/ (copied from her branch, imports rebased) with a small YinkaOnboardingFlow page that runs them after sign-in and consent, like the web onboarding page. The wrapper still owns completion; it skips the end-of-onboarding paywall placement when the activation already offered a plan.
  • Shared, additive changes her flow needs: capture controller audio taps (+ a flag to hold the generic "talk for 30 seconds" notice), onboarding provider quiet scan / endSearch, Bluetooth in the permissions panel enum, scanning ripple colour, in-app web page close button, the Omi shop helper, 32 strings in all 49 locales.
  • Out of scope on purpose (not onboarding): her Home live pill, Settings upgrade button, paywall re-ask, Superwall pilot, pull-to-refresh, Get-Started removal.
  • The wrapper emits Onboarding Variant Shown with $feature/onboarding-variant for every arm, the experiment's exposure event.

PostHog: flag 961069 (test account → yinka, everyone else control), draft experiment 484222, dashboard 2212642.

Testing

Simulator (dev flavour, prod backend, OMI_ONBOARDING_VARIANT=yinka): Name → Permissions → Language → Connect Omi ("Not ordered yet" opens the store sheet) → "Let's try Omi" → dictation → "You're all set, Nik" → rating prompt → outline paywall (the account's paywall arm) → Home, no second paywall. Kill-and-relaunch mid-flow resumed at Connect Omi. 60 unit/widget tests pass (gate, activation flow, connect step, summary text, existing onboarding tests).

Product invariants affected

  • INV-CAP-1 — the capture controller change only adds observer taps (a copy of each phone-mic buffer / pendant packet handed to a listener) and a flag that hides a notice; no uplink, subscription, WAL or frame path is closed, fenced or skipped.

Failure class (fixes)

Failure-Class: none

UI-Evidence: none -- new screens are flag-gated to the test account; simulator walkthrough screenshots in the PR description are the evidence.

View guided diff Turn on auto-fix

@kodjima33
kodjima33 merged commit f5153c4 into main Oct 14, 2026
26 checks passed
@kodjima33
kodjima33 deleted the kodjima33/onboarding-yinka-arm branch October 14, 2026 23:49
kodjima33 added a commit that referenced this pull request Oct 15, 2026
…he release build compiles (#21651)

## Summary

The release (AOT) compile of main failed at `flutter build ipa` after
#21650: the summary card's entrance in Yinka's activation assigned the
`AnimatedBuilder` child (`Widget?`) to a `Widget` when the blur is
already gone. Unwrap it. Debug builds and the analyzer did not flag it;
the local prod-flavor release build reproduced the exact CI error.

## Testing

Local `flutter build ios --release --flavor prod --no-codesign` on the
fix: compiles. Activation tests pass.

## Product invariants affected

none

## Failure class (fixes)

Failure-Class: none

UI-Evidence: none -- one-token type fix in a flag-gated screen; no
visual change.


<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/BasedHardware/omi/pull/21651?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="View guided diff"
src="https://www.cubic.dev/buttons/review-in-cubic-light.svg"></picture></a>
<a
href="https://www.cubic.dev/action/auto-fix/pr/BasedHardware/omi/21651?returnTo=https%3A%2F%2Fgithub.com%2FBasedHardware%2Fomi%2Fpull%2F21651&source=description"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"><img
alt="Turn on auto-fix"
src="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
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