← Back to updates

Sign in with Google, and a lot of quiet polish

The headline: Sign in with Google is live. Under the hood, it's also groundwork for the Android app when that lands. Under that hood, a handful of quiet UX fixes across onboarding, calibration, and the Skill Focus tab.

Sign in with Google

New sign-in option on the welcome screen, right under Sign in with Apple. Same account, same data, same everything — just a second way to reach it. Apple Sign-In stays the primary path (Apple guideline for third-party auth on iOS), Google sits underneath as an alternative.

Why bother? Two reasons.

One: some users prefer not to use Apple ID for third-party apps. Google is the daily-driver identity for a lot of folks even on iPhone. Not everyone wants to hand more surface area to Apple.

Two: Android. When the Android app ships (soon-ish, not tomorrow), users who signed up with Google on iOS today will log into Android and see their exact same profile, plan, rungs, and history — no re-registration. Users who signed up with Apple on iOS get stuck: Apple Sign-In on Android is clunky (web redirect, no native prompt). Signing up with Google now is the smoothest path to cross-platform continuity later.

We designed the account model to support both providers on the same user record. If you signed up with Apple originally and later add Google — as long as your Apple email is your real address (not Apple's proxy alias) — we auto-link the new Google identity to your existing account and show a "welcome back, we linked your Google login" toast. No duplicate accounts, no data migration.

The proxy-email caveat. If you used Apple's "Hide My Email" during sign-up, we can't tell that your Apple account and your Google account belong to the same person — Apple's proxy is a one-way alias by design. In that case Google sign-in creates a separate account. Same limitation everyone in this space has; Apple doesn't publish a way to reverse the alias. A "link another sign-in method" flow is on the roadmap for when this becomes a common ask.

Set the expectations — a mini-theme

Feedback from new users kept hitting the same beat: "the app asked me to pick a skill during onboarding, but session 1 didn't have that skill in it." The gap between what onboarding promises and what the first workout looks like was too wide.

Four small changes tighten that up.

A one-shot post-onboarding sheet. When you land on Home for the first time after picking a focus skill, a sheet explains the three-step model in plain terms:

  1. Your first sessions are foundational strength — the muscles you'll need before you can hold the skill safely.
  2. As you get stronger, the app tunes each session to how you actually train.
  3. Start with a 15-minute strength calibration so we can meet you where you are.

Two buttons: "Start with a strength calibration" (recommended, routes straight into it) or "Continue without calibrating". The sheet fires once, ever, per install — no nagging.

Calibration reframed as a measurement, not a workout. Preview screen now shows a prominent explainer: "This is a measurement, not a workout. Give each test your honest best effort — even zero reps is a valid answer." Inside the workout, each set row shows a persistent hint reinforcing the same. When you finish, the summary reads "Calibrated" (not "Workout summary") and reassures you that the app is now tuned to your current level. No PR chase, no shame if the number is small.

Concrete subtitles on the Next Workout card. Instead of "Your Handstand mission" as a floating aspiration, the card now says exactly where you are in the rotation: "Day 3 of 5 · your Handstand rotation", or for on-ramp sessions before you meet a skill's prerequisites: "Foundation strength · building toward Handstand". The current program's role is spelled out — no more "why am I doing pull-ups when I picked planche?" moments.

Skill Focus tab: pass rows first, roadmap under. Tapping into a Focus family (say, Planche) used to show the full 23-rung roadmap before the 5 day-programs. On tall ladders that pushed the actual "start a workout" cards a screen-and-a-half down. Now the days lead. Under them, a compact card summarizes your current rung, the next rung, and taps into the full roadmap. Same information, one scroll instead of three.

Onboarding spinner

Users reported tap-spamming the "Go to Home" button at the end of onboarding because it looked like it wasn't doing anything. On slow networks, the backend round-trip that persists your plan can take 2-3 seconds — long enough to feel broken. Fix: the button now shows "Setting up your plan…" with a spinner the moment you tap it, and re-taps are ignored. Small change, big drop in confusion.

Account teardown fixes

Under-the-hood cleanup for account switches. When you logout or delete your account, we now correctly wipe every user-specific preference (display name, goal, training days, workout counter, one-shot flags) from the device. Previously a re-signin left some stale bits — like showing the old account's name in Profile or firing the review prompt at the wrong time. Fresh sign-in, fresh state.

Device preferences you deliberately configured (weight unit, hold-timer countdown length) survive — those belong to the phone, not the account.

Behind the scenes: the auth-identity join-table

The interesting architecture bit for anyone curious: we moved from "User row's ID is Apple's sub claim" to a proper join-table (AuthIdentity) where one User can have N identities across providers. This is what makes account-linking work — Google and Apple identities can both point at the same User row, and cross-provider merge happens by verified email (with Apple proxies carved out for the reasons above).

For existing users: nothing changed. Your session, your ID, your data — all identical. Existing Apple identities got backfilled into the new table pointing at the same User rows they always did.

The design is future-provider-friendly. When magic-links, passkeys, or Meta sign-in (?) show up, the resolver handles them via the same pattern: verify the provider token, look for an existing identity, or link via verified email, or create a new user. No schema change needed.

What's next

Android app is next up as a proper theme, not just prep. Native Kotlin, Compose UI, same design language as iOS, same backend endpoints. If you signed up with Google today, you're set for that day.

Between now and then: probably one more iOS patch to fix whatever we're going to find in the Google-signin flow at real user volume, plus continued polish on the onboarding-to-first-workout arc. Users continue to be the best debug tool.

As always, feedback direct to support@zenmotion.app or @zenmotion_app on Instagram.

Train well.