// signin/OnboardingChain.jsx — visualises the full post-auth flow with // 7 numbered phones in a row. Welcome → Credentials → // HealthKit intro → HealthKit system sheet → Initial sync → Tour → // Today (landing). Connector arrows between cards. Server is always // ordent.us, so there is no server-URL step. function OnboardingArrow({ dark = false }) { return (
); } window.OnboardingArrow = OnboardingArrow; // First-sync screen — happens once after HealthKit grant. // Shows what's being pulled, with progress per stream. function InitialSync({ dark = false }) { return (
Pulling your data.
One-time setup. Subscribed feeds, last 14 days of sleep, and your wake schedule. Stays connected after this.
{/* Progress per stream */}
{[ { ic: 'calendar', c: 'var(--io-blue)', t: 'Calendars', s: '7 of 7 feeds', done: true }, { ic: 'moon', c: 'var(--io-sleep)', t: 'Sleep · last 14d', s: '142 of 142 samples', done: true }, { ic: 'heart', c: 'var(--io-heart)', t: 'Heart rate', s: '1,284 samples', done: false, pct: 64 }, { ic: 'activity', c: 'var(--io-activity)', t: 'Activity', s: 'Queued', done: false, pct: 0 }, { ic: 'sparkles', c: 'var(--io-indigo)', t: 'Bedtime model', s: 'Queued', done: false, pct: 0 }, ].map((r, i) => (
{r.t}
{r.s}
{r.done ? (
) : r.pct > 0 ? ( ) : ( )}
))}
You can keep using the app while this runs.
); } window.InitialSync = InitialSync; // Land-on-Today after onboarding completes — mostly empty, with a // gentle "first morning" toast. Reuses TodayHome with a tweaked greeting. function FirstMorning({ dark = false }) { return ( Welcome, Lukas} trailing={<>}/>
Setup complete
Your page is ready.
Tomorrow morning, you'll see today's first event and tonight's bedtime here.
The Arc fills in as the day starts.
Tap any tab below to look around.
); } window.FirstMorning = FirstMorning;