Why this matters

Most onboarding flows treat attention as infinite. We used lightweight signals—language, scroll intent, and action density—to offer the next helpful step only when it would be welcome.

Wireframe of adaptive onboarding
Early wireframe exploration. The prompt nudges appear only when intent is low.

Signals → decisions

We mapped inputs to small state transitions. Think of it like a thermostat for attention: don’t blast heat, maintain comfort.

// tiny state sketch
                  const signals = { lang: 'de', idleMs: 4200, clicks: 1 };
                  const state = { step: 'collect_profile', nudge: null };

                  if (signals.idleMs > 3500)       state.nudge = 'tooltip';
                  if (signals.clicks > 3)          state.nudge = null;          // user is moving
                  if (signals.lang === 'de')        state.locale = 'de-DE';       // route copy
                
“Onboarding shouldn’t shout. It should harmonize with the user’s current tempo.”

Outcome snapshot

The funnel below is a synthetic preview…

Implementation notes

  • Kept all prompts under 14 words.
  • Localized first; animated later.
  • Logged drop-off with reasons, not just counts.