Skip to content

feat(app): launch film behind sign-in and Data & Privacy; drop the Get started page - #21761

Open
YinkaAdepoju wants to merge 2 commits into
BasedHardware:mainfrom
YinkaAdepoju:yinka/signin-film
Open

YinkaAdepoju wants to merge 2 commits into
BasedHardware:mainfrom
YinkaAdepoju:yinka/signin-film

Conversation

@YinkaAdepoju

@YinkaAdepoju YinkaAdepoju commented Oct 15, 2026 •

Copy link
Copy Markdown

Split out of #21711 so that PR stays about Home.

Summary

Sign-in and Data & Privacy are the first two screens every new reader sees, before any onboarding arm (so the same for control, reid and yinka).

  • Launch film behind sign-in and Data & Privacy. OnboardingHeroFilm plays the Omi launch film full-screen, muted and looping, under white type (it holds its first frame under Reduce Motion). It replaces the photo background on those two steps only; every other onboarding step keeps today's background. OnboardingHero.video was a debug-only design switch; it is now the look for everyone.
  • New asset: app/assets/videos/onboarding_launch_loop.mp4, 3.6 MB (720×1284, 20 s). This adds 3.6 MB to the app download.
  • Text stays readable over the film. The film has notification cards burned in near the bottom, right where the consent text sits. The bottom shade is now near-solid there (97% black from 72% of the screen height), so the cards don't show through.
  • Data & Privacy: a short summary, the AI providers named (Deepgram & OpenAI), Agree & Continue, and Use a Different Account (back to sign-in without agreeing). Use a Different Account is a plain TextButton in the film's palette: OmiButton's tertiary variant paints its label in the app theme's text colour, which is near-black in light mode and disappeared on the film.
  • The old "Get started" page is removed. Signed-out readers open on sign-in (MobileApp → OnboardingWrapper). Sign-in now fires onboardingWelcomeShown, which the Get started page used to fire, so the onboarding funnel still has its first step. onboardingGetStartedTapped is no longer fired.
  • New strings consentShortMessage and consentAiProviders in all 49 locales (added with scripts/l10n.py).

Screenshots

Sign-in Data & Privacy
Sign-in over the launch film Data & Privacy over the launch film

001: iOS simulator, local test build (one local sign-in button where store builds show Apple and Google). 002: the real Data & Privacy widget rendered at iPhone size in a widget test over a frame of the film where a notification card sits behind the text (a simulator build did not fit on this machine's disk).

Testing

  • flutter analyze on the touched files: no issues.
  • New test/widgets/ai_consent_use_different_account_test.dart: Data & Privacy shows Agree & Continue, and Use a Different Account goes back without agreeing.
  • Onboarding, wrapper, sign-in and spine tests pass (test/widgets/onboarding_*, session_expired_reauthentication, semantics_baseline, first_capture, device_onboarding_*, speech_profile_onboarding, test/spine/, test/pages/onboarding, test/unit/onboarding_*): 259 passed.
  • python3 scripts/l10n.py check: ok.
  • make preflight: 27 checks pass.
  • Not yet run on a device from this branch.

Product invariants affected

none

Failure-Class: none

🤖 Generated with Claude Code

…t started page

Sign-in and Data & Privacy draw the Omi launch film full-screen under white
type (OnboardingHeroFilm, assets/videos/onboarding_launch_loop.mp4, 3.6 MB).
The bottom shade is near-solid where the text sits, so the notification cards
burned into the film don't show through the consent text. Signed-out readers
go straight to sign-in (OnboardingWrapper); the old Get started page is
removed, and sign-in now fires onboardingWelcomeShown. Data & Privacy keeps
Agree & Continue and Use a Different Account (a plain TextButton in the film's
palette: OmiButton's tertiary label is near-black in light mode and vanished
on the film), with a short summary that names the AI providers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Git-on-my-level

Copy link
Copy Markdown
Collaborator

Thanks @YinkaAdepoju — this is a well-put-together first contribution: cohesive scope, honest write-up of the 3.6 MB asset cost, a changelog fragment, UI evidence, and a widget test for the consent escape hatch.

What I verified, file by file:

  • app/lib/pages/onboarding/widgets/onboarding_hero_film.dart (new): the film is muted, looping, and holds its first frame under Reduce Motion; the controller is disposed, and initialization failure degrades silently to the solid background — a reasonable fallback.
  • app/lib/mobile/mobile_app.dart: signed-out users now get OnboardingWrapper instead of DeviceSelectionPage. This is the real product change: the Get started landing step is gone for everyone.
  • app/lib/pages/onboarding/device_selection.dart (removed): onboardingWelcomeShown moved to auth.dart initState so the funnel keeps its first step, but onboardingGetStartedTapped is no longer fired anywhere — worth confirming that's intended on the growth/analytics side.
  • app/lib/pages/onboarding/variants/yinka/widgets/onboarding_card.dart: OnboardingHero.video is now hardcoded true. The OMI_ONBOARDING_HERO flag and the light pendant variant are gone — a debug-only design comparison became the default look for every new user, across all onboarding arms.
  • app/lib/pages/onboarding/ai_consent_widget.dart: _aiProviders hardcodes 'Deepgram & OpenAI' in the consent copy (the Apple 5.1.2(i) note is a nice touch). Naming processors in consent is the right direction, but the string is now a hardcoded claim that must track the serving configuration and the privacy policy — if providers ever change, this text silently goes stale.
  • app/lib/pages/onboarding/wrapper.dart: the film is behind kAuthPage/kAiConsentPage only; I confirmed _background() still serves the other steps.
  • app/lib/l10n/* + scripts: two new strings (consentShortMessage, consentAiProviders) across 49 locales, placeholders well-formed.
  • app/pubspec.yaml + app/lib/gen/assets.gen.dart: the mp4 is bundled into every download; the 3.6 MB cost is acknowledged in the description.
  • app/test/widgets/ai_consent_use_different_account_test.dart: covers Agree & Continue and the Use a Different Account path.

No approval from me — this needs a product call, not just a code read. Two decisions for a maintainer: (1) sign-in-first entry with the Get started step removed and the film as the default first impression, and (2) the consent copy now naming specific AI processors. Leaving for human maintainer review on those points.


by AI on behalf of David — if you need David’s attention urgently, please @Git-on-my-level and escalate with need human response.

@Git-on-my-level Git-on-my-level added needs-maintainer-review Needs a human maintainer to sign off before merge feature-fit-review Needs review of product/feature direction with Omi mission/vision flutter flutter work labels Oct 15, 2026
# Conflicts:
#	app/lib/l10n/app_ar.arb
#	app/lib/l10n/app_be.arb
#	app/lib/l10n/app_bg.arb
#	app/lib/l10n/app_bn.arb
#	app/lib/l10n/app_bs.arb
#	app/lib/l10n/app_ca.arb
#	app/lib/l10n/app_cs.arb
#	app/lib/l10n/app_da.arb
#	app/lib/l10n/app_de.arb
#	app/lib/l10n/app_el.arb
#	app/lib/l10n/app_en.arb
#	app/lib/l10n/app_es.arb
#	app/lib/l10n/app_et.arb
#	app/lib/l10n/app_fa.arb
#	app/lib/l10n/app_fi.arb
#	app/lib/l10n/app_fr.arb
#	app/lib/l10n/app_he.arb
#	app/lib/l10n/app_hi.arb
#	app/lib/l10n/app_hr.arb
#	app/lib/l10n/app_hu.arb
#	app/lib/l10n/app_id.arb
#	app/lib/l10n/app_it.arb
#	app/lib/l10n/app_ja.arb
#	app/lib/l10n/app_kn.arb
#	app/lib/l10n/app_ko.arb
#	app/lib/l10n/app_localizations.dart
#	app/lib/l10n/app_localizations_ar.dart
#	app/lib/l10n/app_localizations_be.dart
#	app/lib/l10n/app_localizations_bg.dart
#	app/lib/l10n/app_localizations_bn.dart
#	app/lib/l10n/app_localizations_bs.dart
#	app/lib/l10n/app_localizations_ca.dart
#	app/lib/l10n/app_localizations_cs.dart
#	app/lib/l10n/app_localizations_da.dart
#	app/lib/l10n/app_localizations_de.dart
#	app/lib/l10n/app_localizations_el.dart
#	app/lib/l10n/app_localizations_en.dart
#	app/lib/l10n/app_localizations_es.dart
#	app/lib/l10n/app_localizations_et.dart
#	app/lib/l10n/app_localizations_fa.dart
#	app/lib/l10n/app_localizations_fi.dart
#	app/lib/l10n/app_localizations_fr.dart
#	app/lib/l10n/app_localizations_he.dart
#	app/lib/l10n/app_localizations_hi.dart
#	app/lib/l10n/app_localizations_hr.dart
#	app/lib/l10n/app_localizations_hu.dart
#	app/lib/l10n/app_localizations_id.dart
#	app/lib/l10n/app_localizations_it.dart
#	app/lib/l10n/app_localizations_ja.dart
#	app/lib/l10n/app_localizations_kn.dart
#	app/lib/l10n/app_localizations_ko.dart
#	app/lib/l10n/app_localizations_lt.dart
#	app/lib/l10n/app_localizations_lv.dart
#	app/lib/l10n/app_localizations_mk.dart
#	app/lib/l10n/app_localizations_mr.dart
#	app/lib/l10n/app_localizations_ms.dart
#	app/lib/l10n/app_localizations_nl.dart
#	app/lib/l10n/app_localizations_no.dart
#	app/lib/l10n/app_localizations_pl.dart
#	app/lib/l10n/app_localizations_pt.dart
#	app/lib/l10n/app_localizations_ro.dart
#	app/lib/l10n/app_localizations_ru.dart
#	app/lib/l10n/app_localizations_sk.dart
#	app/lib/l10n/app_localizations_sl.dart
#	app/lib/l10n/app_localizations_sr.dart
#	app/lib/l10n/app_localizations_sv.dart
#	app/lib/l10n/app_localizations_ta.dart
#	app/lib/l10n/app_localizations_te.dart
#	app/lib/l10n/app_localizations_th.dart
#	app/lib/l10n/app_localizations_tl.dart
#	app/lib/l10n/app_localizations_tr.dart
#	app/lib/l10n/app_localizations_uk.dart
#	app/lib/l10n/app_localizations_ur.dart
#	app/lib/l10n/app_localizations_vi.dart
#	app/lib/l10n/app_localizations_zh.dart
#	app/lib/l10n/app_lt.arb
#	app/lib/l10n/app_lv.arb
#	app/lib/l10n/app_mk.arb
#	app/lib/l10n/app_mr.arb
#	app/lib/l10n/app_ms.arb
#	app/lib/l10n/app_nl.arb
#	app/lib/l10n/app_no.arb
#	app/lib/l10n/app_pl.arb
#	app/lib/l10n/app_pt.arb
#	app/lib/l10n/app_ro.arb
#	app/lib/l10n/app_ru.arb
#	app/lib/l10n/app_sk.arb
#	app/lib/l10n/app_sl.arb
#	app/lib/l10n/app_sr.arb
#	app/lib/l10n/app_sv.arb
#	app/lib/l10n/app_ta.arb
#	app/lib/l10n/app_te.arb
#	app/lib/l10n/app_th.arb
#	app/lib/l10n/app_tl.arb
#	app/lib/l10n/app_tr.arb
#	app/lib/l10n/app_uk.arb
#	app/lib/l10n/app_ur.arb
#	app/lib/l10n/app_vi.arb
#	app/lib/l10n/app_zh.arb
@Git-on-my-level

Copy link
Copy Markdown
Collaborator

Thanks @YinkaAdepoju — this is a cohesive, carefully documented change and the diff matches the description. File-by-file notes on head 9a1b4eb:

  • app/lib/pages/onboarding/widgets/onboarding_hero_film.dart (new): clean — muted, looping, mixWithOthers, holds its first frame under Reduce Motion, and the init error path falls back to a solid background. No issues found.
  • app/lib/pages/onboarding/ai_consent_widget.dart: the consent screen now leads with the shorter consentShortMessage and names the AI providers, which is good for App Store 5.1.2(i)-style disclosure. Two follow-ups: (1) _aiProviders = 'Deepgram & OpenAI' is hardcoded, so it can silently drift from the actual serving configuration — please confirm this is the canonical list; (2) consentDataMessage looks orphaned in the .arb files now — if nothing else renders it, removing it would avoid a dead string in 49 locales.
  • app/lib/pages/onboarding/auth.dart: sign-in logic is untouched — same Apple/Google/local-dev paths and OAuth calls; only presentation changes, plus onboardingWelcomeShown moving here from the deleted Get-started page. Good.
  • app/lib/mobile/mobile_app.dart + device_selection.dart (removed): signed-out users now enter OnboardingWrapper directly. This is the real product change — the funnel starts at sign-in — and it's a direction call for a maintainer, not a code fix.
  • app/lib/pages/onboarding/wrapper.dart: the film is correctly scoped to the auth and consent steps only; every other step keeps today's background.
  • Assets: the new film adds ~3.6 MB to the download, and the old assets/images/onboarding.mp4 (~0.9 MB) is now unreferenced but still bundled via the assets/images/ directory entry — worth dropping in this PR if nothing else plays it.
  • Tests: app/test/widgets/ai_consent_use_different_account_test.dart covers the different-account path nicely; could you add a focused test for the new signed-out entry path (signed-out lands on the auth step with the film behind it, and Agree & Continue fires onAgree)?

On fit: a full-screen film for every new user and the removal of the Get started page is a product/UX direction decision with consent-disclosure wording attached, so the final sign-off belongs to a human maintainer — the implementation itself looks careful and I found no blocking code issue.

AI-generated maintainer feedback on behalf of the Omi maintainers. Human review needed for: onboarding funnel direction (sign-in first, film across all arms) and the shortened consent disclosure wording / provider list.


by AI on behalf of David — if you need David’s attention urgently, please @Git-on-my-level and escalate with need human response.

This branch has not been deployed

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

Labels

feature-fit-review Needs review of product/feature direction with Omi mission/vision flutter flutter work needs-maintainer-review Needs a human maintainer to sign off before merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants